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

. У меня есть кластер Docker Swarm с 12 узлами. Контейнеры, развернутые на одном узле, могут нормально связываться друг с другом через оверлейную сеть, но когда они развертываются на разных узлах, возникает проблема с подключением: имена хостов разрешены, и я могу пинговать один контейнер из другого, но когда я пытаюсь связаться с другим контейнером через tcp ( например, с помощью telnet) Я долго жду, а затем время ожидания соединения. Брандмауэр на каждом узле уже настроен для роя докеров с открытыми портами 2377, 7946 и 4789.

Пример: На моем главном узле я выполнил следующие команды для создания сервисов, запланированных для разных узлов:

docker network create -d overlay 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 second
PING second (10.0.5.18): 56 data bytes
64 bytes from 10.0.5.18: icmp_seq=0 ttl=64 time=0.092 ms
64 bytes from 10.0.5.18: icmp_seq=1 ttl=64 time=0.067 ms
64 bytes from 10.0.5.18: icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from 10.0.5.18: icmp_seq=3 ttl=64 time=0.073 ms
^C--- second ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.067/0.079/0.092/0.000 ms

Но затем, когда я пытаюсь подключить другой узел с помощью telnet (есть nginx в этот контейнер прослушивает порт 80):

root@37be801ebe8b:/# telnet second 80
Trying 10.0.5.18...
telnet: Unable to connect to remote host: Connection timed out

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

2
задан 2 August 2021 в 17:43
1 ответ

Ответ найден здесь https://stackoverflow.com/questions/66251422/docker-swarm-overlay-network-icmp-works-but-not-anything-else

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

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

# ethtool -K <interface> tx off
1
ответ дан 12 August 2021 в 06:48

Теги

Похожие вопросы