У меня есть рой, состоящий из трех узлов:
$ 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
Оттуда я могу связаться с nginx на http://node01:8080.
Затем я масштабирую экземпляры 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
Оттуда я все еще могу связаться с nginx на http://node01:8080.
Однако, если docker swarm выставляет несколько узлов как уникальный хост, как он управляет портом во время такой операции масштабирования, поскольку все мои службы nginx отображаются на один и тот же порт 8080? Существует ли балансировка нагрузки циклического перебора между всеми экземплярами сервисов, выполняемая внутри swarm и возвращающая ответ на 8080?