如何讓nacos中服務注冊的ip是自定義的網段ip ( docker swarm )


問題描述

  1. Nacos進行服務發現得時候,注冊是容器得虛擬ip。docker swarm集群下,做overlay后,容器會有多個網卡。Nacos進行發現得時候,獲取的ip和服務端口,存在一定問題,網關服務與其他服務可能發生不通的情況。

查看網絡

# docker network ls


查看各個網絡的網段

# docker network inspect vonedao_net|grep Subnet



docker_gwbridge:172.18.0.0/16    
ingress:10.0.0.0/24
vonedao_net:192.168.0.0/24   該網絡是我為項目而添加的

集群創建網絡的命令:指定網段

docker network create --driver overlay --subnet=192.168.0.0/24  --gateway=192.168.0.254  vonedao_net

在項目的yaml文件中會將容器增加到該網絡中

# cat vonedao-tenant-finance-biz.yaml 
version: '3.0'
services:
  vonedao-tenant-finance-biz:
    image: docker.vonedao.com/vonedao-cs/vonedao-tenant-finance-biz:3.7.0
    extra_hosts:
      - "nacos.vonedao.com:ip"
    environment:
      - NACOS-PORT=80
      - NACOS-HOST=nacos.vonedao.com
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
    networks:
      - vonedao_net
    ports:
      - "6060:6060"

networks:
  vonedao_net:
    external: true

查看容器網絡:

容器有:eth0@if6455 、eth2@if6457、eth1@if6459 3個網卡,用於與
docker_gwbridge、ingress、vonedao_net三個網絡進行溝通。

nacos中發現服務,進行服務注冊時候,只取eth0地址


由於這個網卡是隨機分配的3個需要的網絡,不能確保eth0就一定是vonedao_net的網絡,若nacos取到ingress地址,會導致網關服務出現連接超時問題,初步懷疑是ingress沒有開放服務端口:

驗證這個懷疑可以使用下面辦法:
在網關服務這個容器中可以安裝telnet命令進行檢測(telnet安裝方法在 https://www.cnblogs.com/zoujiaojiao/p/12753071.html),eth0@if6455 、eth2@if6457、eth1@if6459 3個網卡對應的ip,和端口進行驗證。
發現只有屬於vonedao_net網絡的ip和端口才能telnet通過:

也就是說,必須保證nacos上面注冊的ip是vonedao_net網絡的ip

如何讓nacos上容器注冊的ip是指定網段?

方式一

  1. 在代碼中的配置文件bootstrap.yml里面添加配置,這個方式需要在每個項目都加上:
spring:
  application:
    name: @artifactId@
  cloud:
    inetutils:
      ignored-interfaces: eth.*
      preferred-networks: 192.168.0

指定網絡:preferred-networks: 192.168.0
2. 重新打包鏡像,更新服務
3. 通過nacos檢查

4. 在網關服務中,可以看日志,是否還有連接失敗的錯誤。

已經成功了。

方式2

  1. 在nacos中的公共配置文件application-dev.yml中添加,可以避免每個項目都修改一次bootstrap.yml再打鏡像發布。

  2. 確保所有項目的代碼調用application-dev.yml這個公共配置文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM