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