gpt4 book ai didi

networking - 为什么 Docker 覆盖网络需要共识?

转载 作者:行者123 更新时间:2023-12-04 01:25:22 24 4
gpt4 key购买 nike

刚刚阅读了 Docker 覆盖网络,非常酷的东西。我似乎无法找到一件事的答案。

根据文档:

  • 如果您安装并使用 Docker Swarm,您会自动在您的管理器/工作主机上获得覆盖网络,并且不需要再配置任何东西; 但是...
  • 如果您只是想要一个跨多个主机的(非 Swarm)覆盖网络,您需要使用外部“KV 存储”(共识服务器)配置该网络,例如 Consul 或 ZooKeeper

我想知道这是为什么。显然,覆盖网络需要同行之间达成共识,但我不确定为什么或那些“同行”是谁。

我只是猜测,对于 Swarm,有一些开箱即用的内部/底层共识服务器。

最佳答案

Swarm 模式使用 Raft 作为管理器与内置 KV 存储的共识。在 swarm 模式之前,覆盖网络可以与第三方 KV 存储一起使用。覆盖网络本身不需要共识,它只依赖于 KV 存储所说的任何内容,而不管其他节点甚至是它自己的本地状态(我很难找到这一点)。那里的 KV 存储通常设置为 HA 共识。

KV 存储跟踪每个主机上运行的容器的 IP 分配 (IPAM)。这允许 docker 只分配一次给定的地址,并且当您连接到运行在另一台主机上的容器时,它知道它需要与哪个 docker 主机通信。这需要在任何一个 docker 主机的外部,并且最好是在 HA 配置中(如 swarm 模式的共识),这样即使某些 docker 节点关闭时它也可以继续工作。

docker 节点之间的覆盖网络仅涉及在该覆盖网络上具有容器的节点。因此,一旦 IP 被分配和发现,所有通信仅发生在具有相关容器的节点之间。如果您创建一个网络然后在工作人员上列出网络,这在 swarm 模式下很容易看到,它不会在那里。一旦该网络上的容器被调度,该网络就会出现。在 docker 中,这减少了多主机网络的开销,同时也增加了架构的安全性。结果如下图所示:

Docker multi-host networking

raft 共识本身只需要领导选举。一旦一个节点被选为领导者并且有足够的节点保持共识,只有一个节点正在写入 KV 存储并维护当前状态。其他人都是追随者。 This animation describes it better than I ever could .

最后,您无需设置外部 KV 存储即可在群模式服务之外使用覆盖网络。您可以实现 swarm 模式,使用 --attachable 选项配置覆盖网络,并在该网络上以 swarm 模式之外的方式运行容器,就像使用外部 KV 存储一样。我过去曾将其用作过渡状态,让容器进入 swarm 模式,其中一些使用 docker-compose 运行,而另一些则部署为 swarm 堆栈。

关于networking - 为什么 Docker 覆盖网络需要共识?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com