スウォームモードのDockerを使用した本番環境のセットアップに取り組んでいます(Docker 17.03.1-ceを使用)。 2つのデータセンターが関与します。両方のデータセンターでは、すべてのマシンがプライベートネットワーク上にパブリックIPとプライベート(ローカルからデータセンターに対して)の両方のIPを持っているため、2つのプライベートネットワークが存在します。
プライベートネットワークインターフェイスを介したネットワークトラフィックは無料ですが、パブリックインターフェイスを介したトラフィックは一定の制限を超えていないため(遅いので)、可能であれば、プライベートインターフェイスを経由するネットワークトラフィックを優先します。
私が理解していることから(私が思うに)、スウォームモードのDockerノード間のすべてのトラフィックは、スウォームマスターとの通信に使用されるのと同じネットワークインターフェイスを通過します。私の場合、マルチを作成するにはパブリックインターフェイスである必要がありますDCネットワーキングが可能です。ただし、予想されるトラフィックのほとんどは同じDC内のノード間であり、ソースノードとターゲットノードが同じプライベートネットワーク上にある場合に、Dockerが何らかの方法でプライベートネットワークを介してトラフィックをルーティングできれば非常に便利です。
群れのマスターはこれらのプライベートネットワークとノードがそれらに持っているIPを知らないので、これはそのままでは不可能かもしれません。
私が考えることができるソリューションの1つは、VPNをセットアップし、その上にスウォームをデプロイすることですが、これにより複雑さが増し、純粋なDockerスウォームソリューションをお勧めします。
Update:コメントで提案されているように、ソリューションの基礎は、発信トラフィックをパブリックIPではなくプライベートIPにルーティングするためにiptablesを使用することです。ただし、これを実行したい場合、次の問題はこれらすべてのルールをどのように管理するかです。 DCに10台のサーバーがある場合、考えられるすべてのローカルトラフィックをプライベートネットワーク経由でルーティングするには、10 * 9 = 90台のサーバーが必要です。このようなタスクを支援するツールや、作成できるツールが存在することは想像できますが、もっと簡単な方法があるかもしれません。
(おそらくコメントであるべきですが、まだコメントすることはできません)
ホスト名やDNSを使用してbootstrapクラスターにアクセスできないため、クラスターでラフトデータを正しい非測定ネットワークに強制的に交換する方法はありませんが、インターフェース名を使用できます。不思議なことに、それは swarm docs には記載されていませんが、- issue は、エラーメッセージがIPまたはインターフェースを予期していることを示しています。
プライベートインターフェイス名を使用してアドバタイズするようにクラスターメンバーを設定し、トラフィックを最大限に活用できるかどうかは疑問です。
現在、自分でテストすることはできませんが、次のプロジェクトで同様の問題が発生する可能性があるため、来週はテストします。