我正在与Consul,Rancher和Docker进行实验。
所以我有这个在4个不同主机上运行的REST服务。 此服务的每个实例都使用容器链接在单个Consul容器中注册。也就是说,所有实例都知道Consul容器。
这很好用。
当Consul尝试对我的服务进行健康检查时,什么行不通。 如果服务的实例与consul容器在同一主机上运行,则可行。 但是在不同主机上运行的任何实例都将失败。 地址无法解决。
我试图以几种不同的方式提取服务实例容器IP。 1)列出容器内所有可用的notwork接口和ip。 2)"主机名-i"在容器内。
他们都是知识产权。例如172.16.0.06
虽然Rancher为同一个容器列出了10.43.100.24
等IP。
我的猜测是,Consul应该对Rancher显示的IP执行运行状况检查,而不是我在容器内提取的IP。
我在这里有点不知所措,我的服务应该如何找到它应该用来在Consul中注册的IP?
(我知道这不是真的应该如何使用Consul,但问题是一个主机上的容器无法到达另一个主机上的容器..因此,Consul部分只是将上下文放在什么上面我试过了)
答案 0 :(得分:3)
docker发布的IP地址在群集中不是唯一的。因此,Rancher使用10.42.0.0/16子网来提供唯一的IP地址。
您可以使用此命令找到Rancher IP地址
ip addr
如果您可以将应用程序配置为使用Rancher IP地址,则可以在主机之间进行通信。
有关Rancher内部网络的详细信息,请查看此页面:http://rancher.com/day-life-packet-inside-rancher/
疑难解答指南: http://docs.rancher.com/rancher/v1.2/en/faqs/troubleshooting/#cross-host-communication
答案 1 :(得分:1)
我已经将@ leodotcloud的答案标记为正确,因为它提供了正确的IP,如果你在其上抛出一些解析魔法。
但是我从Rancher Froums得到了一个更直接的答案。 https://forums.rancher.com/t/how-to-get-rancher-virtual-ip-from-within-a-container/3668
您可以调用此URI来获取地址:
http://rancher-metadata/2015-12-19/self/container/primary_ip