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

use*_*610 24 networking load-balancing docker docker-swarm-mode

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

   networks:
     - webnet
networks:
  webnet:
Run Code Online (Sandbox Code Playgroud)

什么是网络?该文件说

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

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

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

Fra*_*rel 38

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

首先,您在此处关注的文档使用了所谓的swarm modedocker.

什么是swarm mode

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

来自SO文档:

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

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

Q1.什么是网络?

webnet是启动堆栈时创建的覆盖网络的名称.

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

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

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

是的,如果您使用覆盖网络,但您也可以删除服务networks配置以绕过该网络.然后,您必须发布要公开的服务的端口.

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

从这个SO问题回答swarm master bmitch ;):

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

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

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

再次从文档中:

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

所以你可以像10个完全相同的容器一样进行部署(假设nginx与你的应用程序html/js),而不处理私有网络DNS条目,端口配置等...任何传入的请求将自动负载平衡到参与的主机一群.

希望这可以帮助!