Как обрабатывать трафик портов только к узлам Docker Swarm, у которых есть служба, предоставляющая этот порт? - PullRequest
1 голос
/ 02 апреля 2019

Если мы представим, что Docker Swarm состоит из узлов A, B и C. Если мы представим, что мы запускаем Docker Stack одного сервиса (для примера), масштабируется до 2 экземпляров, и этот сервис предоставляет порт 80хост-машины.

Как мне убедиться, что любой трафик, который попадает:

http://A:80
http://B:80
http://C:80

Всегда попадает на работающий экземпляр Docker.

Учитывая, что есть 2экземпляров службы и всего 3 узла, всегда будет хотя бы один узел, на котором нет службы, поэтому он не будет предоставлять порт 80 (я полагаю).

1 Ответ

1 голос
/ 02 апреля 2019

Одно преимущество использования оркестровки, например, Режим роя состоит в том, что теперь вы не должны ничего об одиночных узлах в своем рое. Вместо этого рой работает на более высоком уровне абстракции, чем узлы -> на services.

Таким образом, вы указываете Swarm, из каких узлов он состоит, какие сервисы у вас есть и сколько экземпляров контейнеров вы хотите запустить внутри Swarm для каждого отдельного сервиса. После настройки, это работа Swarm, чтобы решить / узнать, какой контейнер работает на каком узле. Опять же: вам нет дела до отдельных узлов.

Так что вопрос не в том, как сделать

http://A:80
http://B:80
http://C:80

(Пере) маршрут к правильному / действительному узлу (работает соответствующий контейнер с открытым портом)

потому что единственное, что вам нужно знать, это название вашей службы. Так вы только позвоните

http://myservice:80

А затем в режиме роя будет решено, на какой узел будет переслан запрос (http://A:80 или http://B:80 или http://C:80). И если у вас есть 3 узла, 1 служба и 2 реплики для этого роя служб, это гарантирует, что никакие запросы не будут пересылаться на узел, на котором не работает ни один контейнер, потому что он знает, что есть только 2 реплики, и он знает, на каких узлах эти экземпляры бежать.

...