Docker ネットワークドライバーとそのユースケースについて

アプリケーションの要件とネットワーク環境は多様であり、時には相反する力があります。 アプリケーションとネットワークの間には、愛情を込めて コンテナネットワークモデルまたはCNMと呼ばれるDockerネットワーキングがあります。 Dockerコンテナの接続を仲介するのはCNMであり、ネットワーキングで非常に一般的な多様性と複雑さを抽象化するものでもあります。 その結果、移植性が得られ、CNMの強力な ネットワーク ドライバーに由来します。 これらは、Docker Engine、Swarm、および UCP 用のプラグ可能なインターフェイスであり、マルチホスト ネットワーク、ネットワーク層の暗号化、サービス検出などの特別な機能を提供します。

当然のことながら、次の質問はどのネットワークドライバを使うべきかということです各ドライバーにはトレードオフがあり、ユースケースに応じて異なる利点があります。 Docker Engine には 組み込み のネットワーク ドライバーが含まれており、ネットワーク ベンダーやコミュニティが提供する プラグイン ネットワーク ドライバーもあります。 最も一般的に使用される組み込みネットワークドライバーは、 ブリッジオーバーレイ およびmacvlanです。 これらを組み合わせることで、ネットワークのユースケースと環境の非常に幅広いリストをカバーしています。 さらに多くのネットワークドライバのより詳細な比較と議論については、 Docker ネットワーク参照アーキテクチャ。

ブリッジネットワークドライバ

bridgeネットワークドライバーは、リストの最初のドライバーです。理解しやすく、使いやすく、トラブルシューティングも簡単なため、開発者やDockerを初めて使用するユーザーにとってはネットワーキングの選択肢として適しています。 bridgeドライバーは、このネットワーク上のコンテナーが通信できるように、ホストの内部にプライベート ネットワークを作成します。外部アクセスは、ポートをコンテナーに公開することによって付与されます。 Docker は、異なる Docker ネットワーク間の接続をブロックするルールを管理することで、ネットワークを保護します。

舞台裏では、Dockerエンジンは、この接続を可能にするために必要なLinuxブリッジ、内部インターフェイス、iptablesルール、およびホストルートを作成します。 以下で強調表示されている例では、Docker ブリッジ ネットワークが作成され、2 つのコンテナーがアタッチされています。 追加の構成なしで、Docker Engine は必要な配線を行い、コンテナーのサービス検出を提供し、他のネットワークとの通信を防ぐセキュリティ規則を構成します。 組み込みの IPAM ドライバーは、ブリッジ ネットワークのサブネットからのプライベート IP アドレスをコンテナー インターフェイスに提供します。

次の例では、a と db container で構成されるwebという架空のアプリpetsを使用します。独自の UCP または Swarm クラスターで自由に試してみてください。 アプリは`<host-ip>:8000`.

 ドッカーネットワーククリエイト-dブリッジマイブリッジ docker run -d --net mybridge --name db redis docker run -d --net mybridge -e DB=db -p 8000:5000 --name web chrch/web

  ドッカーブリッジネットワークドライバー

アプリケーションは、ポート8000のホストで提供されています。 Dockerブリッジは、そのコンテナ名による通信dbを許可webしています。ブリッジドライバーは、同じネットワーク上にあるため、サービス検出を自動的に行います。 Linux ブリッジ間のすべてのポート マッピング、セキュリティ ルール、および配管は、コンテナーがクラスター全体でスケジュールおよび再スケジュールされるときに、ネットワーク ドライバーによって処理されます。

ブリッジ ドライバーは ローカル スコープ ドライバーであり、1 つのホスト上でのみサービス検出、IPAM、および接続を提供します。 マルチホスト サービスの検出には、コンテナーをホストの場所にマップできる外部ソリューションが必要です。 これがまさにドライバーを overlay とても素晴らしいものにしている理由です。

オーバーレイネットワークドライバ

組み込みのDocker overlay ネットワークドライバーは、マルチホストネットワーキングの複雑さの多くを大幅に簡素化します。 これは スウォームスコープ ドライバーであり、個々のホストではなく、SwarmまたはUCPクラスター全体で動作します。 overlayドライバーを使用すると、マルチホストネットワークは、外部プロビジョニングやコンポーネントなしでDocker内のファーストクラスの市民になります。IPAM、サービス検出、マルチホスト接続、暗号化、負荷分散が組み込まれています。 制御の場合、ドライバーは暗号化された Swarm コントロール プレーンを使用して、 overlay 短い収束時間で大規模なクラスターを管理します。

ドライバーは overlay 、業界標準の VXLAN データ プレーンを利用して、コンテナー ネットワークを基盤となる物理ネットワーク ( アンダーレイ) から分離します。 これには、さまざまなクラウドおよびオンプレミスネットワーク間で最大の移植性を提供するという利点があります。 ネットワーク ポリシー、可視性、およびセキュリティは、Docker ユニバーサル コントロール プレーン (UCP) によって一元的に制御されます。

ドッカーオーバーレイネットワークドライバー

この例では、UCPでオーバーレイネットワークを作成して、コンテナが異なるホスト上にあるときにコンテナを接続webdbできるようにします。オーバーレイネットワーク内のサービスとコンテナに対するネイティブのDNSベースのサービス検出により、その web 逆への解決 db とその逆が保証されます。 コンテナー間の通信が既定で安全になるように、暗号化を有効にしました。さらに、UCP でのネットワークの可視性と使用は、使用するアクセス許可ラベルによって制限されます。

UCP はクラスター全体でサービスをスケジュールし、UCP はオーバーレイ ネットワークを動的にプログラムして、コンテナーがどこにあっても接続できるようにします。 サービスが複数のコンテナーによってサポートされている場合、VIP ベースの負荷分散によってすべてのコンテナーにトラフィックが分散されます。

この例は、次の CLI コマンドを使用して UCP クラスターに対して自由に実行してください。

ドッカーネットワーク作成-dオーバーレイ-opt暗号化ペットオーバーレイ ドッカーサービス作成 --ネットワークペットオーバーレイ --名前データベースレディス docker service create --network pets-overlay -p 8000:5000 -e DB=db --name web chrch/web

  ドッカーネットワーキング

この例では、引き続きポート 8000 で Web アプリを提供していますが、現在は異なるホストにアプリケーションをデプロイしています。 コンテナをスケーリング web したい場合、Swarm & UCP ネットワーキングはトラフィックを自動的に負荷分散します。

ドライバーは overlay 、組織が断片的なソリューションを作成する際に苦労する複雑さと統合の多くを処理する機能豊富なドライバーです。 これは、多くのネットワーキングの課題に対してすぐに使用できるソリューションを提供し、大規模にそれを実現します。

マックヴランドライバ

この macvlan ドライバーは、最新の組み込みネットワークドライバーであり、いくつかの独自の特性を提供します。Linuxブリッジングやポートマッピングを使用するのではなく、コンテナインターフェイスをホストインターフェイスに直接接続するため、非常に軽量なドライバーです。 コンテナーは、外部ネットワークのサブネット上にあるルーティング可能な IP アドレスでアドレス指定されます。

ルーティング可能な IP アドレスの結果として、コンテナーは、NAT とポートマッピングを使用せずに、Swarm クラスターの外部に存在するリソースと直接通信します。 これは、ネットワークの可視性とトラブルシューティングに役立ちます。 さらに、コンテナーとホスト インターフェイス間の直接トラフィック パスは、待機時間の短縮に役立ちます。 macvlan は、ホストごとに構成されるローカルスコープのネットワークドライバです。 その結果、MACVLANと外部ネットワークの間には依存関係が厳しくなり、制約であると同時に、またはbridgeとは異なる利点overlayがあります。

macvlanドライバーは、親インターフェイスの概念を使用します。このインターフェイスは、サブインターフェイスなどのホスト インターフェイス、またはイーサネット インターフェイスを 1 つの論理インターフェイス eth0にバンドルするボンディングされたホスト アダプタにすることができます。 MACVLAN ネットワークはコンテナからネットワーク ゲートウェイへの L2 セグメントであるため、MACVLAN ネットワークの構成時には、外部ネットワークからのゲートウェイ アドレスが必要です。 すべてのDockerネットワークと同様に、MACVLANネットワークは互いにセグメント化されており、ネットワーク内のアクセスを提供しますが、ネットワーク間のアクセスは提供しません。

ドライバーは、 macvlan さまざまな結果を得るためにさまざまな方法で構成できます。 次の例では、異なるサブインターフェイスに結合された 2 つの MACVLAN ネットワークを作成します。 このタイプの設定を使用すると、ホスト インターフェイスを介して複数の L2 VLAN をコンテナに直接拡張できます。 VLAN デフォルト ゲートウェイが外部ネットワークに存在します。

  Docker and macvlan

この例では、 db コンテナ web とコンテナは異なる MACVLAN ネットワークに接続されています。 各コンテナーは、そのネットワークから提供される外部 IP を使用して、それぞれの外部ネットワークに存在します。 この設計を使用すると、オペレータはホストの外部でネットワーク ポリシーを制御し、L2 でコンテナをセグメント化できます。 コンテナは、同じ MACVLAN ネットワーク上で設定することで、同じ VLAN に配置することもできます。 これは、各ネットワークドライバーが提供する柔軟性の量を示しているだけです。

移植性と選択は、Docker の哲学における重要なテナントです。 Docker コンテナー ネットワーク モデルは、ベンダーとコミュニティがネットワーク ドライバーを構築するためのオープン インターフェイスを提供します。 Docker と SDN テクノロジの補完的な進化により、日々より多くのオプションと機能が提供されています。

ハッピーネットワーキング!

その他のリソース:

フィードバック

「Dockerネットワークドライバーとそのユースケースを理解する」に関する0の考え