与Rancher交叉集装箱/主机通信

时间:2016-08-10 15:13:59

标签: docker consul rancher

我正在与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部分只是将上下文放在什么上面我试过了)

2 个答案:

答案 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