Docker swarmモードでプライベート物理ネットワークを使用する


11

私は、スウォームモードで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台が必要です。そのようなタスクを支援するツールが存在するか、作成できるツールがあると想像できますが、もっと簡単な方法があるかもしれません。


1
iptablesを使用して、同じデータセンター内の兄弟の宛先IPをプライベートネットワークIPに書き換えることができます。また、これはSOではなく
serverfault

ええ、もう少し掘り下げて同じ結論に至りました。それは面倒になりますが、私はそれを自動的に行うためのツールが本当に必要です(クラスター/ DC内のすべてのノード間のすべてのIPを書き換えます)。結局、N個のノードには(N-1)^ 2個のiptablesルールが必要です。

回答:


1

(おそらくコメントであるべきですが、まだコメントすることはできません)

ホスト名やDNSを使用してクラスターをブートストラップすることはできないため、正しいメーター化されていないネットワークでクラスターにラフトデータを強制的に交換する方法はありませんが、インターフェイス名を使用できることがわかります。不思議なことに、それは群れのドキュメントには記載されていませんが、問題はエラーメッセージがIPまたはインターフェースを期待していることを示しています。

プライベートインターフェイス名を使用してアドバタイズするようにクラスターメンバーを設定して、必要な方法で最大のトラフィックを取得できるかどうかは疑問です。

今は自分自身をテストすることはできませんが、来週のプロジェクトで同様の問題が発生する可能性があるため、来週はテストします。


ありがとう、来週何か見つけたら教えてください。あなたがリンクした問題は「古い」Docker swarm機能に関するものですが、組み込みで外部キー/値ストアを必要としない新しいDocker swarm モードを使用しています(使用することをお勧めします)。
エデ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.