Linux入门教程:管理swarm(12) – swarm实践 –使用swarm模式的routing mesh路由请求,所以的节点都参与到r


Docker Engine的swarm模式使得服务发布端口让服务在swarm外部可用变得容易。所以的节点都参与到routing mesh中,意味着任何的节点(即使该节点没有服务在运行)都可以作为入口,都能路由请求。
为了能在swarm中使用ingress网络,你需要在节点之间开放如下端口:

TCP/UDP端口7946 – 用来发现容器网络 UDP端口4789 – 容器ingress网络

当然你也必须在swarm节点之间和做任意外部资源(如外部负载均衡)之间开放published端口。

发布服务端口

在创建服务时使用–publish参数来发布一个端口:

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

是容器内监听的端口。是对外发布的端口,外部通过此端口能访问到容器内的应用程序。
例如,以下的命令是发布nginx容器内的80端口到swarm所有节点的8080端口:

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

当你访问任意节点的8080端口,swarm的负载均衡会把你的请求路由到一个任意节点的可用的容器上。routing mesh在swarm节点的所有IP上监听published端口。

你可以使用以下命令来为已存在的服务发布一个端口:

$ docker service update \   --publish-add <PUBLISHED-PORT>:<TARGET-PORT> \   <SERVICE>

使用docker service inspect来查看服务的published端口。如:

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

发布一个TCP端口或UDP端口

默认情况下,以上发布的端口都是TCP端口。你可以指定发布一个UDP端口。当你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-cache -p 53:53/udp dns-cache

配置一个外部负载均衡

你可以配置一个外部负载均衡来路由请求到swarm服务。例如,你可以配置HAProxy来路由请求到一个published端口为8080的nginx服务。

在这个示例中,在负载均衡和所有swarm节点之间需要开放8080端口。
你可以配置负载均衡负载请求到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节点的routing mesh把请求路由到一个可用的服务上。

相关内容