网络和负载均衡器如何在docker swarm模式下工作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络和负载均衡器如何在docker swarm模式下工作?相关的知识,希望对你有一定的参考价值。

我是Dockers和容器的新手。我正在浏览docker的教程,并发现了这些信息。 https://docs.docker.com/get-started/part3/#docker-composeyml

   networks:
     - webnet
networks:
  webnet:

什么是网络?该文件说

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

那么,默认情况下,覆盖网络在docker集群中是负载均衡的?什么是负载平衡算法使用?

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

答案

不确定我是否比文档更清楚,但也许改述会有所帮助。

首先,你在这里关注的文档使用了所谓的docker的swarm mode

什么是swarm mode

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

来自SO文档:

群集是一些共同部署服务的Docker引擎(或节点)。 Swarm用于跨多个物理,虚拟或云计算机分发处理。

因此,使用swarm模式,您可以拥有一个多主机(虚拟机和/或物理)集群,这些集群是通过其docker engine相互通信的机器。

Q1。什么是网络?

webnet是在启动堆栈时创建的overlay network的名称。

覆盖网络管理参与群集的Docker守护进程之间的通信

在您的计算机集群中,创建了一个虚拟网络,其中每个服务都有一个ip映射到内部DNS条目(即服务名称),并允许docker将传入的数据包路由到群集中的任何位置的正确容器(簇)。

Q2。那么,默认情况下,覆盖网络在docker集群中是否负载均衡?

是的,如果您使用覆盖网络,但您也可以删除服务networks配置以绕过它。然后你必须publish你想要公开的服务的端口。

Q3。什么是负载平衡算法使用?

从这个SO question由群大师bmitch回答;):

该算法目前是循环法的,我没有看到它可以插入的迹象。更高级别的负载平衡器将允许移除群集节点以进行维护,但是群集模式中的循环算法将撤消任何粘性会话或其他路由功能。

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

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

再次来自docs

Swarm模式有一个内部DNS组件,可以自动为swarm中的每个服务分配一个DNS条目。群集管理器使用内部负载平衡来根据服务的DNS名称在群集内的服务之间分发请求。

所以你可以像10个完全相同的容器一样进行部署(假设nginx和你的app html / js一起使用),而不需要处理专用网络DNS条目,端口配置等等......任何传入的请求都会自动负载均衡到参与一群。

希望这可以帮助!

以上是关于网络和负载均衡器如何在docker swarm模式下工作?的主要内容,如果未能解决你的问题,请参考以下文章

【swarm】Docker swarm 的负载均衡

Docker 容器技术 — Swarm 集群

Docker 容器技术 — Swarm 集群

Docker Swarm集群中部署Traefik负载均衡器

33. docker swarm 集群服务通信 之 RoutingMesh - Ingress 网络

[docker swarm] 从单容器走向负载均衡部署