docker - Docker Swarm 中的容器和节点 IP 地址
问题描述
我正在阅读 Docker 教程,我有点困惑为什么容器的 IP 地址可能与集群中包含它们的节点不同。我的困惑是基于下图,来自本教程的这个页面。
较大的绿色框是 swarm 中的节点;他们每个人都有自己的 IP 和负载均衡器,并且在外部他们正在侦听端口 8080。我相信黄色框是my-web
服务中的容器/任务。他们正在侦听端口 80,我猜该服务已设置为将每个容器的端口 80 映射到外部端口 8080。
我或多或少地理解了这一点,但我不明白为什么容器/任务将具有/需要与其运行的节点不同的 IP 地址。有人可以解释一下吗?
如果我不得不猜测,那将是因为每个容器基本上都是一个 VM,并且 VM 需要自己的 IP 地址,并且没有两个 VM 可以具有相同的 IP 地址,因此容器不能具有与节点相同的 IP。但我不确定这种解释是否正确。
解决方案
我自己对 docker/containers 还是很陌生,但据我了解,您指的是内部 IP 和外部 IP。也就是说,这192.168.99.100-102
将是外部可寻址的(又名公开可用的),而该10.0.0.1-2
地址仅用于内部寻址。
内部寻址的原因是您可以为容器使用更大的 IP 地址池,这就是使用10.0.0.0/8
地址空间的原因。这些节点仍然需要可寻址,以便您的负载均衡器可以正确分配负载。根据维基百科的条目,你有16,777,216
可用的 IP,如果你需要,你的 swarm 可以扩展到许多容器。而您只有有限数量的外部 IP 地址可供您的服务使用。
推荐阅读
- node.js - Sequelize ORM 无法正确读取数值 9xxxxxxx9.0000000000
- xamarin - 在 Xamarin.Forms 中使用 SkiaSharp 将点击事件添加到 SVG 内的元素
- scala - 强制隐式调用的依赖类型解析
- scikit-learn - 股票数据的缩放
- javascript - 从 PUT 请求中排除实体变量
- email - 尝试创建域时来自 Mailgun API 的错误
- java - 如何比较两个映射并检索两个映射中出现的值的键?
- rapidminer - 在 Rapid Miner 中使用用户 K-NN 时出现问题
- c# - 运行此代码时出错 - 通过 C# 中的 Azure 函数将列表项添加到 Sharepoint 在线列表
- facebook - 我可以在 Facebook 登录网址中指定不同的 Graph Api 版本吗?