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