SpringCloud容器化服務(wù)發(fā)現(xiàn)及注冊(cè)實(shí)現(xiàn)方法解析
springclould項(xiàng)目容器化過(guò)程中, 可能是采用部分部分容器化,逐步遷移到容器環(huán)境, 這時(shí)候我們就會(huì)面臨一個(gè)問(wèn)題: 外部服務(wù)如何調(diào)用k8s內(nèi)部服務(wù).
Eureka Server提供服務(wù)注冊(cè)服務(wù),各個(gè)節(jié)點(diǎn)啟動(dòng)后,會(huì)在Eureka Server中進(jìn)行注冊(cè),這樣Eureka Server中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,consumer 通過(guò) Eureka 發(fā)現(xiàn)其他節(jié)點(diǎn)/服務(wù).
應(yīng)用場(chǎng)景
Eureka , gateway , app01, app02 處于k8s集群外部
app03, app04 位于k8s內(nèi)部
問(wèn)題: k8s集群內(nèi)部可以訪問(wèn)外部 eureka, gateway等服務(wù), 但是外部服務(wù)無(wú)法訪問(wèn)k8s內(nèi)部 app03,app04.
打通網(wǎng)絡(luò)
打通外部環(huán)境與k8s環(huán)境service與pod網(wǎng)段,可以做的網(wǎng)絡(luò)直連.使得外部服務(wù)可以直接訪問(wèn)k8s內(nèi)網(wǎng).
方案一 : k8s node 節(jié)點(diǎn)可以直接訪問(wèn)pod與service網(wǎng)段, 我們只需要將其中一個(gè)節(jié)點(diǎn)作為 Gateway , 其他外部機(jī)器添加靜態(tài)路由網(wǎng)關(guān)執(zhí)行這臺(tái) node 節(jié)點(diǎn)即可.
方案二: 將其他機(jī)器部署flannel插件, 打通pod與service網(wǎng)段.
PS 這里我們使用第一種方案.
PS阿里云環(huán)境下由于使用VPC , 這是我們只需要在VPC添加路由策略即可.
開(kāi)啟服務(wù)器路由轉(zhuǎn)發(fā)
node 節(jié)點(diǎn)
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 開(kāi)啟路由轉(zhuǎn)發(fā)的node節(jié)點(diǎn).
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 注冊(cè)問(wèn)題
打通網(wǎng)絡(luò)后, 我們啟動(dòng)服務(wù), 我們發(fā)現(xiàn)雖然節(jié)點(diǎn)已經(jīng)注冊(cè)到Eureka, 但是使用的是hostname:port的格式, 而springclould中節(jié)點(diǎn)相互訪問(wèn)就是使用的Eureka中的注冊(cè)信息, 這樣也就意味著我k8s里的springclould節(jié)點(diǎn)注冊(cè)的是pod 的 hostname (Eureka在k8s外部不需要打通網(wǎng)絡(luò)也可以正常注冊(cè))
也就是外部服務(wù)雖然可以訪問(wèn)k8s內(nèi)部網(wǎng)絡(luò), 但是這個(gè)hostname解析不成對(duì)于的IP, 也就是還是沒(méi)有辦法相互調(diào)用.
也就是說(shuō)我們節(jié)點(diǎn)注冊(cè)時(shí)而是使用pod IP注冊(cè)就可以解決這個(gè)問(wèn)題, 下邊我們修改下k8s內(nèi)部的springclould節(jié)點(diǎn)配置
vim BOOT-INF/classes/application-k8s.yml # 配置服務(wù)注冊(cè)中心的地址 eureka: client: serviceUrl: defaultZone: http://xx:xxx@sreg-smix3-k8s-t:7000/eureka/ instance: preferIpAddress: true # 使用IP注冊(cè)
重新打版, 重啟pod.看起來(lái)和之前一樣, 我們點(diǎn)擊進(jìn)去看下:

雖然顯示是hostname, 但是注冊(cè)地址以及改成了ip, 這時(shí)候其他非容器化節(jié)點(diǎn)去訪問(wèn)時(shí)就可以正常調(diào)通了.

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Java和高德地圖API將經(jīng)緯度轉(zhuǎn)換為地理位置信息的步驟
這篇文章詳細(xì)介紹了如何將GPS坐標(biāo)轉(zhuǎn)換為人類可讀的地理位置,介紹了環(huán)境準(zhǔn)備、代碼實(shí)現(xiàn)、異常處理及優(yōu)化步驟,首先創(chuàng)建LocationFinder類,實(shí)現(xiàn)getLocationFromCoordinates方法,利用高德逆地理編碼API轉(zhuǎn)換坐標(biāo),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
spring framework體系結(jié)構(gòu)及模塊jar依賴關(guān)系詳解
在本篇文章里小編給大家整理的是關(guān)于spring framework體系結(jié)構(gòu)及模塊jar依賴關(guān)系,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。2019-09-09
IDEA 2021.2 激活教程及啟動(dòng)報(bào)錯(cuò)問(wèn)題解決方法
這篇文章主要介紹了IDEA 2021.2 啟動(dòng)報(bào)錯(cuò)及激活教程,文章開(kāi)頭給大家介紹了idea2021最新激活方法,關(guān)于idea2021啟動(dòng)報(bào)錯(cuò)的問(wèn)題小編也給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
在IDEA中使用debug工具去運(yùn)行java程序的實(shí)現(xiàn)步驟
調(diào)試工具(debug工具)是一種用于幫助程序員識(shí)別和修復(fù)程序中的錯(cuò)誤的工具,它們提供了一系列的功能,幫助程序員在代碼執(zhí)行的過(guò)程中跟蹤和檢測(cè)問(wèn)題,本文將給大家介紹使用debug工具去運(yùn)行java程序的實(shí)現(xiàn)步驟,需要的朋友可以參考下2024-04-04
一文學(xué)習(xí)Java NIO的ByteBuffer工作原理
很多網(wǎng)友說(shuō)JDK又在寫(xiě)B(tài)ug!下面通過(guò)通過(guò)本文學(xué)習(xí)下為何Java NIO的ByteBuffer這么垃圾,涉及到ByteBuf API 的優(yōu)點(diǎn)及工作原理解析,感興趣的朋友跟隨小編一起看看吧2021-05-05
Java集合List和Map互轉(zhuǎn)的方法總結(jié)
有時(shí)候我們需要將給定的List轉(zhuǎn)換為Map,或者M(jìn)ap轉(zhuǎn)換為L(zhǎng)ist,本文主要介紹了Java集合List和Map互轉(zhuǎn)的方法總結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
java新增關(guān)聯(lián)的三張表,每張表要求都插入集合,代碼實(shí)現(xiàn)方式
這篇文章主要介紹了java新增關(guān)聯(lián)的三張表,每張表要求都插入集合,代碼實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
解決java idea新建子目錄時(shí)命名不是樹(shù)形結(jié)構(gòu)的問(wèn)題
這篇文章主要介紹了解決java idea新建子目錄時(shí)命名不是樹(shù)形結(jié)構(gòu)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
idea2023創(chuàng)建JavaWeb教程之右鍵沒(méi)有Servlet的問(wèn)題解決
最近在寫(xiě)一個(gè)javaweb項(xiàng)目,但是在IDEA中創(chuàng)建好項(xiàng)目后,在搭建結(jié)構(gòu)的時(shí)候創(chuàng)建servlet文件去沒(méi)有選項(xiàng),所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于idea2023創(chuàng)建JavaWeb教程之右鍵沒(méi)有Servlet問(wèn)題的解決方法,需要的朋友可以參考下2023-10-10

