多网卡环境下Eureka服务注册IP选择。
1 解决多网卡问题
1.1 配置eureka.instance.ip-address
eureka.instance.ip-address=192.168.1.7
[1] 此方法适用于环境单一场景,对于复杂场景缺少有利支持。
1.2 增加inetutils相关配置
配置对应org.springframework.cloud.commons.util.InetUtilsProperties,其中包含:
配置 | 说明 |
---|---|
spring.cloud.inetutils.default-hostname | 默认主机名,只有解析出错才会用到 |
spring.cloud.inetutils.default-ip-address | 默认ip地址,只有解析出错才会用到 |
spring.cloud.inetutils.ignored-interfaces | 配置忽略的网卡地址,多个用,分割 |
spring.cloud.inetutils.preferred-networks | 正则匹配的ip地址或者ip前缀,多个用,分割,是交集的关系 |
spring.cloud.inetutils.timeout-seconds | 计算主机ip信息的超时时间,默认1秒钟 |
spring.cloud.inetutils.use-only-site-local-interfaces | 只使用内网ip |
举例说明:
- 只使用以192.168.开头的ip,注意多个项是交集的关系,需要都满足。
spring.cloud.inetutils.preferred-networks=^192\.168\.[\d]+\.[\d]+$
- 使用/etc/hosts中主机名称映射的ip,这一种在docker swarm环境中比较好用。
随便配置一个不可能存在的ip,会走到InetAddress.getLocalHost()逻辑。
spring.cloud.inetutils.preferred-networks=none
- 排除网卡en0和en1
ignored-interfaces配置的是正则表达式
spring.cloud.inetutils.ignored-interfaces=en0,en1
- 只使用内网地址
- 遵循 RFC 1918
- 10/8 前缀
- 172.16/12 前缀
- 192.168/16 前缀
spring.cloud.inetutils.use-only-site-local-interfaces=true
一般来说这几种就够用了。