Наложенная сеть Docker Swarm между воркерами

Хотя я встречал и другие вопросы по этой теме, ни один из них не кажется достаточно близким к тому, с чем я сталкиваюсь. Вот информация о моей версии Docker в моем Swarm:

Server: Docker Engine - Community
Engine:
Version:          19.03.8
API version:      1.40 (minimum version 1.12)
Go version:       go1.12.17
Git commit:       afacb8b
Built:            Wed Mar 11 01:25:42 2020
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.2.13
GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version:          1.0.0-rc10
GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version:          0.18.0
GitCommit:        fec3683

Я пытался использовать stack для развертывания из файла docker-compose, в котором я использую определяемую пользователем оверлейную сеть (например: docker network create -d overlay some_network --attachable ), и пока все мои Службы находятся в стадии разработки, я наблюдаю последовательное поведение моих Рабочих, использующих сеть докеров, проверяющую some_network, что перечисленные контейнеры перечисляют только одну из Служб в развертывании (есть 3 сервиса по 1 задаче). В разделе peers проверки сети последовательно отображаются все рабочие.

Как ни странно, если я выполняю docker service ps service_name, я вижу, что службы распределяются между моими рабочими. Затем выполните docker service inspect service_name, и то, что я вижу для раздела Networks, - это идентификатор созданной пользователем оверлейной сети, а также в разделе VirtualIPs есть IP-адрес в созданном пользователем оверлее. CIDR сети, а также IP-адрес для входа. Выполнение этого для каждой развернутой службы приводит к схожим результатам: к каждой из них присоединена оверлейная сеть вместе с IP-адресом внутри оверлейной сети.

Есть идеи, почему это происходит и как исправить? Дайте мне знать, если вы все хотите, чтобы я предоставил файл docker-compose.yml.


person Ruhrohshingo    schedule 03.06.2020    source источник


Ответы (1)


Несмотря на то, что оверлейная сеть имеет ройную область видимости, ее конкретный экземпляр будет создан на узле при первом создании контейнера, использующего его. В результате узел появится в разделе «одноранговые узлы» проверки сети докеров. Для каждого узла экземпляр оверлейной сети будет знать о прикрепленных к нему локальных контейнерах И о списке одноранговых узлов, которые участвуют в этой оверлейной сети.

Вы можете сами увидеть поведение: создайте новую оверлейную сеть, проверьте ее. Создайте простой docker-compose.yml с одной службой реплики, которая имеет ограничение размещения, которое прикрепляет ее к любому из рабочих узлов. Перед развертыванием стека проверьте на рабочем узле, существует ли сеть. Затем проверьте сеть на рабочем узле после развертывания службы. Осмотрите сеть на главном узле, на котором вы ее создали.

Входная сеть сама по себе является специальной оверлейной сетью. Если вы публикуете порт во входном режиме для службы, контейнер, созданный задачей, будет находиться во входной сети и в вашей настраиваемой сети.

person Metin    schedule 07.06.2020