複数のネットワークインターフェイスを持つポッドを有効にする
クラウドネイティブのContrail® Networking™(CN2)は、Kubernetes内のポッドの複数のネットワークインターフェイスをサポートします。Kubernetesのポッドに対する複数のネットワークインターフェイスサポートは、複数のインターフェイス上でトラフィックをセグメント化する機能など、環境に固有のさまざまな機能を提供します。
クラウドネイティブのContrail Networkingは、ポッドの複数のネットワークインターフェイスをネイティブにサポートします。また、Multusを使用して、クラウドネイティブのContrail Networkingで複数のネットワークインターフェイスを有効にすることもできます。Multusは、Kubernetesネットワーク配管ワーキンググループが開発したKubernetes用のコンテナネットワークインターフェイス(CNI)プラグインです。クラウドネイティブのContrailは、Multusと相互運用でき、ポッド内の複数のCNIによって提供される複数のインターフェイスをサポートします。
このドキュメントでは、CN2を使用する環境でポッドに複数のインターフェイスを有効にする手順を説明します。複数のネットワーク インターフェイスをいつ、どのように有効にするかについての情報が含まれています。ポッドの複数のインターフェイスサポートは、当初、Contrail Networkingリリース22.1でリリースされました。
クラウドネイティブのContrailの複数のネットワークインターフェイスのメリット
複数のネットワーク インターフェイスのサポートは、多くのクラウド ネットワーク環境で有用または必要です。このリストには、いくつかの一般的な例が示されています。
-
ポッドでは、データトラフィックを伝送するためのデータインターフェイスと、管理トラフィック用の個別のインターフェイスが日常的に必要です。
-
通常、仮想化ネットワーク機能(VNF)には、ネットワーク機能を提供するために左、右、管理インターフェイスの 3 つのインターフェイスが必要です。多くの場合、VNF は単一のネットワーク インターフェイスでその機能を提供できません。
-
クラウド ネットワーク トポロジーでは、管理ネットワークをテナント ネットワークから分離するために、2 つ以上のネットワーク インターフェイスをサポートする必要があります。
-
カスタマイズされた、または大規模なクラウド ネットワーク環境では、環境固有のさまざまな要件を満たすために、複数のネットワーク インターフェイスをサポートするクラウド ネットワーク製品を使用する必要が生じることが少なくありません。
デフォルトのCNIを使用するKubernetesクラスタ内のポッドには、ネットワークトラフィックを送受信するための単一のネットワークインターフェイスがあります。クラウドネイティブのContrail Networkingを使用して、複数のネットワークインターフェイスを提供できます。クラウドネイティブのContrail Networkingは、Multus統合もサポートしており、ネットワークにクラウドネイティブContrailを使用する環境で、Multusを使用した複数のネットワークインターフェイスをサポートできます。
クラウドネイティブContrailの複数のネットワークインターフェイスの概要
クラウドネイティブのContrailで、Multusを使用し、Multusを使用せずに、複数のネットワークインターフェイスを有効にできます。Multusは、Kubernetes向けのコンテナネットワークインターフェイス(CNI)プラグインで、ポッド上の複数のネットワークインターフェイスとポッド間のマルチホーミングをサポートします。Multusは、複数のデリゲートCNIからのインターフェイスを同時にサポートできます。この複数の代理CNIサポートにより、CN2を含むさまざまなベンダーのCNIを使用して相互接続されたクラウドネットワーク環境を作成できます。このマルチベンダーサポートにより、Multusはしばしば「メタプラグイン」と呼ばれています。
次の 2 つの段落では、複数のネットワーク インターフェイスを有効にする 2 つの方法をいつ使用する方法に関する情報を提供します。
以下の理由で、複数のネットワークインターフェイスに対してネイティブのクラウドネイティブContrail Networkingサポートを使用して、複数のネットワークインターフェイスを有効にする必要があります。
-
お客様の環境で Multus を有効化および維持するためのオーバーヘッドは必要ありません。
-
CNI(コンテナネットワークインターフェイス)として唯一、Cloud-Native Contrail Networkingを使用しています。
-
環境内の複数のネットワーク インターフェイスをサポートするネットワーク添付ファイル定義(NAD)オブジェクトを作成および維持する必要はありません。
Multus で複数のネットワーク インターフェイスを有効にするには、NAD オブジェクトを作成する必要があります。Multusを使用していない場合、複数のネットワークインターフェイスを有効にするためにNADオブジェクトを設定する必要はありません。
NAD オブジェクトごとに、監視と保守が必要な仮想ネットワークとサブネットが作成されていることは特に顕著です。
以下の理由で、Multusを使用して複数のネットワークインターフェイスを有効にする必要があります。
-
すでに Multus を使用している環境でクラウドネイティブの Contrail を使用しています。Multusは、Openshiftオーケストレーションを使用する環境では特に一般的です。
-
Multusが提供する「メタプラグイン」機能が必要です。クラウドネイティブContrailを使用している環境では、ポッドが複数のインターフェイスを使用しており、複数のインターフェイスがCloud-Native Contrailやその他のCNIによって管理されています。
-
Juniper Networks Apstraと統合されている環境で、クラウドネイティブのContrailを使用しています。クラウドネイティブのContrailとApstraの統合を有効にするには、Multusを有効にする必要があります。
リリース22.4では、クラウドネイティブのContrailとApstraの統合が導入されました。クラウドネイティブのContrailとApstraの統合の詳細については、 SR-IOVベースのワークロード向けCN2 Apstra統合を参照してください。
-
お使いの環境には、他のマルタス機能が必要です。
クラウドネイティブのContrailと Multusの統合の概要
Contrail vRouter は、ネイティブで Multus を認識します。MultusとクラウドネイティブContrailの相互運用性を実現するために、クラウドネイティブのContrail Networking固有の設定は必要ありません。
このリストは、MultusによるクラウドネイティブのContrailサポート相互運用性オプションをまとめたものです。
-
クラウドネイティブのContrailは、Multus CNIバージョン 0.3.1と互換性があります。
-
クラウドネイティブのContrailは、Multusのプライマリ/デフォルトCNIとして設定する必要があります。
-
クラウドネイティブContrailは、Cloud-Native Contrailがプライマリ/デフォルトCNIとして設定されている場合にのみ、Multusを使用してデリゲートCNIとして設定できます。他のCNIがプライマリCNIとして設定されている場合、クラウドネイティブContrailはデリゲートCNIとしてサポートされていません。
-
クラウドネイティブのContrailは、vRouterカーネルモードまたはデータプレーン開発キット(DPDK)モードの場合、Multusとの相互運用性をサポートします。
Multusはサードパーティのプラグインです。Kubernetes 内で Multus を有効にして設定できますが、すべて Cloud-Native Contrail の外部で行えます。Multusを有効にするには、Kubernetesネットワーク配管作業グループが提供する multus-daemonset.yml ファイルを適用できます。
Multusの詳細については、Kubernetesネットワーク配管ワーキンググループの 「Multus CNI Usage Guide 」を参照してください。
ネットワーク添付ファイル定義オブジェクトの作成
Cloud-Native Contrail Networking でネイティブの複数インターフェイスサポートを使用して複数のインターフェイスを有効にするには、 NetworkAttachmentDefinition (NAD)オブジェクトを作成する必要はありません。Multusを使用して環境内で複数のネットワークインターフェイスを有効にしていない場合は、このセクションをスキップできます。NAD オブジェクトを使用していないのに仮想ネットワークを作成する必要がある場合は、 クラウドネイティブの Contrail Networking に VirtualNetworkRouter を導入するを参照してください。
このセクションでは、YAML ファイルを使用して NAD オブジェクトを作成する方法について説明します。クラウドネイティブContrailをNADオブジェクトに設定するには、 juniper.net/networks 注釈を使用します。このセクションの後半で、NAD オブジェクトとフィールド記述テーブルを作成する YAML ファイルの代表的な例を示します。
NetworkAttachmentDefinitionオブジェクトを作成するときは、juniper.net/networks の注釈を含める必要があります。YAML ファイルを定義して、juniper.net/networks 注釈を使用せずに NetworkAttachmentDefinition オブジェクトを作成すると、NetworkAttachmentDefinition オブジェクトはサードパーティー オブジェクトとして扱われます。ネットワークには、VirtualNetwork オブジェクトやサブネット オブジェクトを含む Contrail 関連オブジェクトは作成されません。
NAD コントローラーを使用して、Kubernetes 環境で NetworkAttachmentDefinition オブジェクトを作成します。NAD コントローラーは kube-manager で実行され、NetworkAttachmentDefinition が正常に作成されると、仮想ネットワーク オブジェクトを作成するか、既存の VirtualNetwork オブジェクトを更新します。NAD コントローラーはデフォルトで有効になっていますが、無効にすることもできます。ネットワーク添付ファイル定義コントローラを無効にするを参照してください。
次に、 NetworkAttachmentDefinition オブジェクトの作成に使用する YAML ファイルの例を示します。
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: networkname-1 namespace: nm1 annotations: juniper.net/networks: '{ "ipamV4Subnet": "172.16.10.0/24", "ipamV6Subnet": "2001:db8::/64", "routeTargetList": ["target:23:4561"], "importRouteTargetList": ["target:10.2.2.2:561"], "exportRouteTargetList": ["target:10.1.1.1:561"], "fabricSNAT": true }' spec: config: '{ "cniVersion": "0.3.1", "name": "juniper-network", "type": "contrail-k8s-cni" }'
NetworkAttachmentDefinition Object Fields テーブルは、NetworkAttachmentDefinition オブジェクト ファイル内の変数の使用詳細を提供します。
変数の | 使用 |
---|---|
ipamV4Subnet | (オプション)仮想ネットワークのIPv4サブネットアドレスを指定します。 |
ipamV6Subnet | (オプション)仮想ネットワークの IPv6 サブネット アドレスを指定します。 |
routeTargetList | (オプション)インポート ルートとエクスポート ルートの両方として使用されるルート ターゲットのリストを提供します。 |
importRouteTargetList | (オプション)インポート ルートとして使用されるルート ターゲットのリストを提供します。 |
exportRouteTargetList | (オプション)エクスポート ルートとして使用されるルート ターゲットのリストを提供します。 |
ファブリックSNAT | (オプション)ファブリックソースNATが提供するポートマッピング機能を使用して、アンダーレイネットワークへの接続を切り替えるかどうかを指定します。 このパラメーターを true または false に設定 します。デフォルトでは false に設定されています。アンダーレイ ネットワークへの接続を許可する場合は、パラメータを true に設定します。 |
NetworkAttachmentDefinitionオブジェクトに関連する以下のネットワークアクティビティに注意してください。
-
ネットワークアタッチメント定義コントローラは、kube-managerで動作し、すべてのネットワーク添付ファイル定義オブジェクトの処理を処理します。
-
ネットワーク添付ファイル定義コントローラの更新を juniper.net/network-status で監視できます。
-
IPAM 更新は、ネットワーク添付ファイル定義オブジェクトに対して許可されません。
ネットワーク添付ファイル定義オブジェクトは、仮想ネットワークを作成します。 「ネットワーク添付ファイル定義オブジェクトの仮想ネットワークへの影響」テーブル は、ネットワーク添付ファイル定義オブジェクトに関連するイベントが仮想ネットワークに与える影響の概要を示しています。
その場合 | |
---|---|
単一のクラスター トポロジーでネットワーク添付ファイル定義オブジェクトの名前空間を定義します。 |
VirtualNetwork は、ネットワーク添付ファイルの定義と同じ名前空間で作成されます。 この VirtualNetwork の名前は、Network Attachment Definition オブジェクトと同じです。NAD オブジェクトの名前は、メタデータ: 階層の 名前: フィールドを使用して指定されます。 |
マルチクラスター トポロジーでネットワーク添付ファイル定義オブジェクトの名前空間を定義します。 |
VirtualNetwork 名前空間は cluster-name-ns.です。 |
ネームスペースは、マルチクラスター・トポロジー内のネットワーク接続定義オブジェクトに対して定義されていません。 |
VirtualNetwork 名前空間は、クラスター名のデフォルトです。 |
ネットワーク添付ファイル定義リソースを削除すると、 |
関連する VirtualNetwork オブジェクトも削除されます。 |
ネットワーク添付ファイル定義リソースによって作成された仮想ネットワークを削除すると、 |
ネットワーク添付ファイル定義コントローラは、問題を調整し、仮想ネットワークを再作成します。 |
複数のインターフェイスを使用するようにポッドを設定する
ポッドオブジェクトには、複数のインターフェイスを設定します。Multus を使用している場合は、「 ネットワークアタッチメント定義オブジェクトを作成」の概要に従ってNADオブジェクトも設定する必要があります。
次の例では、 juniper-pod-1ポッド にネットワークトラフィック用の2つのインターフェイスを作成します。 tap1 と tap2。
apiVersion: v1 kind: Pod metadata: name: juniper-pod-1 namespace: juniper-ns annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name":"juniper-network1", "namespace":"juniper-ns", "cni-args":null, "ips":["172.16.20.42"], "mac":"de:ad:00:00:be:ef", "interface":"tap1" }, [ { "name":"juniper-network2", "namespace":"juniper-ns", "cni-args":null, "ips":["172.16.21.42"], "mac":"de:ad:00:00:be:ee", "interface":"tap2" } ]
ネットワーク添付ファイル定義コントローラを無効にする
NAD コントローラーは kube-manager オブジェクトの一部です。このコントローラーは、kubemanager オブジェクトを定義する YAML ファイル内の enableNad: 変数を使用して有効または無効にします。ネットワーク添付ファイル定義コントローラは、デフォルトで有効になっています。
NetworkAttachmentDefinionオブジェクトの適用を防止したい場合は、ネットワーク添付ファイル定義コントローラを無効にすることができます。
次の例では、ネットワーク添付ファイル定義コントローラが無効になっています。
kind: Kubemanager metadata: name: remote-cluster namespace: contrail spec: common: nodeSelector: node-role.kubernetes.io/master: "" enableNad: false