У меня есть кластер docker swarm с 12 узлами. Контейнеры, развернутые на одном узле, могут нормально подключаться друг к другу через оверлейную сеть, но когда они развернуты на разных узлах, возникает проблема с подключением: имена хостов разрешаются, и я могу пинговать один контейнер из другого, но когда я пытаюсь связаться с другим контейнером через tcp ( например с помощью telnet) я получаю долгое ожидание, а затем тайм-аут соединения.
Брандмауэр на каждом узле уже настроен для роя докеров с открытыми портами 2377, 7946 и 4789.
Пример:
На моем главном узле я выполнил эту команду, чтобы создать службы, запланированные для разных узлов:
сеть докеров создать -d оверлей test_net
docker service create --constraint node.labels.first==true --name first --network test_net ubuntu/nginx:1.18-20.04_beta
docker service create --constraint node.labels.second==true --name second --network test_net ubuntu/nginx:1.18-20.04_beta
Затем из контейнера сначала запускаю:
root@37be801ebe8b:/# пинг секунд
Секунда PING (10.0.5.18): 56 байт данных
64 байта из 10.0.5.18: icmp_seq=0 ttl=64 время=0,092 мс
64 байта из 10.0.5.18: icmp_seq=1 ttl=64 время=0,067 мс
64 байта из 10.0.5.18: icmp_seq=2 ttl=64 время=0,083 мс
64 байта из 10.0.5.18: icmp_seq=3 ttl=64 время=0,073 мс
^C--- вторая статистика пинга ---
4 пакета передано, 4 пакета получено, 0% потери пакетов
туда-обратно мин/средн/макс/стандартное отклонение = 0,067/0,079/0,092/0,000 мс
Но затем, когда я пытаюсь подключить другой узел с помощью telnet (в этом контейнере есть nginx, прослушивающий порт 80):
root@37be801ebe8b:/# телнет секунда 80
Попытка 10.0.5.18...
telnet: невозможно подключиться к удаленному хосту: время ожидания подключения истекло
Может ли кто-нибудь предложить обходной путь для этой проблемы?