在開發(fā)中經(jīng)常會碰到SpringBoot應(yīng)用在啟動成功以后,發(fā)現(xiàn)注冊到注冊中心的IP不是自己想要的。實際開發(fā)聯(lián)調(diào)的時候也經(jīng)常碰到自己本地啟動應(yīng)用怎么獲取到一個怪怪的IP,通過別的機器無法連接到這個IP。發(fā)現(xiàn)有虛擬機的時候,就把虛擬機網(wǎng)卡停掉,然后才能獲取本地局域網(wǎng)IP。當(dāng)然也可以每個服務(wù)都指定IP的方式來解決這個問題,只有幾個實例還可以,但是有幾十或者上百個實例如何解決呢?
出現(xiàn)這種問題的原因是當(dāng)前機器有多個網(wǎng)卡(如有虛擬網(wǎng)卡)造成的,SpringBoot在獲取IP的時候無法獲取到正確的IP,在實際生產(chǎn)環(huán)境中服務(wù)器本身也有多塊網(wǎng)卡,SpringBoot啟動時只能選擇一個IP,能否通過簡單的配置就能解決這個問題呢?答案是,可以的,SpringBoot本身自帶這種功能。
SpringBoot提供了三種配置方式,可以單獨使用,也可以混合使用。
配置忽略網(wǎng)絡(luò)接口
使用Docker中運行SpringBoot服務(wù)時,服務(wù)注冊的時候,可以忽略掉一些指定名稱的網(wǎng)絡(luò)接口,想要忽略的網(wǎng)絡(luò)接口的名稱可以使用正則表達式來配置。下面的配置就是忽略名稱為docker0網(wǎng)絡(luò)接口和所有名稱以veth開頭的網(wǎng)絡(luò)接口:
-
application.yml.
spring: cloud: inetutils: ignoredInterfaces: - docker0 - veth.*
配置使用指定網(wǎng)絡(luò)接口
相反,也可以使用正則表達式配置只使用指定的網(wǎng)絡(luò)接口地址,下面配置的例子就只使用192.168開頭和10.0開頭的ip地址,其他的地址都不會使用。
-
bootstrap.yml.
spring: cloud: inetutils: preferredNetworks: - 192.168 - 10.0
配置使用site-local地址
如果SpringBoot服務(wù)只是在局域網(wǎng)內(nèi)使用,不會被外部調(diào)用的話,就可以使用site-local方式配置,配置方式如下:
-
application.yml
spring: cloud: inetutils: useOnlySiteLocalInterfaces: true