与 Rancher 交叉 container/host 通信

Cross container/host communication with Rancher

我正在试验 Consul、Rancher 和 Docker。

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

这很好用。

当 Consul 尝试对我的服务进行健康检查时,无法正常工作。 如果该服务的一个实例与 consul 容器在同一台主机上运行,​​那就行得通了。 但是不同主机上的任何实例 运行 都会失败。 地址无法访问。

我已经尝试通过几种不同的方式提取服务实例容器 IP。 1) 列出容器内所有可用的网络接口和 ip。 2) "hostname -i" 容器内。

他们都获得了IP。例如172.16.0.06 虽然 Rancher 列出了同一容器的 IP,例如 10.43.100.24

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

我有点不知所措,我的服务应该如何找到它应该用来在 Consul 中注册自己的 IP?

(我知道这不是真正应该使用 Consul 的方式,但问题是一台主机上的容器无法访问另一台主机上的容器。所以 Consul 部分只是将上下文放在什么地方我正在尝试)

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

我已将@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