springboot项目部署到k8s中,发现eruaka注册是容器id,这个其他应用是无法访问的
参考Spring Cloud配置ip注册找不到${spring.cloud.client.ipAddress},现在pom.xml
中添加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</dependency>
接着使用${spring.cloud.client.ip-address}
eureka:
instance:
instance-id: ${spring.cloud.client.ip-address}:
preferIpAddress: true
statusPageUrlPath: /actuator/info
healthCheckUrlPath: /actuator/health
client:
service-url:
defaultZone: http://192.168.5.207:8761/eureka/,http://192.168.5.180:8761/eureka/,http://192.168.5.154:8761/eureka/
确实替换为id了,但是确实容器IP,并不是主机IP,外部还是无法访问.
在k8s中设置spring.cloud.client.ip-address
和k8s.port
的环境变量,
在eruaka中看似是对的,点击链接打开的还是http://179.20.3.178:9010/actuator/info
,依旧是容器ip和端口,
然而使用使用主机的IP和端口却可以访问.
这两者之前的不一致问题,怎么解决呢?如果了解k8s的网络模式,[k8s]k8s pod的4种网络模式最佳实战(externalIPs ),解决办法就知道了。设置hostNetwork: true
问题就解决了。就不用什么instance-id
再看eruaka,就可以正常访问了
使用hostNetwork
有弊端,会出现端口占用,故这里推荐使用下图的方式,使用EUREKA_INSTANCE_IP-ADDRESS
环境变量即可,处理方式跟k8s中dubbo注册IP问题一致
当系统部署到生产环境,这里还有个dns的问题,你会发现docker内部无法访问域名
dnsConfig:
nameservers:
- 223.5.5.5
`![1](https://img-blog.csdnimg.cn/20200724171135366.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhcnJhaA==,size_16,color_FFFFFF,t_70)
``