成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

K8S 本地調試高效工具包 kt-connect 使用,阿里開源!

開源
背景有點啰嗦,講講一路走來研發本地調試的變化,嫌煩的可以直接跳過,不影響閱讀。

背景

2019 年

我在的公司當時是個什么情況,只有兩個 Java 應用,還都跑在一個 Tomcat Servlet 容器。

當時是如何本地調試?都是研發自己電腦裝個 Mysql,裝個 Tomcat,自己電腦運行調試,好處嘛就是后端研發互不干擾,想怎么改就怎么改,APP 端研發就直連后端的筆記本調試。上線部署嘛就是一個研發手動編譯個 Jar 包丟到云服務器上面,大體就是個草臺班子,能干活,但是也就那樣。

2020 年

到了 2020 年,公司買了一臺服務器,Centos 的系統,給裝上了 Mysql、Tomcat,用上了 Redis 緩存,RabbitMQ 消息隊列,有了獨立的測試環境,用上了 Jenkins 自動打包并部署應用,也算鳥槍換炮,起碼不用自己打包了。

這個時候是如何本地調試呢?起碼不用自己電腦裝 Mysql 了,后面框架由 SpringMVC 和 Struts2 都改成 Spring Boot,外置的 Tomcat 也可以去掉了。后端研發本地運行 Spring Boot 時直連服務器的 Mysql 進行調試,APP 端再也不用連后端研發的筆記本了,有了相對穩定的調試環境。代價就是各個后端的數據庫更新結構要保持兼容性,避免影響他人。

2021 年

隨著業務增長,后端框架由 Spring Boot 進化為 Spring Cloud 全家桶,應用運行環境由 Linux 直接運行改為了 Docker 鏡像部署,各類中間件同樣也使用了 Docker 鏡像。產品線增加,單一的開發分支已經不能滿足需求,為此又開辟了另外一條后端代碼分支,同樣的開發測試環境也多了一份。

這個時候的本地調試,對于 APP 端來說變化不大,區別連接后端不同環境使用不同域名而已。對于后端的研發同學就不一樣了,每次本地調試自己電腦要常駐一個 Eureka 和一個 Config Server,如果本地調試的微服務依賴比較多,沒個大內存真是頂不住。

2022 年

業務量繼續增加,產品同事數量增加了,那個需求量真是堆積如山,兩個分支已經不能滿足要求了,又開了第三個分支,還是不夠。每次增加新的分支運行環境,后端研發同學也很痛苦,一堆環境和第三方平臺回調需要配置。為了能動態擴容縮容,Spring Cloud 全家桶繼續演進,拋棄了 Zuul 網關和 Eureka,改為使用 Spring Cloud Kubernetes,運行環境全面向 K8S 靠攏。在此期間公司又采購了一臺服務器用于開發測試,內存 CPU 磁盤滿上!

進入 K8S 時代,后端研發本地的電腦沒辦法隨意連接 Linux 服務器上面的各種中間件,每個新分支環境里面的每個 POD 都是一個新的 ip,也不可能像之前那樣開放指定幾個中間件的端口給后端連接,那么多環境每個都做設置的話,運維同學整天不用干別的事了。也由此引出了今天要說的 kt-connect 工具,通過這個工具,后端研發本地的電腦可以代理訪問到各個分支環境,也就是 K8S 里面的命名空間的所有服務,并且只需要啟動需要調試的服務,大大節省了電腦 CPU 內存占用。

選型

在選擇代理訪問 K8S 環境以便于本地調試的工具中,網上有幾種。

1. 端口轉發

使用 Ingress、NodePort、LoadBalancer 之類的將流量轉發到指定端口,如上文所說,會讓運維同學工作量比較大,也不便于分支環境的自動創建和回收,只適合需要暴露端口數量不多的場景。

2. VPN

通過在 K8S 每個命名空間里面設置一個運行有 VPN 服務的 POD,后端研發筆記本通過 VPN 客戶端連接代理進入到指定命名空間,可以正常訪問和解析集群內各類服務,基本能滿足日常的要求,缺點是每個命名空間都常駐了一個 VPN 服務的運行資源。

3. Telepresence

在搜索的過程中發現了這個代理工具,幾乎可以說 9 成的中英文技術文章都推薦使用這個工具,功能非常強大,不但提供了 VPN 所具有的代理功能,可以訪問到命名空間內所有服務,還能指定各種規則攔截指定服務的流量到本地機器,相當于本地機器也能作為一個普通的 POD 提供對外服務。大體設計原理如下:

在研發本地電腦執行如下命令:

telepresence helm install --kubeconfig .kubeconfig
telepresence connect ---kubeconfig .kubeconfig

就會自動在 K8S 集群創建一個命名空間 ambassador,并且部署一個 traffic-manager 的 pod,用于流量管理,而在研發筆記本本地則會啟動 2 個 daemon 服務,其中一個叫 Root Daemon,用于建立一條雙向代理通道,并管理本地電腦與 K8S 集群之間的流量,另外一個 User Daemon 則是負責與 Traffic Manager 通信,設置攔截規則,如果登錄后還負責與 Ambassador Cloud 進行通信。

通過配置攔截規則,攔截的 POD 里面會安裝一個 traffic-agent,官方文檔說明是類似 K8S 集群的 sidecar 模式,對注入 POD 進行流量劫持,所有流量出入通過 traffic-manager 進行重新路由。

  •  The Traffic Agent is a sidecar container that facilitates intercepts. When an intercept is first started, the Traffic Agent container is injected into the workload's pod(s).

雖然他的功能很強大,但是在目前 2.5 版本的使用過程中,為了使用他的攔截和 Preview Url 功能必須在他家的商業云平臺 Ambassador Cloud 進行注冊登陸(注:不知道為什么網上技術文章都沒提到這點,測試的時候非得要登錄他家云平臺),并且攔截規則的配置是通過云平臺的網頁進行操作的,聯網的要求,包括可能存在的安全,泄露之類的隱患,我覺得是不可接受,也因此不得不放棄使用這個工具。

還有一個不得不說的缺點就是,老版本使用后可以清理掉自動創建的命名空間(namespace)和 pod、攔截 agent 的功能(telepresence uninstall)也沒了,在 2.5 版本的命令參數里面完全消失了,這就導致每次使用后,如果想保持環境干凈,還得麻煩運維同學去清理掉,非常麻煩,簡直逼死潔癖患者。

4. kt-connect

所幸開源社區又找到了另外一款類似 Telepresence 的工具,名為 kt-connect:

  •  https://github.com/alibaba/kt-connect

使用版本為 v0.3.6(順便說下我們使用的 K8S 版本是 1.24),并且它無需聯網登陸什么賬號,結束命令執行默認還會自動清理。阿里出品,不確定是不是又一個 KPI 開源項目,但是至少這一刻我對這個工具是非常滿意的。

原理

同 Telepresence 類似,但不同的是,kt-connect 只會在指定連接的命名空間(namespace)里面新建一個自用的 pod,然后部署一個 kt-connect-shadow 的鏡像。相比 Telepresence,它在模式進行了細分擴展,分為四大模式:

1. Connect 模式

ktctl.exe connect --kubeconfig .kubeconfig --namespace feature-N --debug

這個模式下,kt-connect 起到的是一個類似于 VPN 的作用,研發本地電腦可以訪問到連接的命名空間(namespace)內的所有服務,但是并沒有加到集群里面其他服務里面,其他服務的流量并不會轉發到本地電腦。

注 1: 與 telepresence 類似,kt-connect 所有命令都要帶上--kubeconfig,確保有足夠權限和能正確連接 K8S 集群的 API Server,很多文章都很少提到這點,假如 K8S 集群限制權限,或者與研發不在同一個網絡,必須確保使用運維同學提供的有足夠權限的授權文件 kubeconfig 來進行連接。

注 2:

Failed to setup port forward local:28344 -> pod kt-connect-shadow-gseak:53 error="error upgrading connection: error sending request: Post "[https://10.0.8.101:8443/api/v1/namespaces/feature-N/pods/kt-connect-shadow-gseak/portforward](https://10.0.8.101:8443/api/v1/namespaces/feature-N/pods/kt-connect-shadow-gseak/portforward)": dial tcp 10.0.8.101:8443: connectex: A socket operation was attempted to an unreachable host."

如果出現以上報錯的話,有可能是 kt-connect 路由 BUG,可能本地電腦的路由與新加的通往 API Server 的路由有沖突,增加參數--excludeIps 10.0.8.101/32 即可,如果網段沖突比較多,可以擴大網段范圍,例如--excludeIps 10.0.8.0/24 參考 issue-302:

  •  https://github.com/alibaba/kt-connect/issues/302
ktctl.exe connect --kubeconfig .kubeconfig --namespace feature-N --excludeIps 10.0.8.101/32 --debug

2. Exchange 模式

ktctl.exe exchange serviceA --kubeconfig .kubeconfig --namespace feature-N --expose 12001 --debug

這個模式類似于 Telepresence 攔截模式,將指定服務的所有流量攔截下來轉發到研發本地電腦的端口,使用這個模式能對環境里的訪問請求直接進行調試。

具體原理就是將 service 里面的 pod 替換成一個 serviceA-kt-exchange 的 pod。

注 1: Exchange 模式的流量方向是單向的,并不會將本地電腦主動發起的請求代理過去,如果 K8S 集群跟研發本地電腦不在一個網段內,需要另外開一個命令行運行 Connect 模式,確保本地服務可以正常連接 K8S 集群的其他服務,參考 issue-216:

  •  https://github.com/alibaba/kt-connect/issues/216

注 2: Exchange 模式是通過攔截 service 進行流量轉發,假如集群的請求沒有經過 service,例如直接解析到 pod 之類,可能就會出現攔截失敗的情況(同理 Mesh 模式也是如此),所以出現問題記得跟運維同學確認 K8S 集群內的路由情況。

3. Mesh 模式

kctl.exe mesh serviceA --kubeconfig .kubeconfig --namespace feature-N --expose 12001 --debug

執行命令后可以看到輸出日志里面包含類似文字:

2:30PM INF Now you can access your service by header 'VERSION: xxxxx'

這個模式本地電腦的服務和 K8S 集群里面相同的服務同時對外響應請求,但是只有通過指定的 http 請求頭 VERSION: xxxx 的請求才會轉發到本地電腦,相比 Exchange 模式,保證了其他人服務正常使用,同時研發又能進行本地調試。每次生成的請求頭 VERSION 的值都是動態生成的,如果要固定這個值,可以通過參數--versionMark 寫死,例如固定值為 test-version,命令如下:

kctl.exe mesh serviceA --kubeconfig .kubeconfig --namespace feature-N --expose 12001 --debug --versionMark test-version

具體原理就是將 serviceA 里面的 Pod 替換成一個 serviceA-kt-router 的路由鏡像,負責根據請求頭進行流量代理轉發,另外生成一個 serviceA-kt-stuntman 服務,這個就是線上正常運行的 serviceA,還有一個 serviceA-kt-mesh-xxxxx 服務,這個就負責將代理流量到本地電腦。

4. Preview 模式

kctl.exe preview serviceB --kubeconfig .kubeconfig --namespace feature-N --expose 12001

不同于 Exchange 和 Mesh 模式要求 K8S 集群有一個在運行的服務,Preview 模式可以將本地電腦運行的程序部署到 K8S 集群中作為一個全新的 Service 對外提供服務,非常便于新建服務的開發調試、預覽等作用。

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2022-09-27 11:25:30

開源KubernetesKt-Connect

2024-02-20 08:06:00

k8s聯調工具

2022-04-22 13:32:01

K8s容器引擎架構

2022-04-29 10:40:38

技術服務端K8s

2024-01-08 06:44:08

PodK8Skubectl

2016-02-16 13:21:33

2020-09-01 10:40:11

K8SDocker開源

2021-09-28 09:52:08

Prometheus開源工具Kubernetes

2024-03-28 18:08:44

Kubernetes抓包Pod

2019-05-13 09:22:21

微軟開源機器學習

2023-11-06 07:16:22

WasmK8s模塊

2021-02-03 14:04:52

k8spermissionm管理工具

2021-05-07 09:31:33

KindK8s Operator

2022-06-14 07:56:15

Kubernetes存儲架構K8S

2021-11-07 07:41:21

K8S命令行管理工具容器

2023-09-06 08:12:04

k8s云原生

2009-04-02 17:37:38

dom4jXMLJava

2021-07-14 14:20:22

root命令Linux

2021-08-05 07:28:26

K8sNFS ProvisiSubdir

2020-05-12 10:20:39

K8s kubernetes中間件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线视频亚洲 | 中文字幕成人av | 中文字字幕一区二区三区四区五区 | 亚洲成av人片在线观看无码 | 欧美日韩一区二区三区视频 | 91久久电影 | 都市激情亚洲 | 四虎影院免费在线播放 | 国产一区二区三区四区hd | 午夜天堂精品久久久久 | 中文视频在线 | 久久一热 | 日本午夜视频 | 欧美日韩高清免费 | 日韩精品一区二区三区在线观看 | 国产在线精品区 | 亚洲精品一区二区 | 国产精品久久性 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 久久国内精品 | 香蕉一区二区 | 中国一级特黄视频 | 中文字幕成人av | 久久成人精品 | 欧美1级 | av免费成人 | 超碰在线人人 | 成人三级网址 | www.伊人.com| 亚洲精品视频一区 | 国产一区二区精品在线观看 | 在线观看 亚洲 | 国产视频1区 | 日韩国产在线观看 | 欧美福利 | 99精品99| 天天人人精品 | 成人精品鲁一区一区二区 | 欧美成人精品一区二区三区 | 国产日韩欧美在线播放 | 伊人久久一区二区 |