网络和负载均衡器如何在 docker swarm 模式下工作?
Posted
技术标签:
【中文标题】网络和负载均衡器如何在 docker swarm 模式下工作?【英文标题】:How do networking and load balancer work in docker swarm mode? 【发布时间】:2017-11-22 16:40:20 【问题描述】:我是 Docker 和容器的新手。我正在阅读 docker 的教程并遇到了这些信息。 https://docs.docker.com/get-started/part3/#docker-composeyml
networks:
- webnet
networks:
webnet:
什么是网络?文件说
指示 web 的容器通过称为 webnet 的负载平衡网络共享端口 80。 (在内部,容器本身会在一个临时端口上发布到 web 的 80 端口。)
那么,默认情况下,覆盖网络在 docker 集群中是负载均衡的?使用什么负载平衡算法?
实际上,我不清楚为什么我们要在覆盖网络上进行负载平衡。
【问题讨论】:
【参考方案1】:不确定我是否比文档更清楚,但也许改写会有所帮助。
首先,您在此处关注的文档使用所谓的 docker 的 swarm mode
。
swarm mode
是什么?
swarm 是 Docker 引擎或节点的集群,您可以在其中部署服务。 Docker Engine CLI 和 API 包括用于管理 swarm 节点(例如,添加或删除节点)以及跨 swarm 部署和编排服务的命令。
来自 SO 文档:
swarm 是一组共同部署服务的 Docker 引擎(或节点)。 Swarm 用于在许多物理、虚拟或云机器上分配处理。
因此,在 swarm 模式下,您有一个多主机(虚拟机和/或物理)集群一台机器,这些机器通过它们的 docker engine
相互通信。
第一季度。什么是网络?
webnet
是您的堆栈启动时创建的overlay network 的名称。
覆盖网络管理参与 swarm 的 Docker 守护进程之间的通信
在您的机器集群中,创建了一个虚拟网络,其中每个服务都有一个 ip - 映射到一个内部 DNS 条目(即服务名称),并允许 docker 将传入的数据包路由到正确的容器,无处不在群(集群)。
第二季度。那么,默认情况下,覆盖网络在 docker 集群中是负载均衡的?
是的,如果您使用覆盖网络,但您也可以删除服务networks
配置以绕过它。然后你必须publish你想公开的服务的端口。
第三季度。使用了什么负载均衡算法?
来自这个SO question由群主bmitch回答;):
该算法目前是循环的,我还没有看到任何迹象表明它是可插入的。更高级别的负载均衡器将允许关闭 swarm 节点进行维护,但任何粘性会话或其他路由功能都将通过 swarm 模式下的循环算法撤消。
第四季度。实际上我不清楚为什么我们要在覆盖网络上进行负载平衡
docker swarm 模式/服务的目的是允许编排复制的服务,这意味着我们可以扩大/缩小部署在 swarm 中的容器。
再次来自docs:
Swarm 模式有一个内部 DNS 组件,它会自动为 swarm 中的每个服务分配一个 DNS 条目。 swarm manager 使用内部负载平衡根据服务的 DNS 名称在集群内的服务之间分配请求。
因此,您可以部署 10 个完全相同的容器(假设 nginx 与您的应用程序 html/js),而无需处理私有网络 DNS 条目、端口配置等...任何传入请求都将自动负载平衡到主机参与群。
希望这会有所帮助!
【讨论】:
以上是关于网络和负载均衡器如何在 docker swarm 模式下工作?的主要内容,如果未能解决你的问题,请参考以下文章