09_use swarm mode routing mesh

docker engine swarm mode 可以簡單的發佈服務的端口,讓集羣外部可以訪問到。所有的節點都在同一個路由網格中。路由網格使每個節點都能夠接收到集羣上面的任意服務的端口。即使該節點沒有任務在跑。路由網格在所有可用的節點上面 路由所有的進入的請求到發佈的端口的可用容器上面。


爲了能夠使用路由網格的功能,你需要在節點間開放以下的協議和端口:


端口 7946   TCP/UDP     容器網絡發現

端口 4789   UDP              容器內部網絡



在一個服務中發佈一個端口


--publish

$ docker service create \
  --name <SERVICE-NAME> \
  --publish <PUBLISHED-PORT>:<TARGET-PORT> \
  <IMAGE>


示例:
把內部容器nginx 的80端口發佈到外部的8080端口


$ docker service create \
  --name my-web \
  --publish 8080:80 \
  --replicas 2 \
  nginx


當你訪問swarm 集羣的8080端口,swarm會把你的請求負載均衡到所有可用的容器上面。


路由網格監聽分配給節點的任意IP的發佈端口。如果是外部的路由IP地址,端口即對外也可以訪問。其他的IP地址的訪問只對該主機可用。

service ingress image

你可以在一個存在的服務中發佈一個端口

$ docker service update \
  --publish-add <PUBLISHED-PORT>:<TARGET-PORT> \
  <SERVICE>
通過以下命令查看發佈的端口

$ docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web
[{"Protocol":"tcp","TargetPort":80,"PublishedPort":8080}]



發佈一個單獨的TCP端口或者是UDP端口


默認發佈的端口是TCP端口,如果你要定義一個UDP端口,可以通過以下配置


只定義TCP端口

$ docker service create --name dns-cache -p 53:53 dns-cache
$ docker service create --name dns-cache -p 53:53/tcp dns-cache


同時定義TCP和UDP端口

$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache


只定義UDP端口

$ docker service create --name dns-cache -p 53:53/udp dns-cache


配置一個外部的負載均衡器


你可以配置一個外部的負載均衡器,來路由所有的請求到swarm服務中。

例如:你可以配置HAproxy來均衡所有的請求到nginx的外部端口8080


ingress with external load balancer image



在這種情況下,8080端口必須在負載均衡器和swarm集羣之間是開放的。

swarm節點能夠存在與一個私有的網絡,只能通過代理服務器訪問,無法直接對外提供訪問。

即使在該節點上面沒有任務,你也可以配置負載均衡器均衡所有的請求到每個節點。


例如:如下配置的HAproxy的配置

/etc/haproxy/haproxy.cfg:
global
        log /dev/log    local0
        log /dev/log    local1 notice
...snip...
# Configure HAProxy to listen on port 80
frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back
# Configure HAProxy to route requests to swarm nodes on port 8080
backend http_back
   balance roundrobin
   server node1 192.168.99.100:8080 check
   server node2 192.168.99.101:8080 check
   server node3 192.168.99.102:8080 check


當你訪問HAproxy 負載均衡器的80端口,它會轉發請求到swarm集羣的節點。swarm路由網格會路由請求到可用的節點上面。如果swarm scheduler 調度任務請求到不同的節點上面,你不需要重新配置負載均衡器。


你可以配置任何一種類型的負載均衡器來路由swarm節點的請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章