多网卡微服务注册 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 链接上,然后看左下角:

相关推荐
行者-全栈开发4 小时前
拆解高可用CRM网站的容灾设计与云原生实践
微服务·云原生·异地多活·监控告警·高可用设计·crm架构·容灾演练
0xDevNull4 小时前
Spring Boot 3.x 整合 Nacos 全栈实战教程
java·spring boot·nacos
java干货5 小时前
在微服务里造一个微缩版 Kafka:Spring Boot 整合 Redis Stream 全指南
spring boot·微服务·kafka
一个有温度的技术博主5 小时前
微服务技术选型:Dubbo、Spring Cloud与Spring Cloud Alibaba深度对比
spring cloud·微服务·dubbo
Crazy________6 小时前
4.13docker仓库registry
mysql·算法·云原生·eureka
一个有温度的技术博主19 小时前
微服务4:Spring Cloud 微服务实战:如何实现跨服务数据组装?
spring cloud·微服务·架构
亚历克斯神19 小时前
Java 云原生开发最佳实践:构建现代化应用
java·spring·微服务
codeejun1 天前
每日一Go-52、Go微服务--请求超时与熔断策略实战
微服务·golang·iphone
亚历克斯神1 天前
Java 23 虚拟线程进阶:深度探索与实战
java·spring·微服务
说实话起个名字真难啊1 天前
Docker 入门之单机常用命令总结
docker·容器·eureka