SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊實現(xiàn)方法解析
springclould項目容器化過程中, 可能是采用部分部分容器化,逐步遷移到容器環(huán)境, 這時候我們就會面臨一個問題: 外部服務(wù)如何調(diào)用k8s內(nèi)部服務(wù).
Eureka Server提供服務(wù)注冊服務(wù),各個節(jié)點啟動后,會在Eureka Server中進行注冊,這樣Eureka Server中的服務(wù)注冊表中將會存儲所有可用服務(wù)節(jié)點的信息,consumer 通過 Eureka 發(fā)現(xiàn)其他節(jié)點/服務(wù).
應(yīng)用場景
Eureka , gateway , app01, app02 處于k8s集群外部
app03, app04 位于k8s內(nèi)部
問題: k8s集群內(nèi)部可以訪問外部 eureka, gateway等服務(wù), 但是外部服務(wù)無法訪問k8s內(nèi)部 app03,app04.
打通網(wǎng)絡(luò)
打通外部環(huán)境與k8s環(huán)境service與pod網(wǎng)段,可以做的網(wǎng)絡(luò)直連.使得外部服務(wù)可以直接訪問k8s內(nèi)網(wǎng).
方案一 : k8s node 節(jié)點可以直接訪問pod與service網(wǎng)段, 我們只需要將其中一個節(jié)點作為 Gateway , 其他外部機器添加靜態(tài)路由網(wǎng)關(guān)執(zhí)行這臺 node 節(jié)點即可.
方案二: 將其他機器部署flannel插件, 打通pod與service網(wǎng)段.
PS 這里我們使用第一種方案.
PS阿里云環(huán)境下由于使用VPC , 這是我們只需要在VPC添加路由策略即可.
開啟服務(wù)器路由轉(zhuǎn)發(fā)
node 節(jié)點
vim /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 1
sysctl -p
外部服務(wù)器添加靜態(tài)路由
10.0.0.0/16 pod 網(wǎng)段
10.10.0.0/16 service 網(wǎng)段
172.17.71.209 開啟路由轉(zhuǎn)發(fā)的node節(jié)點.
ip route add 10.0.0.0/16 via 172.17.71.208 dev eth0
ip route add 10.10.0.0/16 via 172.17.71.208 dev eth0
Eureka 注冊問題
打通網(wǎng)絡(luò)后, 我們啟動服務(wù), 我們發(fā)現(xiàn)雖然節(jié)點已經(jīng)注冊到Eureka, 但是使用的是hostname:port的格式, 而springclould中節(jié)點相互訪問就是使用的Eureka中的注冊信息, 這樣也就意味著我k8s里的springclould節(jié)點注冊的是pod 的 hostname (Eureka在k8s外部不需要打通網(wǎng)絡(luò)也可以正常注冊)
也就是外部服務(wù)雖然可以訪問k8s內(nèi)部網(wǎng)絡(luò), 但是這個hostname解析不成對于的IP, 也就是還是沒有辦法相互調(diào)用.
也就是說我們節(jié)點注冊時而是使用pod IP注冊就可以解決這個問題, 下邊我們修改下k8s內(nèi)部的springclould節(jié)點配置
vim BOOT-INF/classes/application-k8s.yml # 配置服務(wù)注冊中心的地址 eureka: client: serviceUrl: defaultZone: http://xx:xxx@sreg-smix3-k8s-t:7000/eureka/ instance: preferIpAddress: true # 使用IP注冊
重新打版, 重啟pod.看起來和之前一樣, 我們點擊進去看下:
雖然顯示是hostname, 但是注冊地址以及改成了ip, 這時候其他非容器化節(jié)點去訪問時就可以正常調(diào)通了.
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)與算法之棧(動力節(jié)點Java學院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之棧,棧是先進后出的數(shù)據(jù)的結(jié)構(gòu),本文通過文字說明與實例代碼相結(jié)合的形式給大家介紹的非常詳細,需要的朋友跟著小編一起學習吧2017-04-04Mybatis配置映射文件中parameterType的用法講解
這篇文章主要介紹了Mybatis配置映射文件中parameterType的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09在Spring?Boot使用Undertow服務(wù)的方法
Undertow是RedHAT紅帽公司開源的產(chǎn)品,采用JAVA開發(fā),是一款靈活,高性能的web服務(wù)器,提供了NIO的阻塞/非阻塞API,也是Wildfly的默認Web容器,這篇文章給大家介紹了在Spring?Boot使用Undertow服務(wù)的方法,感興趣的朋友跟隨小編一起看看吧2023-05-05SpringBoot CommandLineRunner的異步任務(wù)機制使用
這篇文章主要介紹了SpringBoot CommandLineRunner的異步任務(wù)機制使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08