版本说明信息
- 文档来源:Use swarm mode routing mesh
- 文档由
garyond
翻译和整理
目录
- 概述
- 发布服务端口
- 仅发布TCP端口或仅发布UDP端口
- 配置外部负载均衡
1. 概述
Docker引擎Swarm集群模式使得可以轻松地发布服务端口,使其可用于集群外的资源。所有节点都参与进入路由网。路由网格使得Swam集群中的每个节点能够接受在Swarm集群中运行的任何服务中已发布端口上的连接,即使节点上没有任何任务正在运行。 路由网络将所有接入请求路由到可用节点上的已发布端口到活动容器中。
为了在Swarm集群中使用接入网络,在启用Swarm集群模式之前, 你需要在Swarm集群节点之间打开以下端口:
- 7946端口, 主要用于容器网络发现;
- 4789端口, 主要用于容器接入发布网络。
你还需要在Swarm集群节点和任意外部资源之间打开发布端口,例如外部负载均衡应用,以便于它们能够访问所需要的端口。
2. 发布服务端口
当你创建一个服务时, 你可以使用--publish
参数来发布端口。
# docker service create \
--name <Service-Name> \
--publish <Publish-Port>:<Target-Port> \
<Docker Image>
<目标端口>为Docker容器中所监听的端口,<发布端口>为Swarm集群中使得服务可以访问的端口。
例如, 在Swarm集群中发布Nginx应用服务, 将容器中的80端口映射为Swarm集群的8080端口。
$ docker service create \
--name my-web \
--publish 8080:80 \
--replicas 2 \
nginx
当你在任何节点上访问8080端口时,Swarm集群的负载均衡会将您的请求路由至活动容器中。
Swarm集群的路由网络在发布的端口上监听分配给该节点的任何IP地址。对于外部可路由的IP地址,端口可从主机外部获得。对于其他的IP地址,只能从主机中访问。
使用以下命令可以为已经发布的服务发布端口:
$ docker service update \
--publish-add <PUBLISHED-PORT>:<TARGET-PORT> \
<SERVICE>
使用docker service inspect
查看服务端口。
# docker service inspect --format="" nginx-service
3. 仅发布TCP端口或仅发布UDP端口
默认情况下, 所发布的端口一般为TCP端口。你可以专门指定发布UDP端口,而不是TCP或之外的端口。当发布TCP和UDP端口时,Docker 1.12.2版本和早前版本需要为TCP端口指定后缀/tcp
。后缀为可选的参数。
仅发布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-cahce -p 53:53/udp dns-cache
4. 配置外部负载均衡
可通过配置外部负载均衡实现Swarm集群的服务路由。例如, 使用HAProxy实现已发布端口8080的Nginx服务的负载均衡。
在这种情况下, 必须在Swarm集群节点和HAProxy之间打开8080端口,Swarm集群节点可以驻留在代理服务器可以访问的专用网络上,但不能公开访问。
我们可以将负载均衡配置为Swarm集群中的每个节点之间的请求平衡,即使该 节点上没有计划任务。例如, 我们可以在/etc/haproxy/haproxy.cfg中配置HAProxy的负载均衡。
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
当您在端口80上访问HAProxy负载均衡服务时,它会将请求转发到Swarm集群中的节点。Swarm集群路由网络将请求路由到活动任务中。如果由于任何原因swarm调度程序将任务分派给不同的节点,则不需要重新配置负载均衡。