Docker swarm在端口映射上的缩放行为

我有一个由三个节点组成的群:

$ sudo docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS i12s3zxsn4vu1c98bv3i5idr8 node03 Ready Active i2ckxvsju4tmommxim3dbfq7l node02 Ready Active wak4isl46dn7pbo39drrhphju * node01 Ready Active Leader 

然后我在该群上运行1个nginx副本,并将其端口映射到8080:

 $ sudo docker service create --replicas 1 --publish 8080:80 --name nginx nginx $ sudo docker service ls ID NAME MODE REPLICAS IMAGE PORTS neahnb9mvi1i nginx replicated 1/1 nginx:latest *:8080->80/tcp 

从那里,我可以达到http:// node01:8080上的nginx

接下来,我将nginx实例缩放到6:

 $ sudo docker service scale nginx=6 $ sudo docker service ls ID NAME MODE REPLICAS IMAGE PORTS neahnb9mvi1i nginx replicated 6/6 nginx:latest *:8080->80/tcp 

从那里,我仍然能够达到http:// node01:8080上的nginx。

但是,如果docker swarm将多个节点暴露为唯一的主机,那么在这样的扩展操作中,他如何pipe理端口,因为我的所有nginx服务都映射到同一个8080端口上? 在内部由swarm完成的所有服务实例之间是否存在循环负载均衡,并在8080上返回答案?

我相信对主机的请求被分配到循环types的分配。

发现这个方便的文章http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html 。 检出“ INGRESS AND ROUND ROBIN LOAD BALANCING ”部分。

您可以使用群集中的任何机器的IP和该端口来访问任何暴露其端口的服务(使用堆栈进行部署)。 然后,Docker swarm将把这个请求转发给其中一个副本。 哪个副本由healthstate决定(忽略不健康的服务)以及默认情况下为循环法configuration的负载平衡选项。