私は、スウォームモードでDockerを使用した運用セットアップに取り組んでいます(Docker 17.03.1-ceを使用)。2つのデータセンターが関与します。両方のデータセンターでは、すべてのマシンがプライベートネットワーク上にパブリックIPとプライベート(データセンターのローカル)IPの両方を持っているため、2つのプライベートネットワークがあります。
プライベートネットワークインターフェイスを介したネットワークトラフィックは無料ですが、パブリックインターフェイスを介したトラフィックは一定の制限を超えていないため(低速です)、可能であれば、プライベートトラフィックを介してネットワークトラフィックを使用することをお勧めします。
今私が理解していることから(私は思う)、スウォームモードのDockerノード間のすべてのトラフィックは、スウォームマスターとの通信に使用される同じネットワークインターフェースを通過しますが、私の場合はマルチDCネットワーキングを作成するためにパブリックのものでなければなりません可能。ただし、最も予想されるトラフィックは同じDC内のノード間であり、ソースノードとターゲットノードが同じプライベートネットワーク上にある場合、Dockerが何らかの方法でプライベートネットワークを経由してトラフィックをルーティングできれば非常に便利です。
群れのマスターはこれらのプライベートネットワークとノードが持っているIPを知らないので、これはすぐには使えないかもしれません。
私が考えられる解決策の1つは、VPNをセットアップし、その上にswarmを展開することですが、これにより複雑さが増し、純粋なDocker swarmソリューションが好まれます。
更新:コメントで示唆されているように、ソリューションの基礎は、iptablesを使用して発信トラフィックをパブリックIPではなくプライベートIPにルーティングすることです。ただし、これを実行する場合、次の問題は、これらすべてのルールを管理する方法です。DCに10台のサーバーがある場合、すべての可能なローカルトラフィックをプライベートネットワーク経由でルーティングするには、10 * 9 = 90台が必要です。そのようなタスクを支援するツールが存在するか、作成できるツールがあると想像できますが、もっと簡単な方法があるかもしれません。