微服務后端開發的最大痛點之一就是調試困難,非常影響我們的開發效率。
如果我們想與其他微服務進行聯動調試,則需要在本地環境中啟動對應的微服務模塊,這可能需要大量的配置和構建時間,同時也會占用我們本地很多資源,可能還會出現”帶不動“的情況。
雖然說我們可以在測試服務器上進行調試,但整個流程也是比較漫長,「提交代碼 -> 觸發CI/CD -> 等待構建成功」,可能簡單的 BUG 我們提交代碼打個日志就能解決問題,當遇到復雜的 BUG 時通過這個方式在服務器上調試就非常難受了,太浪費時間了,「提交 -> 等待」,反反復復,始終沒有本地開發工具直接調試的方便。
下面介紹的工具將遠程和本地融為一體,讓本地開發更加流暢。
Telepresence
Telepresence 是一個開源工具,用于在本地開發環境中模擬 Kubernetes 集群中的微服務,它允許開發人員在本地開發環境中運行和調試微服務,而不必擔心環境的復雜性和配置困難。
簡單來說 Telepresence 將 Kubernetes 集群中服務的流量代理到本地,Telepresence 主要有四個服務:
「Telepresence Daemon:」 本地的守護進程,用于集群通信和攔截流量。
「Telepresence Traffic Manager:」 集群中安裝的流量管理器,代理所有相關的入站和出站流量,并跟蹤主動攔截。
「Telepresence Traffic Agent:」 攔截流量的 sidecar 容器,會注入到工作負載的 POD 中。
「Ambassador Cloud:」 SaaS 服務,結合 Telepresence 一起使用,主要是生成預覽 URL 和一些增值服務。
全局流量攔截
全局流量攔截是將 Orders 的所有流量都攔截到我們本地開發機上,如下圖。
個人流量攔截
「個人流量攔截」允許選擇性地攔截服務的部分流量,而不會干擾其余流量。這使我們可以與團隊中的其他人共享一個集群,而不會干擾他們的工作。每個開發人員都可以只針對他們的請求攔截 Orders 服務,同時共享開發環境的其余部分。
個人攔截需要配合 Ambassador Cloud
使用,這是一項收費服務,免費用戶可以最多攔截 3 個服務。
結合 Telepresence 開發調試 Rainbond 上的微服務
- 基于主機安裝 Rainbond [1]或基于 Helm 安裝 Rainbond[2]。
安裝 Telepresence
MacOS:
#Intel
brewinstalldatawire/blackbird/telepresence
#M1
brewinstalldatawire/blackbird/telepresence-arm64
Windows:
#使用管理員身份打開Powershell
#下載壓縮包
Invoke-WebRequesthttps://app.getambassador.io/download/tel2/windows/amd64/latest/telepresence.zip-OutFiletelepresence.zip
#解壓縮包
Expand-Archive-Pathtelepresence.zip-DestinationPathtelepresenceInstaller/telepresence
Remove-Item'telepresence.zip'
cdtelepresenceInstaller/telepresence
#安裝
powershell.exe-ExecutionPolicybypass-c".'.install-telepresence.ps1';"
安裝 Telepresence 流量管理器到集群中
可以使用 Telepresence 快速安裝 Traffic Manager,本地需要有 kubeconfig 文件 ~/.kube/config
。
$telepresencehelminstall
...
TrafficManagerinstalledsuccessfully
或者在 Kubernetes 集群中使用 Helm 安裝 Traffic Manager[3]。
本地連接遠程服務
本地使用 telepresence connect
連接遠程 Kubernetes API Server,本地需要有 kubeconfig 文件 ~/.kube/config
$telepresenceconnect
connectedtocontext
在 Rainbond 上快速部署 Pig 微服務應用
通過 Rainbond 開源應用商店快速部署 Pig 微服務應用,部署后如下圖
后面會以 pig-auth 這個服務為例,演示本地開發調試的流程,這里需要做一些小改動:
-
從應用商店安裝的應用默認 Workload 是字符串,需要修改 Workload 為易于查看的,這里以 pig-auth 為例,進入組件中編輯組件名稱,修改組件英文名稱為
auth
-
簡單來說 telepresence 的工作原理就是代理 k8s service,默認 gateway 到 auth 是使用的 nacos 做的負載均衡,這樣的話 telepresence 是無法攔截到流量的,我們需要修改 gateway 配置使用 k8s service 做負載均衡。
-
打開 pig-register 組件的 8848 對外端口,訪問 nacos,修改
pig-gateway-dev.yml
的spring.cloud.gateway.routes.uri: http://gr795b69:3000
,gr795b69:3000
通過 pig-auth 組件內的端口訪問地址獲取。
-
如果本地只啟動一個 pig-auth 服務,pig-auth 需要連接 pig-register 和 redis,那么就需要將這倆服務的對外端口打開,并修改配置文件讓本地的 pig-auth 服務可以連接遠程到 pig-register 和 redis。
在本地調試 auth 服務
使用 IDEA 或 VScode 在本地啟動 pig-auth 服務。
在本地使用 telepresence 攔截 pig-auth 流量,命令如下:
$telepresenceintercept--port<local-port>:-n
命令拆解:
#
#需要攔截流量的服務workload
$kubectlgetdeploy-nzq
NAMEREADYUP-TO-DATEAVAILABLEAGE
pig-auth1/111146m
#本地端口
#
#需要攔截流量的服務的serviceportname
$kubectlgetsvcgr795b69-nzq-oyaml
...
ports:
-name:http-3000
port:3000
protocol:TCP
targetPort:3000
...
#命名空間
最終命令:
$telepresenceinterceptpig-auth--port3000:http-3000-nzq
UsingDeploymentpig-auth
intercepted
Interceptname:pig-auth-zq
State:ACTIVE
Workloadkind:Deployment
Destination:127.0.0.1:3000
ServicePortIdentifier:http-3000
VolumeMountError:sshfsisnotinstalledonyourlocalmachine
Intercepting:allTCPrequests
我們在本地給退出登陸這塊邏輯打上斷點,然后通過線上的前端退出登陸,打到我們本地 IDEA上,整體效果如下:
最后
Telepresence 可以幫助我們簡化本地開發流程,同時保證代碼的正確性和可靠性。還能使我們在集群中輕松調試和測試代碼,提高開發效率。結合 Rainbond 的部署簡化,從開發到部署都非常的簡單,讓我們專注于代碼編寫。
-
模塊
+關注
關注
7文章
2722瀏覽量
47571 -
服務器
+關注
關注
12文章
9237瀏覽量
85663 -
微服務
+關注
關注
0文章
138瀏覽量
7366
原文標題:讓遠程成為本地,微服務后端開發的福音
文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論