3

我正在尝试使用 Consul、Rancher 和 Docker。

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

这工作正常。

当 Consul 尝试对我的服务进行健康检查时,不能正常工作。如果服务实例与 consul 容器在同一主机上运行,​​则可以。但是在不同主机上运行的任何实例都会失败。地址不可达。

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

他们都产生IP。例如172.16.0.06 ,当 Rancher 列出 IP 时,例如10.43.100.24同一容器的 IP。

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

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

(我知道这不是真正应该如何使用 Consul,但问题是一个主机上的容器无法访问另一台主机上的容器。所以 Consul 部分只是为了说明我正在尝试的内容)

4

2 回答 2

2

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

于 2016-08-10T22:16:57.913 回答
1

我已将@leodotcloud 的答案标记为正确,因为如果您对其进行一些解析魔法,它会提供正确的 IP。

不过,我从 Rancher Frooms 那里得到了更直接的答案。 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

于 2016-08-11T04:24:43.827 回答