Рейтинг:1

Докер Рой. Контейнеры в одной оверлейной сети, но на разных узлах не могут связаться друг с другом по tcp

флаг cn

У меня есть кластер 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: невозможно подключиться к удаленному хосту: время ожидания подключения истекло

Может ли кто-нибудь предложить обходной путь для этой проблемы?

Рейтинг:1
флаг cn

Нашел ответ здесь https://stackoverflow.com/questions/66251422/docker-swarm-overlay-network-icmp-works-but-not-anything-else

Проблема заключалась в неверных контрольных суммах исходящих пакетов. Которые из-за этого падали по сетевому интерфейсу.

Решение состояло в том, чтобы отключить разгрузку контрольной суммы. Используя эттул:

# ethtool -K <интерфейс> tx off

Ответить или комментировать

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