?
This document uses PHP Chinese website manual Release
Docker Engine群集模式可以輕松發(fā)布服務(wù)端口,使其可以用于群集外部的資源。所有節(jié)點都參與入口路由網(wǎng)格。路由網(wǎng)格使群體中的每個節(jié)點都可以接受群集中運行的任何服務(wù)的已發(fā)布端口上的連接,即使節(jié)點上沒有運行任何任務(wù)。路由網(wǎng)格將所有傳入請求路由到可用節(jié)點上的已發(fā)布端口以激活容器。
為了使用群集中的入口網(wǎng)絡(luò),在啟用群集模式之前,需要在群集節(jié)點之間打開以下端口:
端口7946
TCP/UDP用于容器網(wǎng)絡(luò)發(fā)現(xiàn)。
端口4789
UDP用于容器入口網(wǎng)絡(luò)。
您還必須打開群集節(jié)點與需要訪問端口的任何外部資源(如外部負(fù)載平衡器)之間的發(fā)布端口。
--publish
創(chuàng)建服務(wù)時使用該標(biāo)志發(fā)布端口:
$ docker service create \ --name <SERVICE-NAME> \ --publish <PUBLISHED-PORT>:<TARGET-PORT> \ <IMAGE>
=<TARGET-PORT>
是容器偵聽的端口。這<PUBLISHED-PORT>
是群體提供服務(wù)的端口。
例如,以下命令將nginx容器中的端口80發(fā)布到群集中的任何節(jié)點的端口8080:
$ docker service create \ --name my-web \ --publish 8080:80 \ --replicas 2 \ nginx
當(dāng)您在任何節(jié)點上訪問端口8080時,群集負(fù)載均衡器會將您的請求路由到活動容器。
路由網(wǎng)格在發(fā)布的端口上偵聽分配給該節(jié)點的任何IP地址。對于外部可路由的IP地址,該端口可在主機外部使用。對于所有其他IP地址,訪問只能在主機內(nèi)使用。
您可以使用以下命令發(fā)布現(xiàn)有服務(wù)的端口:
$ docker service update \ --publish-add <PUBLISHED-PORT>:<TARGET-PORT> \ <SERVICE>
您可以使用docker service inspect
查看服務(wù)的發(fā)布端口。例如:
$ docker service inspect --format="{{json .Endpoint.Spec.Ports}}" my-web[{"Protocol":"tcp","TargetPort":80,"PublishedPort":8080}]
輸出顯示<TARGET-PORT>
來自容器的<PUBLISHED-PORT>
節(jié)點以及節(jié)點偵聽服務(wù)請求的位置。
默認(rèn)情況下,當(dāng)發(fā)布端口時,它是TCP端口。您可以專門發(fā)布UDP端口,而不是TCP端口,也可以是TCP端口之外的端口。當(dāng)您同時發(fā)布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
您可以配置外部負(fù)載平衡器以將請求路由到群集服務(wù)。例如,您可以配置HAProxy以平衡對發(fā)布到端口8080的nginx服務(wù)的請求。
在這種情況下,端口8080必須在負(fù)載均衡器和群集中的節(jié)點之間打開。群集節(jié)點可以駐留在代理服務(wù)器可以訪問的專用網(wǎng)絡(luò)上,但不能公開訪問。
您可以配置負(fù)載均衡器來平衡群集中每個節(jié)點之間的請求,即使節(jié)點上沒有任何計劃任務(wù)。例如,您可以在以下位置使用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
當(dāng)您訪問端口80上的HAProxy負(fù)載平衡器時,它會將請求轉(zhuǎn)發(fā)到群集中的節(jié)點。群集路由網(wǎng)格將請求路由到活動任務(wù)。如果由于任何原因,群集調(diào)度程序?qū)⑷蝿?wù)分派給不同的節(jié)點,則不需要重新配置負(fù)載均衡器。
您可以配置任何類型的負(fù)載均衡器以將請求路由到群集節(jié)點。要了解有關(guān)HAProxy的更多信息,請參閱HAProxy文檔。