多网卡微服务注册 IP/host 问题

多网卡微服务注册 IP/host 问题

    • [spring cloud 通用解决办法](#spring cloud 通用解决办法)
    • nacos
    • consul
    • eureka

如果机器上有多张网卡或虚拟网卡,那微服务在注册到注册中心时的 IP 就不是确定了的,如果注册了错误的 IP,会导致其他服务在调用时访问不到,因为不在一个网段。

spring cloud 通用解决办法

spring.cloud.inetutils.ignored-interfaces 接受一个正则表达式数组,配置要忽略的网卡,比如本地回环网卡 lo、docker 网卡 docker0、虚拟网卡 veth.*

spring.cloud.inetutils.preferred-networks 也接受一个数组,可以是网段的正则表达式,也可以是网段的前缀,配置优先选择的网段、IP,比如 ^192\.168 172.17,或者 192.168.0.5

use-only-site-local-interfaces: true 可以保证只注册私网 IP,不会注册公网 IP。私网 IP 指的是:

  1. 10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
  2. 172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
  3. 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
yaml 复制代码
# bootstrap.yaml
spring:
  cloud:
    inetutils:
      ignored-interfaces:
        - docker0
        - veth.*
        - lo
        - VM.*
      preferred-networks:
        - ^192\.168 
        - 172.17
        - 192.168.0.5
      use-only-site-local-interfaces: true

nacos

若 IP 是固定的可以使用 spring.cloud.nacos.discovery.ip 直接指定 IP 地址:

yaml 复制代码
# bootstrap.yaml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        enabled: true
        register-enabled: true
        # ip
        ip: 192.168.0.5
        port: 8080

若服务由固定的域名,也可使用 spring.cloud.nacos.discovery.ip 直接指定域名:

yaml 复制代码
# bootstrap.yaml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        enabled: true
        register-enabled: true
        # 域名
        ip: a.service
        port: 80

若网卡名称是固定的,可使用 spring.cloud.nacos.discovery.network-interface 指定网卡名称:

yaml 复制代码
# bootstrap.yaml
spring:
  application:
    name: nacos-test
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        enabled: true
        register-enabled: true
		# 网卡
        network-interface: "eth0"

consul

spring.cloud.consul.discovery.prefer-ip-addresstrue 时使用 spring.cloud.consul.discovery.ip-address 注册,否则使用 spring.cloud.consul.discovery.hostname 注册:

yaml 复制代码
# bootstrap.yaml
spring:
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        prefer-ip-address: true
        ip-address: 192.168.0.5
        hostname: a.service

eureka

与 consul 类似,eureka.instance.prefer-ip-addresstrue 时使用 eureka.instance.ip-address 注册,否则使用 eureka.instance.hostname 注册:

yaml 复制代码
spring:
eureka:
  client:
    enabled: true
    register-with-eureka: true
    fetch-registry: true
  instance:
    prefer-ip-address: true
    hostname: a.service
    ip-address: 192.168.0.5

查看实际注册的是 ip 还是 hostname 需要将鼠标放在 Status 链接上,然后看左下角:

相关推荐
青春不流名6 小时前
Portainer CE(社区版)部署 & 运行
云原生·eureka
.生产的驴10 小时前
1Panel实战|SpringColud微服务部署生产环境一键部署Docker+Nacos+MySQL 数据定时备份 控制台 安全高效易维护
服务器·后端·mysql·spring cloud·docker·微服务·信息可视化
掘根11 小时前
【微服务即时通讯】好友管理子服务2
微服务·云原生·架构
Exquisite.11 小时前
Docker容器技术
docker·容器·eureka
another heaven15 小时前
【软考 单体式系统与微服务系统】
微服务·云原生·架构
信也科技布道师1 天前
打破“知识孤岛”:微服务架构下的自动化业务图谱构建
微服务·架构·自动化
国医中兴1 天前
数据稠密计算的内存优化:从理论到实践
微服务·云原生·容器·kubernetes·k8s
精神小伙就是猛1 天前
使用go-zero快速搭建一个微服务(一)
开发语言·后端·微服务·golang
国医中兴2 天前
数据稠密计算的并行处理:从理论到实践
微服务·云原生·容器·kubernetes·k8s