我尝试在多个Amazon实例上使用Rancher
部署微服务集群。
我遇到的一个问题是每个docker容器现在有2个IP地址; 1个本地IP地址,由docker本身定义,以及另一个路由到Rancher网桥的IP地址。
45: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:b4:d3:52:be:25 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.4/16 scope global eth0
valid_lft forever preferred_lft forever
inet 10.42.232.123/16 scope global eth0
valid_lft forever preferred_lft forever
Rancher
定义的IP地址是10.42.*.*
范围内的IP地址,对于每个容器都是唯一的,这就是为什么我想让我的Spring云配置使用这个IP地址。
否我发现您可以在配置中指定要使用的接口,但是是否也可以指定子网?因为两个IP都在同一个接口(eth0
)上,但服务应该使用10.42。。(例如,在发现服务处注册自己)。
我希望有人可以帮助我进一步解决这个问题。
我的配置的相关部分:
eureka:
instance:
preferIpAddress: true
(Eureka使用与spring cloud相同的配置)
答案 0 :(得分:0)
您可以像这样使用rancher-metadata api:
http://rancher-metadata/latest/self/container/service_name
您可以获得service_name
,hostname
,primary_ip
和其他人。
所以你可以在Dockerfile中使用:
答案 1 :(得分:0)
我已经实施了一个类似De Zhang的解决方案,该解决方案使用由IPSec管理网络上的牧场主设置的IP地址发布,该迷你脚本作为图像的入口点:
echo "Setting rancher managed ip address on MANAGED_IP environment variable"
export MANAGED_IP=$(curl --retry 5 --connect-timeout 3 -s 169.254.169.250/latest/self/container/primary_ip)
echo "Rancher IP is ${MANAGED_IP}"
java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
在应用程序引导之前,这将设置从元数据服务获取的IP地址并将其存储在环境变量MANAGED_IP中,然后将其打印出来。
我的配置存储库(我正在使用Spring Cloud Config Server)看起来像这样
eureka:
{...}
shouldUseDns: false
instance:
preferIpAddress: true
ip-address: ${MANAGED_IP}