©
本文档使用 PHP中文网手册 发布
Docker Engine群集模式可以轻松发布服务端口,使其可以用于群集外部的资源。所有节点都参与入口路由网格。路由网格使群体中的每个节点都可以接受群集中运行的任何服务的已发布端口上的连接,即使节点上没有运行任何任务。路由网格将所有传入请求路由到可用节点上的已发布端口以激活容器。
为了使用群集中的入口网络,在启用群集模式之前,需要在群集节点之间打开以下端口:
端口7946
TCP/UDP用于容器网络发现。
端口4789
UDP用于容器入口网络。
您还必须打开群集节点与需要访问端口的任何外部资源(如外部负载平衡器)之间的发布端口。
--publish
创建服务时使用该标志发布端口:
$ docker service create \ --name <SERVICE-NAME> \ --publish <PUBLISHED-PORT>:<TARGET-PORT> \ <IMAGE>
=<TARGET-PORT>
是容器侦听的端口。这<PUBLISHED-PORT>
是群体提供服务的端口。
例如,以下命令将nginx容器中的端口80发布到群集中的任何节点的端口8080:
$ docker service create \ --name my-web \ --publish 8080:80 \ --replicas 2 \ nginx
当您在任何节点上访问端口8080时,群集负载均衡器会将您的请求路由到活动容器。
路由网格在发布的端口上侦听分配给该节点的任何IP地址。对于外部可路由的IP地址,该端口可在主机外部使用。对于所有其他IP地址,访问只能在主机内使用。
您可以使用以下命令发布现有服务的端口:
$ docker service update \ --publish-add <PUBLISHED-PORT>:<TARGET-PORT> \ <SERVICE>
您可以使用docker service inspect
查看服务的发布端口。例如:
$ docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web[{"Protocol":"tcp","TargetPort":80,"PublishedPort":8080}]
输出显示<TARGET-PORT>
来自容器的<PUBLISHED-PORT>
节点以及节点侦听服务请求的位置。
默认情况下,当发布端口时,它是TCP端口。您可以专门发布UDP端口,而不是TCP端口,也可以是TCP端口之外的端口。当您同时发布TCP和UDP端口时,Docker 1.12.2和更早版本要求您添加后缀/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
$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache
$ docker service create --name dns-cache -p 53:53/udp dns-cache
您可以配置外部负载平衡器以将请求路由到群集服务。例如,您可以配置HAProxy以平衡对发布到端口8080的nginx服务的请求。
在这种情况下,端口8080必须在负载均衡器和群集中的节点之间打开。群集节点可以驻留在代理服务器可以访问的专用网络上,但不能公开访问。
您可以配置负载均衡器来平衡群集中每个节点之间的请求,即使节点上没有任何计划任务。例如,您可以在以下位置使用HAProxy配置/etc/haproxy/haproxy.cfg
:
global log /dev/log local0 log /dev/log local1 notice...snip...# Configure HAProxy to listen on port 80frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_back # Configure HAProxy to route requests to swarm nodes on port 8080backend 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负载平衡器时,它会将请求转发到群集中的节点。群集路由网格将请求路由到活动任务。如果由于任何原因,群集调度程序将任务分派给不同的节点,则不需要重新配置负载均衡器。
您可以配置任何类型的负载均衡器以将请求路由到群集节点。要了解有关HAProxy的更多信息,请参阅HAProxy文档。