【问题标题】:How do networking and load balancer work in docker swarm mode?网络和负载均衡器如何在 docker swarm 模式下工作?
【发布时间】: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 集群中是负载均衡的?使用什么负载平衡算法?

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

【问题讨论】:

    标签: networking docker load-balancing docker-swarm-mode


    【解决方案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 条目、端口配置等...任何传入请求都将自动负载平衡到主机参与群。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2017-07-27
      相关资源
      最近更新 更多