接上一节案例,当咱们访问任何节点的 8080 端口时,swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本。html
这就是 routing mesh 的做用。node
因此,不管访问哪一个节点,即便该节点上没有运行 service 的副本,最终都能访问到 service。web
另外,咱们还能够配置一个外部 load balancer,将请求路由到 swarm service。好比配置 HAProxy,将请求分发到各个节点的 8080 端口。docker
ingress 网络网络
当咱们应用 --publish-add 8080:80
时,swarm 会从新配置 service,咱们看看容器都发生了哪些重要变化。3d
是否是以为很诧异?以前的全部副本都被 Shutdown,而后启动了新的副本。咱们查看一下新副本的容器网络配置。code
容器的网络与 --publish-add
以前已经大不同了,如今有两块网卡,每块网卡链接不一样的 Docker 网络。server
实际上:htm
eth0 链接的是一个 overlay 类型的网络,名字为 ingress
,其做用是让运行在不一样主机上的容器能够相互通讯。blog
eth1 链接的是一个 bridge 类型的网络,名字为 docker_gwbridge
,其做用是让容器可以访问到外网。
ingress
网络是 swarm 建立时 Docker 为自动咱们建立的,swarm 中的每一个 node 都能使用 ingress
。
若是你们对 Docker overlay 网络的原理和实现感兴趣,能够重温前面 Docker 容器网络相关章节。
经过 overlay 网络,主机与容器、容器与容器之间能够相互访问;同时,routing mesh 将外部请求路由到不一样主机的容器,从而实现了外部网络对 service 的访问。
那么接下来,service 跟 service 如何通讯呢?这将是咱们下一节要讨论的内容。
书籍:
1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html