SpringCloud Eureka client 在多网卡环境下的instanceId问题
问题描述
:
SpringCloud 服务的eureka客户端配置的instance-id如下:
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
在开发环境中,主机可能安装有vmware造成多网卡环境,为了避免使用vmware的网卡,在开发环境的application.yml 中增加如下配置:
spring:
cloud:
inetutils:
ignored-interfaces: ['VMware.*']
但这种情况下,SpringCloud 服务的eureka客户端注册到eureka server的instance-id仍旧取了vmware的网卡地址,也就是说上面的inetutils.ignored-interfaces并没有生效。
原因分析
:
其原因是在HostInfoEnvironmentPostProcessor的执行时间点可以参看
Spring Boot # EnvironmentPostProcessor
,虽然我们配置了spring.cloud.inetutils.ignored-interfaces: ['VMware.*'],但是此时这个application.yml文件的内容还没被加载,HostInfoEnvironmentPostProcessor在执行的时候,上下文里就没有这个配置,所以在执行
InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment);
时候,environment中没有spring.cloud.inetutils.ignored-interfaces: ['VMware.*']这个配置。
将spring.cloud.inetutils.ignored-interfaces: ['VMware.*']的配置从application.yml文件移到外部,jar命令
-Dspring.cloud.inetutils.ignored-interfaces= VMware.*
或者设置在系统的环境变量里。用dockerfile或者docker compose就更方便了。
Spring Cloud Eureka 多网卡配置最终版
Spring Boot # EnvironmentPostProcessor
感谢以上两篇参考博文作者提供的参考。
这几天遇到一个bug,我们微服务组90%都是部署在linux
环境
中,只有一个XX微服务是部署在Windows
环境
中,并且服务都是分布式部署,并没有全部部署在同一台服务器上。这时,
问题
就出现了~微服务向
eureka
注册中心注册时,显示的IP地址不正常全部是localhost或者主机名称。(正常情况下,应该显示的为微服务所在服务器的IP地址)
然后我们查了一下
问题
原因,由于服务器配备了多
网卡
的原因,...
SpringCloud
体系里的,服务实体向
eureka
注册时,注册名默认是“IP名:应用名:应用端口名”,即${spring.cloud.
client
.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}。在
eureka
界面下显示如图:
有些文章说默认的in
[外链图片转存中…(img-AGGn5wyV-1655281702211)]图中圈起来的部分就是instance-id。这部分的默认格式为:
2.自定义instance-id
可以在配置文件中自定义instance-id。在配置文件中添加参数,作为演示我们将值设置为 abc。重启启动实例。打开浏览器,进入
Eureka
Server 查看实例注册信息:[外链图片转存中…(img-xwtHVyGa-1655281702212)]以 内网ip地址:端口号 的形式定义instance-id。用 获取内网ip地址
# 是否允许开启自我保护模式,缺省:true
# 当
Eureka
服务器在短时间内丢失过多客户端时,自我保护模式可使服务端不再删除失去连接的客户端
eureka
.server.enable-self
1.在
springcloud
中服务的Instance ID 默认值是:
${spring.cloud.
client
.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}},
也就是:主机名:应用名:应用端口。如图1
本节我们主要介绍
Eureka
自我保护模式的开启和关闭和自定义
Eureka
的
InstanceID
的配置。关闭自我保护保护模式主要在一组客户端和
Eureka
Server 之间存在网络分区场景时使用。一旦进入保护模式,
Eureka
Server 将会尝试保护其服务的注册表中的信息,不再删除服务注册表中的数据。当网络故障恢复后,该
Eureka
Server 节点会自动退出保护模式。如果在...
eureka
.instance.prefer-ip-address=true //点击服务列表时用ip跳转
eureka
.instance.instance-id=${spring.cloud.
client
.ipAddress}:${server.port}:${spring.application.instance_id:${server.port}}
显示的服务名为:服务名:po...
在研究Spring Cloud的过程中,本地搭建好
Eureka
注册中心之后,发现
Eureka
服务页面显示的服务是机器名:端口的格式,并不是IP+端口的形式。如下图:具体搭建过程我就不再贴代码了,参考我关于spring cloud其他文章即可。我的配置如下:
spring.application.name=compute-service
server.port=2223
eur...
解决
Eureka
在K8S容器
环境
搭建instance-id
问题
问题
:将使用
eureka
的服务部署在k8s容器
环境
中,
eureka
的instance-id默认是使用下面的规则生成instance-id,然后服务与服务之间的调用地址就是使用instance-id,错误的instance-id导致注册到
eureka
中的服务不能正常相互调用。
${spring.cloud.
client
.hostna...