Docker Swarm模式下,网络和负载均衡器如何工作?

25

我对 Docker 和容器还不熟悉。我正在学习 Docker 的教程,并发现了这些信息。 https://docs.docker.com/get-started/part3/#docker-composeyml

   networks:
     - webnet
networks:
  webnet:

什么是webnet?该文档说明:

通过名为webnet的负载均衡网络,指示Web容器共享端口80。(在内部,容器本身将发布到Web的端口80上的短暂端口。)

因此,默认情况下,Docker集群中的覆盖网络是负载均衡的吗?使用哪种负载均衡算法?

实际上,我不清楚为什么我们在覆盖网络上进行负载平衡。

1个回答

43

我不确定我是否能比文档更清晰,但重新表述可能会有所帮助。

首先,你在这里遵循的文档使用了 Docker 的 swarm mode

什么是 swarm mode

Swarm 是一组 Docker 引擎或节点,您可以在其中部署服务。Docker 引擎 CLI 和 API 包括管理 Swarm 节点(例如添加或删除节点)以及在整个 Swarm 中部署和协调服务的命令。

来自 SO 文档:

Swarm 是一些 Docker 引擎(或节点),它们共同部署服务。Swarm 用于在许多物理、虚拟或云机器之间分配处理。

因此,使用 swarm mode,您拥有一个多主机(虚拟机和/或物理机)集群,这些机器通过它们的 Docker 引擎 相互通信。

Q1. 什么是 webnet?

webnet 是在启动堆栈时创建的一个 覆盖网络 的名称。

覆盖网络管理在参与 Swarm 的 Docker 守护程序之间的通信

在您的机器群集中,将创建一个虚拟网络,其中每个服务都有一个 IP - 映射到内部 DNS 条目(即服务名称),并允许 Docker 在整个 Swarm(集群)中将传入的数据包路由到正确的容器。

Q2. 因此,默认情况下,Docker 群集中的覆盖网络是负载均衡的吗?

如果您使用覆盖网络,则可以实现负载平衡,但您也可以删除服务的networks配置,以绕过它。然后,您需要发布要公开的服务端口。

Q3. 使用了什么负载均衡算法?

来自swarm主节点bmitch回答的这个Stack Overflow问题:

目前使用的算法是轮询,我没有看到任何迹象表明它是可插拔的。更高级别的负载均衡器将允许对维护进行swarm节点关闭,但任何粘性会话或其他路由功能都将被swarm模式下的轮询算法取消。

Q4. 实际上,我不清楚为什么我们在覆盖网络上有负载均衡

Docker Swarm模式/服务的目的是允许编排复制的服务,这意味着我们可以扩展在Swarm中部署的容器。

再次引用文档:

Swarm模式具有一个内部DNS组件,它会自动为swarm中的每个服务分配DNS条目。Swarm管理器使用内部负载平衡来基于服务的DNS名称在群集内分配请求。

因此,您可以部署10个完全相同的容器(例如nginx和应用程序html/js),而无需处理私有网络DNS条目、端口配置等...任何传入的请求都会自动负载平衡到参与Swarm的主机。

希望这能帮助到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接