Rainbond的ServiceMesh架構(gòu)組件端口沖突處理解決
組件間的通訊問題
在我們部署具有多個服務(wù)的分布式業(yè)務(wù)時,必須要考慮的一點就是如何處理服務(wù)之間的通信問題,那么當我們將業(yè)務(wù)部署到Rainbond 上時,又是如何去處理的呢?
Rainbond 開箱即用的ServiceMesh架構(gòu)默認通過 Sidecar 代理的方式,為我們透明的解決了分布式場景下組件間的通訊問題。
例如A組件需要訪問B組件,可以讓A組件依賴B組件,這樣A組件啟動時會同時以插件方式啟動一個 envoy 服務(wù),而 envoy 服務(wù)會將B組件的對內(nèi)端口映射到A組件 Pod 網(wǎng)絡(luò)空間的本地回環(huán)地址127.0.0.1的相同端口,也就是說B組件開通了對內(nèi)的8080端口,那么在建立了A到B的依賴關(guān)系后,在A組件內(nèi)訪問127.0.0.1:8080會由 envoy 將相關(guān)請求轉(zhuǎn)發(fā)到B組件的8080端口。
但是我們實際的業(yè)務(wù)中經(jīng)常會出現(xiàn)一種情況,那就是一個組件需要和多個其他組件通信,而這些組件使用的服務(wù)端口有可能會相同,這就會導(dǎo)致 envoy 在本地回環(huán)地址127.0.0.1起監(jiān)聽時出現(xiàn)端口沖突。
我們可以通過以下方式解決這個問題:
方式一:通過HTTP 7層網(wǎng)絡(luò)治理進行端口復(fù)用
這一類型的組件,通過Rainbond網(wǎng)絡(luò)治理插件設(shè)置下游組件的域名(Domain)、請求路徑、請求頭等路由條件,由envoy通過80端口將訪問對應(yīng)域名的請求轉(zhuǎn)發(fā)至對應(yīng)的后端組件端口,不再監(jiān)聽開通插件的組件網(wǎng)絡(luò)空間的對應(yīng)端口,具體配置流程如下:
建立依賴關(guān)系
開通A組件網(wǎng)絡(luò)治理插件
配置下游服務(wù)訪問域名
更新組件并測試域名訪問效果
注意事項
網(wǎng)絡(luò)治理類插件會監(jiān)聽服務(wù)網(wǎng)絡(luò)的127.0.0.1:80,因此如果A組件本身再監(jiān)聽80端口的,會出現(xiàn)因80端口已被占用服務(wù)無法啟動而導(dǎo)致的組件狀態(tài)運行異常
方式二:動態(tài)變更組件的監(jiān)聽端口
Rainbond上運行的組件在啟動時會自動注入一個環(huán)境變量PORT,值為組件設(shè)置的第一個端口,可以設(shè)置組件啟動時引用PORT變量設(shè)置服務(wù)的監(jiān)聽端口,將服務(wù)監(jiān)聽的端口由平臺控制,即可不修改代碼實現(xiàn)監(jiān)聽端口變更。這樣依賴的不同服務(wù)設(shè)置不同的端口就可以避免沖突問題了,以Java項目源碼構(gòu)建為例,具體配置流程如下:
設(shè)置構(gòu)建源的啟動命令為
web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/*.jar
添加組件端口并構(gòu)建組件。
驗證服務(wù)監(jiān)聽端口
不同的開發(fā)語言和中間件設(shè)置監(jiān)聽端口的方式不同,開發(fā)者需要根據(jù)實際的設(shè)置方式進行開發(fā)配置。
方式三:使用 Kubernetes 原生 Service 治理模式
在 Rainbond 即將到來的5.3版本中,將支持直接使用 Kubernetes 原生 Service 模式,并提供友好的配置方式,在這種網(wǎng)絡(luò)治理模式下,每個對內(nèi)端口都可以設(shè)置自定義訪問域名,設(shè)置之后會生成對應(yīng)的 Service 資源,這樣組件間就可以直接通過內(nèi)部域名+端口的方式進行訪問,不再由 envoy 進行端口代理,從根本上避免出現(xiàn)端口沖突的問題。
方式四:使用 Istio 網(wǎng)絡(luò)治理模式
在 Rainbond 的后續(xù)版本中也將會支持 Istio 網(wǎng)絡(luò)治理模式,在這種網(wǎng)絡(luò)治理模式下,只會監(jiān)聽 Istio 配置的固定 Pod 端口,而不去監(jiān)聽需要訪問的組件端口,需要訪問的其他組件都會由 Pilot 設(shè)置流量規(guī)則和配置后交由 Envoy 通過 15001/15006 進行轉(zhuǎn)發(fā)。
Rainbond 云原生應(yīng)用管理平臺,實現(xiàn)微服務(wù)架構(gòu)不用改代碼,管理 Kubernetes 不用學(xué)容器,幫企業(yè)實現(xiàn)應(yīng)用上云,一站式將任何企業(yè)應(yīng)用持續(xù)交付到 Kubernetes 集群、混合云、多云等基礎(chǔ)設(shè)施。是 Rainstore 云原生應(yīng)用商店的支撐平臺。
以上就是Rainbond的ServiceMesh架構(gòu)組件端口沖突處理解決的詳細內(nèi)容,更多關(guān)于Rainbond ServiceMesh端口沖突解決的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
kubernetes需要默認的serviceaccount的原因解析
這篇文章主要介紹了kubernetes為何需要默認的serviceaccount,ServiceAccount 是 Kubernetes 中的一種重要概念,它的實際使用場景包括很多,本文給大家講解的非常詳細,需要的朋友可以參考下2023-04-04Kubernetes中創(chuàng)建命名空間實現(xiàn)方法
這篇文章主要為大家介紹了Kubernetes中創(chuàng)建命名空間實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11理解k8s控制器DaemonSet創(chuàng)建及使用場景
這篇文章主要為大家介紹了k8s控制器DaemonSet創(chuàng)建及使用場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09k8s service使用詳解(云原生kubernetes)
這篇文章主要介紹了k8s service使用詳解(云原生kubernetes),一個Service可以看作一組提供相同服務(wù)的Pod的對外訪問接口,作用于哪些Pod是通過標簽選擇器來定義的 ,Service是一個概念,主要作用的是節(jié)點上的kube-proxy服務(wù)進程,本文結(jié)合示例代碼詳解,需要的朋友參考下2023-02-02Rainbond的ServiceMesh架構(gòu)組件端口沖突處理解決
這篇文章主要大家介紹了Rainbond?ServiceMesh架構(gòu)組件端口沖突處理方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04Rainbond云原生部署SpringCloud應(yīng)用架構(gòu)實踐
這篇文章主要為大家介紹了Rainbond云原生部署SpringCloud應(yīng)用架構(gòu)實踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04