ドッカーデフォルトネットワーク環境下で、単一のホスト上のドッカー容器は、直接ホストだけにポートマッピングを介して通信することができ、異なるホスト上のドッカーコンテナとの間のブリッジをdocker0通信することができます。このポートは、非常に不便多くのクラスタアプリケーションのための道をマッピング。我々はドッカーコンテナ間で直接通信するために、独自のIPアドレスを使用できる場合、それは多くの問題を解決します。原則として、それぞれ直接ルーティングに従って(例えば、配管)を橋渡し、オーバーレイトンネリング(例えば、フランネルは、+ GREをOVS)などが挙げられます。
docker0ゲートウェイレビュー:
まず、古いネットワークを削除
$ sudoをのIPリンク設定DEV docker0ダウン $ sudoをbrctl delbr docker0
/etc/docker/daemon.jsonを変更し、デフォルトゲートウェイのdocker0を変更
{ "BIP":「192.188.0.1/16” }
ビュー
$ ifconfigコマンドdocker0 docker0リンクENCAP:イーサネットのHWaddr 02:42:38:60:08:25 のinet addrの:192.188.0.1 BCAST:0.0.0.0マスク:255.255.0.0 UP BROADCAST MULTICAST MTU:1500メトリック:1つの RXパケット:0エラー:0ドロップ:0オーバラン:0フレーム:0 TXパケット:0エラー:0ドロップ:0オーバラン:0キャリア:0 衝突:0 txqueuelen:0 RXバイト:0(0.0 B)TXバイト:0(0.0 B)を
あるいは、新しい橋のbridge0マニュアルを作成
$ sudoをbrctl addbr bridge0 $ sudoのIP addrに追加192.188.0.1/16 devのbridge0 $ sudoのIPリンクセットdevがアップbridge0 $のIP addrのショーbridge0 bridge0:<BROADCAST、MULTICAST> MTU 1500のqdiscのNOOP状態UPグループのデフォルトの4 リンク/エーテル66:38:D0:0D:76:18 BRDのFF:FF:FF:FF:FF:FF INET 192.188.0.1/16範囲グローバルbridge0 valid_lft永久preferred_lft永遠
ドッカーの/etc/docker/daemon.jsonで次の設定ファイルを追加し、ドッカーは、ブリッジ上のデフォルトを作成するためにブリッジすることができます。
{ "ブリッジ": "bridge0" }
直接ルーティング
ドッカーホスト上の静的ルートクロスホスト通信を追加することによって:
配管
配管は、ドッカーコンテナネットワーク設定ツールを使用して簡単です。200以上のラインシェルスクリプトで実装されます。カスタムIP、brctl、ブリッジのようなOVS-vsctlコマンドドッカー容器、ネットワークカード、ルーティングを使用して構成。
- 新しいブリッジBR0橋の代わりに、デフォルトのdocker0を使用します
- BR0ブリッジのデフォルトのdocker0ブリッジとの違い:ホストとBR0 eth0の間には、のvethペアであります
示されているように、異なるコンテナの配管の間の通信は、IP BR0をバインドするために、新しい仮想ネットワークアダプタとドッキングウィンドウコンテナブリッジを作成するには、このツールを使用することができます
フランネル(フランネル+ UDP或者フランネル+ VXLAN)
コンテナの実装プロセスによって達成クロスホスト通信フランネル:
- 各ホストのETCDインストールされ、実行(またはデータベースに格納されている他の分散キー値)とフランネル。
- すべてのホストの構成docker0サブネット範囲を計画でetcdに、フランネルは、自動的に各ホストのために別のサブネットを割り当て、ユーザは、IPの大きなプールを指定する必要があります。異なるサブネットルーティング情報を自動的に構成し、フランネルによって生成されます。
- flanneldは、ネットワークセグメント上のすべてのホストは繰返さないdocker0確保ホストベースのサブネット割り当てdocker0の構成に応じて、各ホストにetcd、このホスト上に存在する結果(すなわちdocker0ホストIPサブネット情報etcdライブラリへの対応)は、そうetcdライブラリ)は、ノードetcdサービス間のルーティングテーブルを維持するために、この上にドッカーホストIPサブネット情報と、すべてのホスト(等価との対応関係を保存します。
- コンテナは、コンテナoutip(IP目的ホストコンピュータ)に対応するサブオブジェクトを見つけるために、他のホスト、etcdデータベース検索と通信する必要がある場合、
- 元のパケットは、宛先IPカプセル化をoutipするVXLANまたはUDPパケット、IP層においてカプセル化されます。
- IPの目的は、ホストIPであるため、ルートが到達可能であるので:ソース容器から送信されたデータは、docker0仮想ネットワークアダプタ他端flanneldサービスを介してホストがflannel0カードをリッスンする仮想NIC(P2P仮想NIC)をflannel0に転送します、それは当初、独自のルーティングテーブルflanneldサービスに基づいて、宛先ノードに配信パッケージのデータ内容でした。
- デカプセル化ホスト・オブジェクトは、最終的なオブジェクトコンテナVXLANまたはUDPパケットが到着すると、元のパケットのために解決されます。
PS:フランネルネットワークは、2つのモードがあります純粋三IP転送に依存ゲートウェイモードとしてオーバーレイ・ネットワーク上のオーバレイ、及びホスト-GWホストを、
短所:別の容器フランネルネットワークが直接通信することができ、フランネルは、ネットワーク分離を提供しません。外部のネットワークブリッジとのネットワーク通信が必要です。
織ります
ウィーブはまた、オーバーレイネットワーク、オーバーレイネットワークです。
自分の交換ネットワーク構成情報の責任織り、これらのデータベースは、ホスト間のetcdまたは領事は必要ありません。
この特定のサブネットアドレス空間は、既存のIP --ipalloc-範囲との競合を割り当てられることがあれば、すべてのコンテナ10.32.0.0/12でサブネットのデフォルト設定を織り。
ネットワークのデフォルト設定を織りと大きなサブネット内のすべてのコンテナは、自由に通信することができます。ネットワークの分離、又は容器のための異なるIPサブネットを指定する必要性を達成するために、外側のネットワーク通信には、ホストを織ることが必要であるゲートウェイとしてネットワーク、ホストコンピュータに追加されます。
更紗
更紗は、(代わりにBGPを介して仮想スイッチング仮想ルーティング、各仮想ルータ到達可能性情報発信を使用しての、純粋な三層の実施形態では、仮想マシン間で容器にマルチホスト通信が提供され、オーバーレイネットワークを使用せずに(例えば、フランネル)ドライブ他の仮想または物理ルータにルーティング)。
キャリコは、IPプールでホストごとに、独自のサブネットをカスタマイズすることができます。
キャリコのデフォルトの設定では、同じネットワーク上のコンテナ間の通信を可能にするが、その強力なほとんどすべての可能なシナリオ・ポリシーアクセス制御による。
キャラコの重要な構成要素であって、
- フェリックス:キャリコエージェント、各ノードのワークロードで実行されています。設定はそのエンドポイントの接続状態を確認するために発行された構成とルーティングルールとACLSの責任です。
- etcd:分散キー値ストアは、精度キャリコネットワークの状態を確保するために、ネットワーク・メタデータの一貫性のために主に責任がある、それはkubernetesと共有することができます。
- BGPクライアント:フェリックスは、ルーティング情報を担っているが、作業負荷との間の通信の実効性を確保するために、現在のキャラコカーネル分配ネットワークに書き込まれます。
- BGPルートリフレクタ:大規模な展開を使用する場合は、集中型のルート配布を完了するために、1つ以上のBGPRouteリフレクターによって、メッシュパターンを相互に接続するすべてのノードを取り除きます。
以下に示すように、中心を通る送信元ホスト、ルーティング・データを介してソース容器、先の容器に割り当てられた最終的な宛先ホストのプロセスを記載しています。
全体のプロセスは、常に、転送、無パケット、アンパック処理をルーティングするのiptablesの規則に従って行われます。動作は、基本フランネルアンパックパケットのルーティングおよび転送はCPUのコンピューティングリソースの浪費で実行される上で実行されます。
図は、見つけるためにインターネットからのさまざまなオープンソースのネットワークコンポーネントのパフォーマンスの比較です。それが見られるように、帯域幅やネットワーク遅延、性能や更紗のホストかどうかほぼ同じです。