Я работаю над производственной установкой с Docker в режиме роя (используя Docker 17.03.1-ce). Будет задействовано 2 центра обработки данных. В обоих центрах обработки данных все машины имеют как общедоступный IP-адрес, так и частный (локальный для ЦОД) IP-адрес в частной сети, поэтому будет две частные сети.
Сетевой трафик через частные сетевые интерфейсы является бесплатным, в то время как трафик через открытый интерфейс не превышает определенного предела (и он медленнее), поэтому, где это возможно, я бы предпочел, чтобы сетевой трафик проходил через частные интерфейсы.
Теперь, насколько я понимаю (я думаю), весь трафик между узлами Docker в режиме роя будет проходить через тот же сетевой интерфейс, который используется для связи с хозяевами роя, который в моем случае должен быть общедоступным для создания сетей с несколькими DC возможный. Однако наиболее ожидаемый трафик будет проходить между узлами в одних и тех же DC, и было бы очень хорошо, если бы Docker мог каким-то образом маршрутизировать трафик через мои частные сети, если бы исходный и целевой узлы находились в одной частной сети.
Боюсь, что это невозможно из коробки, потому что мастера роя не знают об этих частных сетях и IP-адресах, которые имеют узлы на них.
Одно из решений, которое я мог бы придумать, - это настроить VPN и развернуть роу поверх этого, но это добавляет дополнительную сложность, и я бы предпочел чистое решение Docker Swarm.
Обновление : как предлагается в комментарии, основой решения может быть использование iptables для маршрутизации исходящего трафика на частные IP-адреса, а не на общедоступные. Однако, если я захочу это сделать, моей следующей проблемой будет то, как управлять всеми этими правилами. С 10 серверами в DC мне понадобилось бы 10 * 9 = 90 из них для маршрутизации всего возможного локального трафика через частную сеть. Я могу представить, может быть, существует какой-то инструмент, который мог бы помочь с такой задачей, или я мог бы ее создать, но, возможно, есть гораздо более простой способ сделать это.
Ответы:
(Возможно, это должен быть комментарий, но пока не могу комментировать)
Поскольку вы не можете использовать имена хостов и / или DNS для начальной загрузки кластера, я не вижу способа заставить данные кластерного обмена обменяться данными в правильной неизмеренной сети, но я вижу, что вы можете использовать имя интерфейса. Любопытно, что это не указано в Swarm Docs, но проблема показывает, что сообщение об ошибке ожидает IP или интерфейс.
Интересно, можно ли настроить членов кластера для рекламы, используя имя частного интерфейса, чтобы вы получали больше трафика так, как вам хочется.
Не могу проверить себя прямо сейчас, но буду на следующей неделе, так как я могу столкнуться с подобной проблемой для будущего проекта.
источник