微服務(wù)后端開發(fā)的最大痛點之一就是調(diào)試困難,非常影響我們的開發(fā)效率。
如果我們想與其他微服務(wù)進行聯(lián)動調(diào)試,則需要在本地環(huán)境中啟動對應(yīng)的微服務(wù)模塊,這可能需要大量的配置和構(gòu)建時間,同時也會占用我們本地很多資源,可能還會出現(xiàn)”帶不動“的情況。
雖然說我們可以在測試服務(wù)器上進行調(diào)試,但整個流程也是比較漫長,「提交代碼 -> 觸發(fā)CI/CD -> 等待構(gòu)建成功」,可能簡單的 BUG 我們提交代碼打個日志就能解決問題,當遇到復(fù)雜的 BUG 時通過這個方式在服務(wù)器上調(diào)試就非常難受了,太浪費時間了,「提交 -> 等待」,反反復(fù)復(fù),始終沒有本地開發(fā)工具直接調(diào)試的方便。
下面介紹的工具將遠程和本地融為一體,讓本地開發(fā)更加流暢。
Telepresence
Telepresence 是一個開源工具,用于在本地開發(fā)環(huán)境中模擬 Kubernetes 集群中的微服務(wù),它允許開發(fā)人員在本地開發(fā)環(huán)境中運行和調(diào)試微服務(wù),而不必擔心環(huán)境的復(fù)雜性和配置困難。

簡單來說 Telepresence 將 Kubernetes 集群中服務(wù)的流量代理到本地,Telepresence 主要有四個服務(wù):
「Telepresence Daemon:」 本地的守護進程,用于集群通信和攔截流量。
「Telepresence Traffic Manager:」 集群中安裝的流量管理器,代理所有相關(guān)的入站和出站流量,并跟蹤主動攔截。
「Telepresence Traffic Agent:」 攔截流量的 sidecar 容器,會注入到工作負載的 POD 中。
「Ambassador Cloud:」 SaaS 服務(wù),結(jié)合 Telepresence 一起使用,主要是生成預(yù)覽 URL 和一些增值服務(wù)。
全局流量攔截
全局流量攔截是將 Orders 的所有流量都攔截到我們本地開發(fā)機上,如下圖。

個人流量攔截
「個人流量攔截」允許選擇性地攔截服務(wù)的部分流量,而不會干擾其余流量。這使我們可以與團隊中的其他人共享一個集群,而不會干擾他們的工作。每個開發(fā)人員都可以只針對他們的請求攔截 Orders 服務(wù),同時共享開發(fā)環(huán)境的其余部分。
個人攔截需要配合 Ambassador Cloud
使用,這是一項收費服務(wù),免費用戶可以最多攔截 3 個服務(wù)。

結(jié)合 Telepresence 開發(fā)調(diào)試 Rainbond 上的微服務(wù)
- 基于主機安裝 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]。
本地連接遠程服務(wù)
本地使用 telepresence connect
連接遠程 Kubernetes API Server,本地需要有 kubeconfig 文件 ~/.kube/config
$telepresenceconnect
connectedtocontext
在 Rainbond 上快速部署 Pig 微服務(wù)應(yīng)用
通過 Rainbond 開源應(yīng)用商店快速部署 Pig 微服務(wù)應(yīng)用,部署后如下圖

后面會以 pig-auth 這個服務(wù)為例,演示本地開發(fā)調(diào)試的流程,這里需要做一些小改動:
-
從應(yīng)用商店安裝的應(yīng)用默認 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 組件內(nèi)的端口訪問地址獲取。
-
如果本地只啟動一個 pig-auth 服務(wù),pig-auth 需要連接 pig-register 和 redis,那么就需要將這倆服務(wù)的對外端口打開,并修改配置文件讓本地的 pig-auth 服務(wù)可以連接遠程到 pig-register 和 redis。
在本地調(diào)試 auth 服務(wù)
使用 IDEA 或 VScode 在本地啟動 pig-auth 服務(wù)。
在本地使用 telepresence 攔截 pig-auth 流量,命令如下:
$telepresenceintercept--port<local-port>:-n
命令拆解:
#
#需要攔截流量的服務(wù)workload
$kubectlgetdeploy-nzq
NAMEREADYUP-TO-DATEAVAILABLEAGE
pig-auth1/111146m
#本地端口
#
#需要攔截流量的服務(wù)的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 可以幫助我們簡化本地開發(fā)流程,同時保證代碼的正確性和可靠性。還能使我們在集群中輕松調(diào)試和測試代碼,提高開發(fā)效率。結(jié)合 Rainbond 的部署簡化,從開發(fā)到部署都非常的簡單,讓我們專注于代碼編寫。
-
模塊
+關(guān)注
關(guān)注
7文章
2785瀏覽量
49946 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9738瀏覽量
87497 -
微服務(wù)
+關(guān)注
關(guān)注
0文章
145瀏覽量
7696
原文標題:讓遠程成為本地,微服務(wù)后端開發(fā)的福音
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
微服務(wù)架構(gòu)下分布式事務(wù)解決方案 —— 阿里GTS
微服務(wù)網(wǎng)關(guān)gateway的相關(guān)資料推薦
關(guān)于微服務(wù)的一些問題的解答

什么是微服務(wù)_微服務(wù)知識點全面總結(jié)
微服務(wù)可靠性設(shè)計

java微服務(wù)架構(gòu)有哪些

微服務(wù)優(yōu)勢_微服務(wù)架構(gòu)的好處與不足
Dubbo 如何成為連接異構(gòu)微服務(wù)體系的最佳服務(wù)開發(fā)框架

微服務(wù)為什么要用到API網(wǎng)關(guān)?
基于Traefik自研的微服務(wù)網(wǎng)關(guān)
【Spring Cloud 】基于微服務(wù)架構(gòu)的智慧工地監(jiān)管平臺源碼帶APP

springcloud微服務(wù)架構(gòu)
設(shè)計微服務(wù)架構(gòu)的原則

如何構(gòu)建彈性、高可用的微服務(wù)?

本地網(wǎng)站秒變公網(wǎng)可訪問!開發(fā)者必備的內(nèi)網(wǎng)穿透工具

評論