共计 2844 个字符,预计需要花费 8 分钟才能阅读完成。
版本说明信息
- 文档来源: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 调度程序将任务分派给不同的节点,则不需要重新配置负载均衡。
更多 Docker 相关教程见以下内容:
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 16.04 服务器上配置使用 Docker http://www.linuxidc.com/Linux/2017-06/145176.htm
Ubuntu 15.04 下安装 Docker http://www.linuxidc.com/Linux/2015-07/120444.htm
Docker 安装实例 http://www.linuxidc.com/Linux/2017-04/142666.htm
Docker 创建基础镜像 http://www.linuxidc.com/Linux/2017-05/144112.htm
在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm
Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm
使用 Docker 分分钟启动常用应用 http://www.linuxidc.com/Linux/2017-04/142649.htm
Ubuntu 16.04 下 Docker 修改配置文件不生效解决办法 http://www.linuxidc.com/Linux/2017-05/143862.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148370.htm