Ich arbeite an einem Produktionssetup mit Docker im Schwarmmodus (mit Docker 17.03.1-ce). Es werden 2 Rechenzentren beteiligt sein. In beiden Rechenzentren haben alle Computer sowohl eine öffentliche IP-Adresse als auch eine private IP-Adresse (lokal zum Rechenzentrum) in einem privaten Netzwerk, sodass zwei private Netzwerke vorhanden sind.
Der Netzwerkverkehr über die privaten Netzwerkschnittstellen ist kostenlos, während der Verkehr über die öffentliche Schnittstelle nicht begrenzt ist (und langsamer ist). Daher würde ich den Netzwerkverkehr nach Möglichkeit lieber über die privaten Schnittstellen übertragen.
Soweit ich weiß (glaube ich), wird der gesamte Datenverkehr zwischen Docker-Knoten im Schwarmmodus über dieselbe Netzwerkschnittstelle geleitet, die für die Kommunikation mit den Schwarmmastern verwendet wird. In meinem Fall müssen es die öffentlichen sein, um Multi-DC-Netzwerke herzustellen möglich. Der am meisten erwartete Datenverkehr wird jedoch zwischen Knoten in denselben Domänencontrollern stattfinden, und es wäre sehr schön, wenn Docker den Datenverkehr irgendwie durch meine privaten Netzwerke leiten könnte, wenn sich Quell- und Zielknoten zufällig im selben privaten Netzwerk befinden.
Ich befürchte, dass dies nicht sofort möglich ist, da die Schwarmmaster nichts über diese privaten Netzwerke und die IPs wissen, über die die Knoten verfügen.
Eine Lösung, die ich mir vorstellen könnte, besteht darin, ein VPN einzurichten und den Schwarm darüber hinaus bereitzustellen. Dies erhöht jedoch die Komplexität und ich würde eine reine Docker-Schwarmlösung bevorzugen.
Update : Wie in einem Kommentar vorgeschlagen, besteht die Grundlage für eine Lösung möglicherweise darin, iptables zu verwenden, um ausgehenden Datenverkehr an private IPs anstatt an öffentliche IPs weiterzuleiten. Wenn ich dies jedoch tun möchte, besteht mein nächstes Problem darin, wie all diese Regeln verwaltet werden. Bei 10 Servern in einem DC würde ich 10 * 9 = 90 davon benötigen, um den gesamten möglichen lokalen Verkehr über das private Netzwerk zu leiten. Ich kann mir vorstellen, dass es vielleicht ein Tool gibt, das bei einer solchen Aufgabe helfen könnte, oder ich könnte eines erstellen, aber vielleicht gibt es einen viel einfacheren Weg, dies zu tun.