Docker Swarm 中的容器和节点 IP 地址

container and node IP addresses in Docker Swarm

我正在阅读 Docker 教程,但我有点困惑为什么容器的 IP 地址可能与群中包含它们的节点不同。我的困惑是基于下图,来自教程中的 this page

较大的绿色框是集群中的节点;他们每个人都有自己的 IP 和负载平衡器,并且在外部他们在端口 8080 上侦听。我相信黄色框是 my-web 服务中的 containers/tasks。他们正在侦听端口 80,我猜该服务已设置为将端口 80 从每个容器映射到外部端口 8080。

我或多或少了解了这么多,但我不明白为什么 container/task 会 have/need 与它所在的节点 运行 不同的 IP 地址。谁能解释一下?

如果非要我猜的话,那是因为每个容器基本上都是一个虚拟机,虚拟机需要自己的 IP 地址,没有两个虚拟机可以有相同的 IP 地址,因此容器不能和节点有相同的 IP .但我不确定这个解释是否正确。

我自己对 docker/containers 还是很陌生,但据我了解,您指的是内部 IP 和外部 IP。也就是说,192.168.99.100-102 是外部可寻址的(也就是公开可用的),而 10.0.0.1-2 地址仅用于内部寻址。

内部寻址的原因是您可以拥有更大的 IP 地址池来为您的容器工作,这就是使用 10.0.0.0/8 地址 space 的原因。这些节点仍然需要可寻址,以便您的负载均衡器可以正确分配负载。根据维基百科条目,you've got 16,777,216 available IPs 允许您的集群在需要时扩展到许多容器。而您只有有限数量的外部 IP 地址可以访问您的服务。