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

Ste*_*hen 5 docker docker-swarm

我正在阅读 Docker 教程,但我有点困惑为什么容器可能具有与群中包含容器的节点不同的 IP 地址。我的困惑基于教程中此页面的下图。

在此输入图像描述

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

我或多或少了解了这么多,但我不明白为什么容器/任务会/需要与其运行的节点不同的 IP 地址。有人能解释一下吗?

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

Gav*_*ler 3

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

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