Масштабирование роя Docker при сопоставлении портов

У меня есть рой, состоящий из трех узлов:

$ 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?


person Lucas.de    schedule 25.09.2017    source источник


Ответы (2)


Я считаю, что запросы к хостам назначаются в циклическом назначении.

Нашел эту полезную статью об этом http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html . Ознакомьтесь с частью под названием «ВХОДЯЩАЯ И КРУГОВАЯ БАЛАНСИРОВКА НАГРУЗКИ».

person David J Eddy    schedule 25.09.2017

Вы можете связаться с любой службой (развернутой со стеком), которая предоставляет свой порт, используя IP-адрес любой машины в рое и этот порт. Затем Docker swarm перенаправит этот запрос на одну из реплик. Какая реплика определяется состоянием работоспособности (неработоспособные службы игнорируются) и настроенным параметром балансировки нагрузки, который по умолчанию является циклическим.

person herm    schedule 25.09.2017