У меня есть три разных узла со следующими характеристиками:
- Узел A + B: Ubuntu 16.04 + Docker 18.03.0-ce на основе этого изображения .
- Узел C: CoreOS stable + Docker 17.12.0-ce
Все объединились в рой с хостом A в качестве менеджера Узел C размещен на географически другом сервере другим провайдером, но не должен иметь значения , поскольку я использую общедоступные IP-адреса только для таких вещей, как --advertise-addr
.
.
Я убедился, что все порты, необходимые для роя связи , открыты на всех узлах. Особенно говорят, что порт 7946
необходим для связи между контейнерами. Использование netcat Я могу отправлять и получать пакеты TCP и UDP между всеми тремя узлами, а также из тестового контейнера в каждом из узлов на каждый другой узел.
Проверка сети на любом узле показывает мне тот же результат: все три узла перечислены. Так что Docker Swarm, похоже, знает о своих пирах на любом узле.
Теперь вот проблема:
- Контейнеры, размещенные на узлах A + B, могут без проблем достигать друг друга через оверлейную сеть
- Контейнеры, размещенные на A + C или B + C, могут не связываться. Соединения только время ожидания.
Я не могу найти какой-либо очевидной разницы между узлами, кроме операционной системы и версии докера. Глядя на связанный образ серверов Ubuntu, я увидел, что установлено несколько инструментов, таких как pipework
, но я не настраивал и не использовал его. Или Docker Swarm использует его неявно?
Я действительно застрял здесь. Извините, если этот вопрос кажется неполным, я просто не знаю, с чего начать анализировать проблему. Пожалуйста, не стесняйтесь комментировать, если я должен изменить дополнительную информацию к этому вопросу.