- A+
所属分类:容器
使用swarm模式路由网格
- swarm模式可以很容易的将服务端口发布到外部。
- 所有节点都参入到ingress路由网格。
- 路由网格使得集群中每个节点都能够接收集群中已发布的服务端口的连接,即使节点上没有运行该任务。
- 路由网格将所有传入请求路由到发布端口的可用节点的可用容器上。
为了在集群中使用ingress网络,在启用swarm模式之前,集群节点之间需要开放下面端口:
- 7946 TCP/UDP 用于容器网络发现
- 4789 UDP 用于容器ingress网络
使用下面的命令来发布已有的服务端口
1 2 3 |
$ docker service update \ --publish-add <PUBLISHED-PORT>:<TARGET-PORT> \ <SERVICE> |
- <TARGET-PORT> 是容器监听的端口。
- <PUBLISHED-PORT> 是集群使服务可用的端口。
1 2 3 4 5 6 7 8 |
# docker service create --name web --publish 8080:80 --replicas 2 nginx ofxkeuiriuv6za7fj8gxqxih4 # docker service ps web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 5ddy9gpri1ua web.1 nginx:latest worker2 Running Running about a minute ago 211s8s0r7fyg web.2 nginx:latest manager1 Running Running about a minute ago |
当访问任何节点上的8080端口时,集群负载均衡将请求转发到活动的容器。
路由网格将发布的端口监听在节点的任何IP地址上。对于外部可路由IP地址,端口可用从主机外部使用。对于所有其他IP地址,仅可在主机内部访问。
1 2 |
# docker service inspect --format="{{json .Endpoint.Spec.Ports}}" web [{"Protocol":"tcp","TargetPort":80,"PublishedPort":8080,"PublishMode":"ingress"}] |
- <TARGET-PORT> 来自容器。
- <PUBLISHED-PORT> 节点监听服务请求。
配置外部负载均衡
可用配置外部负载均衡将请求路由到集群服务。例如,配置haproxy将请求到发布8080端口的nginx服务。
可用配置负载均衡来平衡集群中的每个节点的请求,即使节点上没有该任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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端口时,会将请求转发到集群中的节点。集群路由网络将请求路由到活动的任务。由于任何原因需要将任务分配到不同的节点,无需更改负载均衡的配置。

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~