接上一節案例,當咱們訪問任何節點的 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