2016-08-10 42 views
2

我正在与Consul,Rancher和Docker进行实验。与牧场主交叉容器/主机通信

所以我有这个REST服务在4个不同的主机上运行。 此服务的每个实例使用容器链接将其本身注册到单个Consul容器中。也就是说,所有实例都知道Consul容器。

这工作正常。

什么不工作正常时领事试图对我的服务进行健康检查。 如果该服务的一个实例与consul容器在同一主机上运行,​​则该工作正常。 但是,在不同主机上运行的任何实例都将失败。 地址unrachable。

我试图用几种不同的方式提取服务实例容器IP。 1)列出容器内所有可用的notwork接口和ip。 2)容器内的“hostname -i”。

他们都是知识产权。例如172.16.0.06 虽然牧场主列表IP如10.43.100.24为同一个容器。

我的猜测是Consul应该对Rancher显示的IP执行健康检查,而不是在容器内提取的IP。

我在这里有点失落,我的服务应该如何找到它应该用于在Consul注册自己的IP?我知道这不是真的如何使用Consul,但问题是一个主机上的容器无法到达另一个主机上的容器..所以Consul部分只是把上下文放在我的上面正在尝试)

回答

3

由docker发布的IP地址在整个群集中并不唯一。因此Rancher使用10.42.0.0/16子网给出唯一的IP地址。

您可以使用此命令

ip addr 

如果你可以配置你的应用程序使用的牧场主IP地址养牛的IP地址,您将能够跨主机进行通信。

有关内部牧场主网络的详细信息,请查看此页:http://rancher.com/day-life-packet-inside-rancher/

故障排除指南:http://docs.rancher.com/rancher/v1.2/en/faqs/troubleshooting/#cross-host-communication