接上一节案例,当我们访问任何节点的 8080 端口时,swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本。
这就是 routing mesh 的作用。
所以,无论访问哪个节点,即使该节点上没有运行 service 的副本,最终都能访问到 service。
另外,我们还可以配置一个外部 load balancer,将请求路由到 swarm service。比如配置 HAProxy,将请求分发到各个节点的 8080 端口。
当我们应用
时,swarm 会重新配置 service,我们看看容器都发生了哪些重要变化。
- --publish-add 8080:80
是不是觉得很诧异?之前的所有副本都被 Shutdown,然后启动了新的副本。我们查看一下新副本的容器网络配置。
容器的网络与
之前已经大不一样了,现在有两块网卡,每块网卡连接不同的 Docker 网络。
- --publish-add
实际上:
,其作用是让运行在不同主机上的容器可以相互通信。
- ingress
,其作用是让容器能够访问到外网。
- docker_gwbridge
网络是 swarm 创建时 Docker 为自动我们创建的,swarm 中的每个 node 都能使用
- ingress
。
- 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
来源: http://www.cnblogs.com/CloudMan6/p/7930321.html