複数ネットワーク
OpenShift Container Platform における複数のネットワークインターフェイスと仮想ルーティングの設定と管理
概要
第1章 複数ネットワークについて リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、OVN-Kubernetes が OpenShift Container Platform クラスターの Container Network Interface (CNI) として機能します。OpenShift Container Platform の管理者またはユーザーは、OVN-Kubernetes をクラスターのデフォルトの CNI として使用すると、ユーザー定義ネットワーク (UDN) または NetworkAttachmentDefinition (NAD) を活用して、クラスターの通常のネットワークトラフィックすべてを処理する 1 つまたは複数のデフォルトネットワークを作成できます。ユーザー定義ネットワークとネットワークアタッチメント定義は、どちらも次のネットワークタイプとして機能できます。
- プライマリーネットワーク: Pod のプライマリーネットワークとして機能します。デフォルトでは、Pod のルートが他のネットワーク経由でトラフィックを送信するように設定されていない限り、すべてのトラフィックがプライマリーネットワークを通過します。
- セカンダリーネットワーク: Pod の、デフォルトではないセカンダリーネットワークとして機能します。セカンダリーネットワークは、特定のトラフィックの種類または目的専用の個別のインターフェイスを提供します。セカンダリーネットワークを使用するように明示的に設定された Pod トラフィックのみが、そのインターフェイスを介してルーティングされます。
ただし、OpenShift Container Platform 管理者は、クラスターのインストール時に、Multus CNI プラグインを活用して、代替のデフォルトのセカンダリー Pod ネットワークを設定できます。Multus を使用すると、ipvlan、macvlan などの複数の CNI プラグインやネットワークアタッチメント定義を一緒に使用して、Pod のセカンダリーネットワークとして機能させることができます。
ユーザー定義ネットワークは、CNI として OVN-Kubernetes が使用されている場合にのみ使用できます。他の CNI での使用はサポートされていません。
利用可能な CNI プラグインに基づいてセカンダリーネットワークを定義し、そのネットワークのうち 1 つ以上を Pod に割り当てることができます。必要に応じて、クラスターに複数のセカンダリーネットワークを定義できます。これにより、スイッチングやルーティングなどのネットワーク機能を提供する Pod を設定する際に柔軟性が得られます。
サポートされている CNI プラグインの完全なリストは、OpenShift Container Platform のセカンダリーネットワーク を参照してください。
ユーザー定義ネットワークの詳細は、ユーザー定義ネットワーク (UDN) について を参照してください。
ネットワークアタッチメント定義の詳細は、NetworkAttachmentDefinition を使用したプライマリーネットワークの作成 を参照してください。
1.1. セカンダリーネットワークの使用シナリオ リンクのコピーリンクがクリップボードにコピーされました!
データプレーンとコントロールプレーンの分離など、ネットワークの分離が必要な状況で、セカンダリーネットワーク と呼ばれる 2 つ目のネットワークを使用できます。トラフィックの分離は、以下のようなパフォーマンスおよびセキュリティー関連の理由で必要になります。
パフォーマンス
トラフィック管理: 2 つの異なるプレーンでトラフィックを送信して、各プレーンのトラフィック量を管理できます。
セキュリティー
ネットワーク分離: セキュリティーを考慮して特別に管理されたネットワークプレーンに機密トラフィックを送信し、テナントまたは顧客間で共有してはならないプライベートデータを分離できます。
クラスターのすべての Pod はクラスター全体のデフォルトネットワークを依然として使用し、クラスター全体での接続性を維持します。すべての Pod には、クラスター全体の Pod ネットワークに割り当てられる eth0
インターフェイスがあります。Pod のインターフェイスは、oc exec -it <pod_name> -- ip a
コマンドを使用して表示できます。Multus CNI を使用するセカンダリーネットワークインターフェイスを追加する場合、それらの名前は net1
、net2
、…、netN
になります。
セカンダリーネットワークを Pod に割り当てるには、インターフェイスの割り当て方法を定義する設定を作成する必要があります。各インターフェイスは、UserDefinedNetwork
カスタムリソース (CR) または NetworkAttachmentDefinition
CR のいずれかを使用して指定します。これらの CR のそれぞれにある CNI 設定は、インターフェイスの作成方法を定義します。
UserDefinedNetwork
CR の作成の詳細は、ユーザー定義ネットワークについて を参照してください。
NetworkAttachmentDefinition CR の作成の詳細は、NetworkAttachmentDefinition を使用したプライマリーネットワークの作成 を参照してください。
1.2. OpenShift Container Platform のセカンダリーネットワーク リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、クラスターにセカンダリーネットワークを作成するために使用する以下の CNI プラグインを提供します。
- bridge: ブリッジベースのセカンダリーネットワークを設定 して、同じホスト上の Pod が相互に、およびホストと通信できるようにします。
- bond-cni: 複数のネットワークインターフェイスを、1 つの論理的な ボンディングされた インターフェイスに集約する方法を提供するために Bond CNI セカンダリーネットワークを設定 します。
- host-device: ホストデバイスのセカンダリーネットワークを設定 して、Pod がホストシステム上の物理イーサネットネットワークデバイスにアクセスできるようにします。
- ipvlan: ipvlan ベースのセカンダリーネットワークを設定 して、macvlan ベースのセカンダリーネットワークと同様に、ホスト上の Pod が他のホストおよび他のホスト上の Pod と通信できるようにします。macvlan ベースのセカンダリーネットワークとは異なり、各 Pod は親の物理ネットワークインターフェイスと同じ MAC アドレスを共有します。
- vlan: VLAN ベースのセカンダリーネットワークを設定 して、VLAN ベースのネットワーク分離と Pod の接続を可能にします。
- macvlan: macvlan ベースのセカンダリーネットワークを設定 して、ホスト上の Pod が物理ネットワークインターフェイスを使用して他のホストおよび他のホスト上の Pod と通信できるようにします。macvlan ベースのセカンダリーネットワークに割り当てられる各 Pod には固有の MAC アドレスが割り当てられます。
- TAP: TAP ベースのセカンダリーネットワークを設定 して、コンテナー namespace 内に TAP デバイスを作成します。TAP デバイスを使用すると、ユーザー空間プログラムがネットワークパケットを送受信できるようになります。
- SR-IOV:SR-IOV ベースのセカンダリーネットワークを設定 する ことで、Pod を ホストシステム上の SR-IOV 対応ハードウェアの仮想機能(VF)インターフェイスに割り当てることができます。
-
route-override:
route-override
ベースのセカンダリーネットワークを設定 して、Pod がルートをオーバーライドして設定できるようにします。
1.3. UserDefinedNetwork および NetworkAttachmentDefinition のサポートマトリックス リンクのコピーリンクがクリップボードにコピーされました!
UserDefinedNetwork
および NetworkAttachmentDefinition
カスタムリソース (CR) により、クラスター管理者とユーザーは、カスタマイズ可能なネットワーク設定の作成、独自ネットワークトポロジーの定義、ネットワーク分離の確保、ワークロードの IP アドレスの管理、高度なネットワーク機能の設定を行うことができます。3 番目の CR である ClusterUserDefinedNetwork
も使用できます。これにより、管理者はクラスターレベルで複数の namespace にまたがるセカンダリーネットワークを作成および定義できます。
ユーザー定義ネットワークとネットワークアタッチメント定義は、プライマリーおよびセカンダリーネットワークインターフェイスの両方として機能することが可能で、それぞれ layer2
および layer3
のトポロジーをサポートします。3 番目のネットワークトポロジーである Localnet も、セカンダリーネットワークのネットワークアタッチメント定義でサポートされます。
OpenShift Container Platform 4.18 以降では、Localnet トポロジーは UserDefinedNetwork
および ClusterUserDefinedNetwork
CR では使用できません。これは、セカンダリーネットワークを活用する NetworkAttachmentDefinition
CR でのみ使用できます。
次のセクションでは、UserDefinedNetwork
および NetworkAttachmentDefinition
CR がプライマリーネットワークまたはセカンダリーネットワークとして使用される場合にサポートされる機能について説明します。ClusterUserDefinedNetwork
CR 用の別のテーブルも含まれています。
ネットワーク機能 | Layer2 トポロジー | Layer3 トポロジー |
---|---|---|
east-west トラフィック | ✓ | ✓ |
north-south トラフィック | ✓ | ✓ |
永続的な IP | ✓ | X |
サービス | ✓ | ✓ |
ルート | X | X |
| ✓ | ✓ |
マルチキャスト [1] | X | ✓ |
| ✓ | ✓ |
| X | X |
- マルチキャストは namespace で有効にする必要があり、OVN-Kubernetes ネットワーク Pod 間でのみ使用できます。マルチキャストの詳細は、「プロジェクトでのマルチキャストの有効化」を参照してください。
-
プライマリーネットワークタイプを使用して
UserDefinedNetwork
CR を作成する場合、UserDefinedNetwork
CR の 後に ネットワークポリシーを作成する必要があります。
ネットワーク機能 | Layer2 トポロジー | Layer3 トポロジー | Localnet トポロジー [1] |
---|---|---|---|
east-west トラフィック | ✓ | ✓ |
✓ ( |
north-south トラフィック | X | X |
✓ ( |
永続的な IP | ✓ | X |
✓ ( |
サービス | X | X | X |
ルート | X | X | X |
| X | X | X |
マルチキャスト | X | X | X |
| X | X | X |
| ✓ | ✓ |
✓ ( |
-
Localnet トポロジーは、
UserDefinedNetwork
CR では使用できません。NetworkAttachmentDefinition
CR のセカンダリーネットワークでのみサポートされます。
ネットワーク機能 | Layer2 トポロジー | Layer3 トポロジー |
---|---|---|
east-west トラフィック | ✓ | ✓ |
north-south トラフィック | ✓ | ✓ |
永続的な IP | ✓ | X |
サービス | ✓ | ✓ |
ルート | X | X |
| ✓ | ✓ |
マルチキャスト [1] | X | ✓ |
| X | X |
| ✓ | ✓ |
- マルチキャストは namespace で有効にする必要があり、OVN-Kubernetes ネットワーク Pod 間でのみ使用できます。詳細は、「マルチキャストについて」を参照してください。
-
プライマリーネットワークタイプを使用して
ClusterUserDefinedNetwork
CR を作成する場合、UserDefinedNetwork
CR の 後に ネットワークポリシーを作成する必要があります。
第2章 プライマリーネットワーク リンクのコピーリンクがクリップボードにコピーされました!
2.1. ユーザー定義ネットワークについて リンクのコピーリンクがクリップボードにコピーされました!
ユーザー定義ネットワーク (UDN) が実装される前は、OpenShift Container Platform の OVN-Kubernetes CNI プラグインは、プライマリーまたは メイン ネットワーク上の Layer 3 トポロジーのみをサポートしていました。Kubernetes の設計原則により、すべての Pod はメインネットワークにアタッチされ、すべての Pod は IP アドレスを使用して相互に通信し、Pod 間のトラフィックはネットワークポリシーに基づき制限されます。
Kubernetes 設計は単純なデプロイメントには便利ですが、この Layer 3 トポロジーでは、特に最新のマルチテナントデプロイメントの場合、プライマリーネットワークセグメント設定のカスタマイズが制限されます。
UDN では、カスタムの Layer 2 および Layer 3 ネットワークセグメントを有効にすることで、Kubernetes Pod ネットワークのデフォルトの Layer 3 トポロジーの柔軟性とセグメンテーション機能が向上します。これらのセグメントはすべてデフォルトで分離されています。これらのセグメントは、デフォルトの OVN-Kubernetes CNI プラグインを使用するコンテナー Pod および仮想マシンの、プライマリーネットワークまたはセカンダリーネットワークとして機能します。UDN を使用することで、幅広いネットワークアーキテクチャーとトポロジーが可能になり、ネットワークの柔軟性、セキュリティー、パフォーマンスが向上します。
cgroupv1
Linux Control Groups (cgroup) を使用するノードは、ユーザー定義ネットワークを作成する前に、cgroupv1
から cgroupv2
に再設定する必要があります。詳細は、Linux cgroup の設定 を参照してください。
クラスター管理者は、ClusterUserDefinedNetwork
カスタムリソース (CR) を使用することで、クラスターレベルで複数の namespace にまたがるプライマリーまたはセカンダリーのネットワークを UDN を使用して作成および定義できます。クラスター管理者またはクラスターユーザーは、UDN を使用して、namespace レベルで UserDefinedNetwork
CR でセカンダリーネットワークを定義することもできます。
次のセクションでは、ユーザー定義ネットワークの利点と制限、ClusterUserDefinedNetwork
または UserDefinedNetwork
CR を作成する際のベストプラクティス、CR の作成方法、およびお客様のデプロイメントに関連する可能性のある追加設定の詳細をさらに詳しく説明します。
2.1.1. ユーザー定義ネットワークの利点 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー定義ネットワークには次のような利点があります。
セキュリティーのためのネットワーク分離の強化
- テナントの分離: Red Hat OpenStack Platform (RHOSP) でテナントが分離される方法と同様に、namespace には独自の分離されたプライマリーネットワークを設定できます。これにより、テナント間のトラフィックのリスクが軽減され、セキュリティーが向上します。
ネットワークの柔軟性
- レイヤー 2 およびレイヤー 3 のサポート: クラスター管理者は、プライマリーネットワークをレイヤー 2 またはレイヤー 3 のネットワークタイプとして設定できます。
簡素化されたネットワーク管理
- ネットワーク設定の複雑さの軽減: ユーザー定義ネットワークでは、異なるネットワーク内のワークロードをグループ化することで分離を実現できるため、複雑なネットワークポリシーが不要になります。
高度な機能
- 一貫性があり選択可能な IP アドレス指定: ユーザーは、異なる namespace 間とクラスター間で IP サブネットを指定して再利用できるため、一貫性のあるネットワーク環境が実現します。
- 複数のネットワークのサポート: ユーザー定義のネットワーク機能により、管理者は複数の namespace を単一のネットワークに接続したり、異なる namespace セットごとに個別のネットワークを作成したりできます。
Red Hat OpenStack Platform (RHOSP) からのアプリケーション移行の簡素化
- ネットワークパリティー: ユーザー定義ネットワークでは、同様のネットワーク分離および設定オプションが提供されるため、OpenStack から OpenShift Container Platform へのアプリケーションの移行が簡素化されます。
開発者と管理者は、カスタムリソースを使用して、namespace スコープのユーザー定義ネットワークを作成できます。プロセスの概要は次のとおりです。
-
管理者は、
k8s.ovn.org/primary-user-defined-network
ラベルを使用して、ユーザー定義ネットワークの namespace を作成します。 -
UserDefinedNetwork
CR は、クラスター管理者またはユーザーによって作成されます。 - ユーザーは namespace 内に Pod を作成します。
2.1.2. ユーザー定義ネットワークの制限 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー定義ネットワーク (UDN) は高度にカスタマイズ可能なネットワーク設定オプションを提供しますが、クラスター管理者と開発者がこれらのネットワークを実装および管理する際に認識しておくべき制限があります。UDN を実装する前に、次の制限を考慮してください。
DNS の制限:
- Pod の DNS ルックアップは、クラスターのデフォルトネットワーク上の Pod の IP アドレスに解決されます。Pod がユーザー定義ネットワークの一部である場合でも、DNS ルックアップではそのユーザー定義ネットワーク上の Pod の IP アドレスは解決されません。ただし、サービスおよび外部エンティティーの DNS ルックアップは期待どおりに機能します。
- Pod がプライマリー UDN に割り当てられると、その Pod はクラスターのデフォルトネットワーク上の Kubernetes API (KAPI) および DNS サービスにアクセスできるようになります。
- 初期ネットワーク割り当て: Pod を作成する前に、namespace とネットワークを作成する必要があります。Pod を含む namespace を新しいネットワークに割り当てたり、既存の namespace に UDN を作成したりすることは、OVN-Kubernetes では受け入れられません。
- ヘルスチェックの制限: Kubelet ヘルスチェックはクラスターのデフォルトネットワークによって実行されますが、Pod 上のプライマリーインターフェイスのネットワーク接続は確認されません。したがって、デフォルトネットワークでは Pod が正常に見えるものの、プライマリーインターフェイスで接続が切断されるというシナリオが、ユーザー定義ネットワークでは発生する可能性があります。
- ネットワークポリシーの制限: ユーザー定義の異なるプライマリネットワークに接続された namespace 間のトラフィックを有効にするネットワークポリシーは効果がありません。これらのトラフィックポリシーが有効にならないのは、これらの隔離されたネットワーク間に接続性がないためです。
-
作成および変更の制限:
ClusterUserDefinedNetwork
CR およびUserDefinedNetwork
CR は、作成後に変更することはできません。 -
デフォルトのネットワークサービスアクセス: ユーザー定義ネットワークの Pod は、デフォルトのネットワークから分離されているため、ほとんどのデフォルトのネットワークサービスにアクセスできません。たとえば、ユーザー定義ネットワークの Pod は、現在 OpenShift Container Platform イメージレジストリーにアクセスできません。この制限のため、Source-to-Image ビルドはユーザー定義ネットワークの namespace では機能しません。さらに、Git リポジトリー内のソースコードに基づいてアプリケーションを作成する機能 (
oc new-app <command>
など) や、Source-to-Image ビルドを使用する OpenShift Container Platform テンプレートからアプリケーションを作成する機能など、他の機能も動作しません。この制限は他のopenshift-*.svc
サービスにも影響する可能性があります。 - 接続制限: ユーザー定義ネットワーク上の NodePort サービスは分離が保証されません。たとえば、同じノード上の Pod からサービスへの NodePort トラフィックにはアクセスできませんが、別のノード上の Pod からのトラフィックは成功します。
2.1.3. レイヤー 2 およびレイヤー 3 トポロジー リンクのコピーリンクがクリップボードにコピーされました!
フラットなレイヤー 2 トポロジーでは、クラスター内のすべてのノードに分散される仮想スイッチを作成します。仮想マシンと Pod はこの仮想スイッチに接続し、これらすべてのコンポーネントが同じサブネット内で相互通信できるようにします。フラットなレイヤー 2 トポロジーは、クラスター内に存在するノード間で仮想マシンのライブマイグレーションを実行する場合に役立ちます。次の図は、ライブマイグレーションのために仮想スイッチを使用する 2 つのノードを含むフラットなレイヤー 2 トポロジーを示しています。
図2.1 コンポーネントの通信に仮想スイッチを使用するフラットなレイヤー 2 トポロジー
レイヤー 2 サブネットを指定しない場合は、クラスター内の各 Pod の IP アドレスを手動で設定する必要があります。レイヤー 2 サブネットを指定しないと、ポートのセキュリティーがメディアアクセスコントロール (MAC) スプーフィングの防止だけに限定され、IP スプーフィングが対象外になります。レイヤー 2 トポロジーでは、単一のブロードキャストドメインが作成されます。しかし、大規模なネットワーク環境では、これにより問題が発生することがあります。ブロードキャストストームが発生して、ネットワークのパフォーマンスが低下する可能性があるためです。
ネットワークの詳細な設定オプションを利用する場合は、レイヤー 2 トポロジーをユーザー定義ネットワーク (UDN) と統合できます。次の図は、各ノードに存在する Pod を含むレイヤー 2 トポロジーで UDN を使用する 2 つのノードを示しています。各ノードには、次の 2 つのインターフェイスが含まれています。
- ノードインターフェイス。これは、ネットワークコンポーネントをノードに接続するコンピュートノードです。
-
br-ex
などの Open vSwitch (OVS) ブリッジ。これは、Pod が相互に通信してリソースを共有できるように、レイヤー 2 OVN スイッチを作成します。
これら 2 つのインターフェイスは、外部スイッチによって接続されています。ゲートウェイまたはルーターにより、外部スイッチとレイヤー 2 OVN スイッチ間のルーティングトラフィックが処理されます。ノード内の仮想マシンと Pod は UDN を使用して相互に通信できます。レイヤー 2 OVN スイッチは、UDN 経由のノードトラフィックを処理します。これにより、あるノードから別のノードへの仮想マシンのライブマイグレーションが可能になります。
図2.2 レイヤー 2 トポロジーを使用するユーザー定義ネットワーク (UDN)
レイヤー 3 トポロジーでは、クラスター内の各ノードに固有のレイヤー 2 セグメントが作成されます。レイヤー 3 ルーティングメカニズムはこれらのセグメントを相互接続し、異なるノードでホストされている仮想マシンと Pod が相互に通信できるようにします。レイヤー 3 トポロジーでは、各ドメインを特定のノードに割り当てることで大規模なブロードキャストドメインを効果的に管理できるため、ブロードキャストトラフィックの範囲は小さくなっています。レイヤー 3 トポロジーを設定するには、cidr
および hostSubnet
パラメーターを設定する必要があります。
2.1.4. ClusterUserDefinedNetwork CR について リンクのコピーリンクがクリップボードにコピーされました!
ClusterUserDefinedNetwork
(UDN) カスタムリソース (CR) は、管理者のみにクラスタースコープのネットワークセグメンテーションと分離を提供します。
次の図は、クラスター管理者が ClusterUserDefinedNetwork
CR を使用してテナント間のネットワーク分離を作成する方法を示しています。このネットワーク設定により、ネットワークを複数の namespace にまたがって構築できるようになります。この図では、udn-1
と udn-2
という 2 つのユーザー定義ネットワークを作成することでネットワークを分離しています。これらのネットワークは接続されておらず、spec.namespaceSelector.matchLabels
フィールドを使用して異なる namespace を選択しています。たとえば、udn-1
は namespace-1
と namespace-2
の通信を設定および分離し、udn-2
は namespace-3
と namespace-4
の通信を設定および分離します。namespace を分離し、同じ namespace 内の Pod が通信できるようにすることで、分離されたテナント (Tenants 1 と Tenants 2) が作成されます。
図2.3 ClusterUserDefinedNetwork CR を使用したテナント分離
2.1.4.1. ClusterUserDefinedNetwork CR のベストプラクティス リンクのコピーリンクがクリップボードにコピーされました!
ユーザーは、ClusterUserDefinedNetwork
カスタムリソース (CR) を設定する前に、次の情報を考慮する必要があります。
-
ClusterUserDefinedNetwork
CR はクラスター管理者による使用を目的としているため、管理者以外は使用しないでください。誤って使用すると、デプロイメントでセキュリティー上の問題が発生したり、中断が発生したり、クラスターネットワークが切断されたりする可能性があります。 -
ClusterUserDefinedNetwork
CR でdefault
namespace を選択しないでください。分離されず、その結果としてクラスターにセキュリティーリスクが生じる可能性があります。 -
ClusterUserDefinedNetwork
CR でopenshift-*
namespace を選択しないでください。 OpenShift Container Platform 管理者は、次のいずれかの条件が満たされると、クラスターのすべての namespace が選択されることに注意する必要があります。
-
matchLabels
セレクターが空のままである。 -
matchExpressions
セレクターが空のままである。 -
namespaceSelector
は初期化されているが、matchExpressions
またはmatchLabel
が指定されていない。例:namespaceSelector: {}
。
-
プライマリーネットワークの場合、
ClusterUserDefinedNetwork
CR に使用される namespace には、k8s.ovn.org/primary-user-defined-network
ラベルが含まれている必要があります。このラベルは更新できず、namespace 作成時にのみ追加できます。k8s.ovn.org/primary-user-defined-network
namespace ラベルには次の条件が適用されます。-
namespace に
k8s.ovn.org/primary-user-defined-network
ラベルがなく、Pod が作成された場合、Pod はデフォルトのネットワークにアタッチされます。 -
namespace に
k8s.ovn.org/primary-user-defined-network
ラベルがなく、その namespace に一致するプライマリーClusterUserDefinedNetwork
CR が作成されると、エラーが報告され、ネットワークは作成されません。 -
namespace に
k8s.ovn.org/primary-user-defined-network
ラベルがなく、プライマリーClusterUserDefinedNetwork
CR がすでに存在する場合、その namespace 内に Pod が作成され、デフォルトのネットワークにアタッチされます。 -
namespace にラベルが あり、プライマリー
ClusterUserDefinedNetwork
CR が存在しない場合、ClusterUserDefinedNetwork
CR が作成されるまで、その namespace に Pod は作成されません。
-
namespace に
2.1.4.2. CLI を使用して ClusterUserDefinedNetwork CR を作成する リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、CLI を使用して ClusterUserDefinedNetwork
カスタムリソース (CR) を作成します。ユースケースに基づき、Layer2
トポロジータイプの場合は cluster-layer-two-udn.yaml
の例、Layer3
トポロジータイプの場合は cluster-layer-three-udn.yaml
の例を使用してリクエストを作成します。
-
ClusterUserDefinedNetwork
CR はクラスター管理者による使用を目的としているため、管理者以外は使用しないでください。誤って使用すると、デプロイメントでセキュリティー上の問題が発生したり、中断が発生したり、クラスターネットワークが切断されたりする可能性があります。 -
OpenShift Virtualization は、
Layer2
トポロジーのみをサポートします。
前提条件
-
cluster-admin
権限を持つユーザーとしてログインしている。
手順
オプション: プライマリーネットワークを使用する
ClusterUserDefinedNetwork
CR の場合は、次のコマンドを入力して、k8s.ovn.org/primary-user-defined-network
ラベルを持つ namespace を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Layer2
またはLayer3
トポロジータイプのクラスター全体のユーザー定義ネットワークリクエストを作成します。Layer2
トポロジーのリクエストを定義するには、次の例のように、cluster-layer-two-udn.yaml
などの YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ClusterUserDefinedNetwork
CR の名前。- 2
- クラスター UDN CR が適用される namespace のセットに対するラベルクエリー。標準の Kubernetes
MatchLabel
セレクターを使用します。デフォルト
またはopenshift-*
namespace は指定しないでください。 - 3
matchLabels
セレクタータイプを使用します。このセレクタータイプでは、用語がAND
関係で評価されます。- 4 5
matchLabels
セレクタータイプが使用されているため、<label_1_key>=<label_1_value>
ラベルと<label_2_key>=<label_2_value>
ラベルの両方を含む namespace がプロビジョニングされます。- 6
- ネットワーク設定を記述します。
- 7
topology
フィールドはネットワーク設定を記述します。受け入れられる値はLayer2
とLayer3
です。Layer2
トポロジータイプを指定すると、すべてのノードで共有される 1 つの論理スイッチが作成されます。- 8
- このフィールドは、トポロジー設定を指定します。
layer2
またはlayer3
に指定できます。 - 9
Primary
またはSecondary
を指定します。4.18 でサポートされるrole
仕様はPrimary
のみです。- 10
Layer2
トポロジータイプの場合、以下はsubnet
フィールドの設定を指定します。- subnets フィールドは任意です。
-
subnets フィールドはタイプが
string
で、IPv4 と IPv6 の両方の標準 CIDR 形式を受け入れます。 -
subnets フィールドには 1 つまたは 2 つの項目を入力できます。2 つのアイテムは、異なるファミリーに属している必要があります。たとえば、subnets の値は
10.100.0.0/16
と2001:db8::/64
です。 -
Layer2
サブネットは省略できます。省略した場合、ユーザーは Pod の静的 IP アドレスを設定する必要があります。結果として、ポートセキュリティーは MAC スプーフィングのみを防止します。詳細は、「静的 IP アドレスを使用した Pod 設定」を参照してください。
Layer3
トポロジーの要求を定義するには、次の例のように、cluster-layer-three-udn.yaml
などの YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ClusterUserDefinedNetwork
CR の名前。- 2
- クラスター UDN が適用される namespace セットに対するラベルクエリー。標準の Kubernetes
MatchLabel
セレクターを使用します。デフォルト
またはopenshift-*
namespace は指定しないでください。 - 3
matchExpressions
セレクタータイプを使用します。このセレクタータイプでは、用語がOR
関係で評価されます。- 4
- 照合するラベルキーを指定します。
- 5
- Operator を指定します。有効な値には、
In
、NotIn
、Exists
、DoesNotExist
などがあります。 - 6
matchExpressions
タイプが使用されているため、<example_namespace_one>
または<example_namespace_two>
のいずれかに一致する namespace がプロビジョニングされます。- 7
- ネットワーク設定を記述します。
- 8
topology
フィールドはネットワーク設定を記述します。受け入れられる値はLayer2
とLayer3
です。Layer3
トポロジータイプを指定すると、ノードごとにレイヤー 2 セグメントが作成され、それぞれに異なるサブネットが割り当てられます。レイヤー 3 ルーティングは、ノードサブネットを相互接続するために使用されます。- 9
- このフィールドは、トポロジー設定を指定します。有効な値は
layer2
またはlayer3
です。 - 10
Primary
ロールまたはSecondary
ロールを指定します。4.18 でサポートされるrole
仕様はPrimary
のみです。- 11
Layer3
トポロジータイプの場合、subnet
フィールドの設定の詳細を次に示します。-
subnets
フィールドは必須です。 subnets
フィールドのタイプは、cidr
およびhostSubnet
です。-
cidr
はクラスターのサブネットであり、文字列値を受け入れます。 -
hostSubnet
は、クラスターサブネットが分割されるノードサブネット接頭辞を指定します。 -
IPv6 の場合、
hostSubnet
では/64
の長さのみがサポートされます。
-
-
次のコマンドを実行してリクエストを適用します。
oc create --validate=true -f <example_cluster_udn>.yaml
$ oc create --validate=true -f <example_cluster_udn>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合の
<example_cluster_udn>.yaml
はLayer2
またはLayer3
設定ファイルの名前です。次のコマンドを実行して、リクエストが成功したことを確認します。
oc get clusteruserdefinednetwork <cudn_name> -o yaml
$ oc get clusteruserdefinednetwork <cudn_name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合の
<cudn_name>
は、クラスター全体のユーザー定義ネットワークに作成した名前です。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.4.3. Web コンソールを使用した ClusterUserDefinedNetwork CR の作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールで、Layer2
トポロジーを使用した ClusterUserDefinedNetwork
カスタムリソース (CR) を作成できます。
現在、OpenShift Container Platform Web コンソールを使用する場合、Layer3
トポロジーを使用した ClusterUserDefinedNetwork
CR を作成することはできません。
前提条件
-
cluster-admin
権限を持つユーザーとして OpenShift Container Platform Web コンソールにアクセスできる。 -
namespace を作成し、
k8s.ovn.org/primary-user-defined-network
ラベルを適用している。
手順
- Administrator パースペクティブから、Networking → UserDefinedNetworks をクリックします。
- ClusterUserDefinedNetwork をクリックします。
- Name フィールドで、クラスタースコープの UDN の名前を指定します。
- Subnet フィールドに値を指定します。
- Project(s) Match Labels フィールドに適切なラベルを追加して、クラスター UDN が適用される namespace を選択します。
- Create をクリックします。クラスタースコープの UDN は、ステップ 5 で指定したラベルを含む namespace に配置された Pod のデフォルトプライマリーネットワークとして機能します。
2.1.5. UserDefinedNetwork CR について リンクのコピーリンクがクリップボードにコピーされました!
UserDefinedNetwork
(UDN) カスタムリソース (CR) は、ユーザーと管理者に高度なネットワークのセグメンテーションと分離を提供します。
次の図は、4 つのクラスター namespace を示しています。各 namespace には 1 つのユーザー定義ネットワーク (UDN) が割り当てられており、各 UDN には Pod IP 割り当て用のカスタムサブネットが割り当てられています。OVN-Kubernetes は重複する UDN サブネットを処理します。Kubernetes ネットワークポリシーを使用しなくても、UDN にアタッチされた Pod はその UDN 内の他の Pod と通信できます。デフォルトでは、これらの Pod は他の UDN に配置された Pod との通信から分離されます。マイクロセグメンテーションの場合、UDN 内でネットワークポリシーを適用できます。namespace には 1 つ以上の UDN を割り当てることができますが、1 つの namespace には 1 つのプライマリー UDN を、1 つの UDN には 1 つ以上の namespace を割り当てるという制限があります。
図2.4 UserDefinedNetwork CR を使用した namespace 分離
2.1.5.1. UserDefinedNetwork CR のベストプラクティス リンクのコピーリンクがクリップボードにコピーされました!
UserDefinedNetwork
カスタムリソース (CR) を設定する前に、次の情報を考慮する必要があります。
-
UserDefinedNetwork
CR の設定にopenshift-*
namespace は使用しないでください。 -
デフォルトの namespace に
UserDefinedNetwork
CR は作成しないでください。分離されず、その結果としてクラスターにセキュリティーリスクが生じる可能性があります。 プライマリーネットワークの場合、
UserDefinedNetwork
CR に使用される namespace にはk8s.ovn.org/primary-user-defined-network
ラベルが含まれている必要があります。このラベルは更新できず、namespace 作成時にのみ追加できます。k8s.ovn.org/primary-user-defined-network
namespace ラベルには次の条件が適用されます。-
namespace に
k8s.ovn.org/primary-user-defined-network
ラベルがなく、Pod が作成された場合、Pod はデフォルトのネットワークにアタッチされます。 -
namespace に
k8s.ovn.org/primary-user-defined-network
ラベルがなく、その namespace に一致するプライマリーUserDefinedNetwork
CR が作成されると、ステータスエラーが報告され、ネットワークは作成されません。 -
namespace に
k8s.ovn.org/primary-user-defined-network
ラベルがなく、プライマリーUserDefinedNetwork
CR がすでに存在する場合、その namespace 内に Pod が作成され、デフォルトのネットワークにアタッチされます。 -
namespace にラベルが あり、プライマリー
UserDefinedNetwork
CR が存在しない場合、UserDefinedNetwork
CR が作成されるまで、その namespace に Pod は作成されません。
-
namespace に
ユーザー定義ネットワークには 2 つのマスカレード IP アドレスが必要です。必要な数のネットワークを保持できる大きさになるように、マスカレードサブネットを再設定する必要があります。
重要-
OpenShift Container Platform 4.17 以降では、クラスターはデフォルトのマスカレードサブネットとして、IPv4 の場合は
169.254.0.0/17
、IPv6 の場合はfd69::/112
を使用します。ユーザーはこれらの範囲を避ける必要があります。更新されたクラスターの場合は、デフォルトのマスカレードサブネットに変更がありません。 -
プロジェクト用のユーザー定義ネットワークが設定された後は、クラスターのマスカレードサブネットの変更はサポートされません。
UserDefinedNetwork
CR を設定した後にマスカレードサブネットを変更しようとすると、ネットワーク接続が中断され、設定の問題が発生する可能性があります。
-
OpenShift Container Platform 4.17 以降では、クラスターはデフォルトのマスカレードサブネットとして、IPv4 の場合は
-
テナントが
NetworkAttachmentDefinition
(NAD) CR ではなくUserDefinedNetwork
リソースを使用していることを確認します。これにより、テナント間でセキュリティー上のリスクが生じる可能性があります。 -
ネットワークセグメンテーションを作成するときは、
UserDefinedNetwork
CR を使用してユーザー定義のネットワークセグメンテーションを完了できない場合にのみ、NetworkAttachmentDefinition
CR を使用する必要があります。 -
UserDefinedNetwork
CR のクラスターサブネットとサービス CIDR は、デフォルトのクラスターサブネット CIDR と重複できません。OVN-Kubernetes ネットワークプラグインは、ネットワークのデフォルトの結合サブネットとして100.64.0.0/16
を使用します。この値は、UserDefinedNetwork
CR のjoinSubnets
フィールドの設定値として使用しないでください。クラスターのネットワーク内のどこかでデフォルトのアドレス値が使用されている場合は、joinSubnets
フィールドを設定してデフォルト値をオーバーライドする必要があります。詳細は、「ユーザー定義ネットワークの追加設定の詳細」を参照してください。
2.1.5.2. CLI を使用した UserDefinedNetwork CR の作成 リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、namespace スコープの UserDefinedNetwork
CR を作成します。ユースケースに基づき、Layer2
トポロジータイプの場合は my-layer-two-udn.yaml
の例、Layer3
トポロジータイプの場合は my-layer-three-udn.yaml
の例を使用してリクエストを作成します。
前提条件
-
cluster-admin
権限でログインしているか、ロールベースのアクセス制御 (RBAC) のview
およびedit
権限がある。
手順
オプション: プライマリーネットワークを使用する
UserDefinedNetwork
CR の場合は、次のコマンドを入力して、k8s.ovn.org/primary-user-defined-network
ラベルを持つ namespace を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Layer2
またはLayer3
トポロジータイプのユーザー定義のネットワークのリクエストを作成します。Layer2
トポロジーのリクエストを定義するには、次の例のように、my-layer-two-udn.yaml
などの YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
UserDefinedNetwork
リソースの名前。これはdefault
にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。- 2
topology
フィールドはネットワーク設定を記述します。受け入れられる値はLayer2
とLayer3
です。Layer2
トポロジータイプを指定すると、すべてのノードで共有される 1 つの論理スイッチが作成されます。- 3
- このフィールドは、トポロジー設定を指定します。
layer2
またはlayer3
に指定できます。 - 4
Primary
ロールまたはSecondary
ロールを指定します。- 5
Layer2
トポロジータイプの場合、以下はsubnet
フィールドの設定を指定します。- subnets フィールドは任意です。
-
subnets フィールドはタイプが
string
で、IPv4 と IPv6 の両方の標準 CIDR 形式を受け入れます。 -
subnets フィールドには 1 つまたは 2 つの項目を入力できます。2 つのアイテムは、異なるファミリーに属している必要があります。たとえば、subnets の値は
10.100.0.0/16
と2001:db8::/64
です。 -
Layer2
サブネットは省略できます。省略すると、ユーザーは Pod の IP アドレスを設定する必要があります。結果として、ポートセキュリティーは MAC スプーフィングのみを防止します。 -
ipamLifecycle
フィールドが指定されている場合、Layer2
subnets
フィールドは必須です。
Layer3
トポロジーのリクエストを定義するには、次の例のように、my-layer-three-udn.yaml
などの YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
UserDefinedNetwork
リソースの名前。これはdefault
にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。- 2
topology
フィールドはネットワーク設定を記述します。受け入れられる値はLayer2
とLayer3
です。Layer3
トポロジータイプを指定すると、ノードごとにレイヤー 2 セグメントが作成され、それぞれに異なるサブネットが割り当てられます。レイヤー 3 ルーティングは、ノードサブネットを相互接続するために使用されます。- 3
- このフィールドは、トポロジー設定を指定します。有効な値は
layer2
またはlayer3
です。 - 4
Primary
ロールまたはSecondary
ロールを指定します。- 5
Layer3
トポロジータイプの場合、subnet
フィールドの設定の詳細を次に示します。-
subnets
フィールドは必須です。 subnets
フィールドのタイプは、cidr
およびhostSubnet
です。-
cidr
は、クラスターのclusterNetwork
設定に相当します。CIDR 内の IP アドレスは、ユーザー定義ネットワーク内の Pod に配布されます。このパラメーターは文字列値を受け入れます。 -
hostSubnet
は、ノードごとのサブネット接頭辞を定義します。 -
IPv6 の場合、
hostSubnet
では/64
の長さのみがサポートされます。
-
-
次のコマンドを実行してリクエストを適用します。
oc apply -f <my_layer_two_udn>.yaml
$ oc apply -f <my_layer_two_udn>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合の
<my_layer_two_udn.yaml>
は、Layer2
またはLayer3
設定ファイルの名前です。次のコマンドを実行して、リクエストが成功したことを確認します。
oc get userdefinednetworks udn-1 -n <some_custom_namespace> -o yaml
$ oc get userdefinednetworks udn-1 -n <some_custom_namespace> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、
some_custom_namespace
は、ユーザー定義ネットワーク用に作成した namespace です。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.5.3. Web コンソールを使用した UserDefinedNetwork CR の作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して、Layer2
トポロジーと Primary
ロールを使用した UserDefinedNetwork
カスタムリソース (CR) を作成できます。
現在、OpenShift Container Platform Web コンソールを使用する場合、Layer3
トポロジーまたは Secondary
ロールを使用した UserDefinedNetwork
CR を作成することはできません。
前提条件
-
cluster-admin
権限を持つユーザーとして OpenShift Container Platform Web コンソールにアクセスできる。 -
namespace を作成し、
k8s.ovn.org/primary-user-defined-network
ラベルを適用している。
手順
- Administrator パースペクティブから、Networking → UserDefinedNetworks をクリックします。
- Create UserDefinedNetwork をクリックします。
- Project name リストから、以前に作成した namespace を選択します。
- Subnet フィールドに値を指定します。
- Create をクリックします。ユーザー定義ネットワークは、この namespace で作成する Pod のデフォルトのプライマリーネットワークとして機能します。
2.1.6. ユーザー定義ネットワークの追加設定の詳細 リンクのコピーリンクがクリップボードにコピーされました!
次の表では、オプションの ClusterUserDefinedNetwork
および UserDefinedNetwork
カスタムリソース (CR) の追加設定を説明します。OVN-Kubernetes ネットワークトポロジーに対する明示的な要件がなく、理解していない場合は、これらのフィールドを設定することは推奨しません。
- ユーザー定義ネットワークのオプション設定
CUDN のフィールド | UDN のフィールド | 型 | 説明 |
|
| object |
省略すると、プラットフォームは
|
|
| object |
Persistent の値は、 |
|
| object |
Enabled:
Disabled: |
|
| integer |
最大転送単位 (MTU)。デフォルト値は |
ここでは、以下のようになります。
<topology>
-
layer2
またはlayer3
のいずれかです。
2.1.7. ユーザー定義ネットワークのステータス条件タイプ リンクのコピーリンクがクリップボードにコピーされました!
次の表は、リソースを記述するときに ClusterUserDefinedNetwork
および UserDefinedNetwork
CR に返されるステータス条件タイプを説明しています。これらの条件は、デプロイメントのトラブルシューティングに使用できます。
条件タイプ | ステータス | 理由とメッセージ | |
---|---|---|---|
|
|
| |
理由 | メッセージ | ||
| 'NetworkAttachmentDefinition has been created in following namespaces: [example-namespace-1, example-namespace-2, example-namespace-3]'` | ||
|
|
| |
理由 | メッセージ | ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
|
条件タイプ | ステータス | 理由とメッセージ | |
---|---|---|---|
|
|
| |
理由 | メッセージ | ||
|
| ||
|
|
| |
理由 | メッセージ | ||
|
|
2.1.8. ユーザー定義のネットワーク Pod でデフォルトのネットワークポートを開く リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、ユーザー定義ネットワーク (UDN) 上の Pod はデフォルトネットワークから分離されています。つまり、モニタリングサービス (Prometheus または Alertmanager) や OpenShift Container Platform イメージレジストリーを実行しているデフォルトのネットワーク Pod は、UDN Pod への接続を開始できません。
デフォルトのネットワーク Pod がユーザー定義のネットワーク Pod に接続できるようにするには、k8s.ovn.org/open-default-ports
アノテーションを使用できます。このアノテーションは、デフォルトネットワークからのアクセス用に、ユーザー定義ネットワーク Pod 上の特定のポートを開きます。
次の Pod 仕様では、デフォルトネットワークからのポート 80
での着信 TCP 接続とポート 53
での UDP トラフィックが許可されます。
開いているポートは、UDN ネットワーク IP ではなく、Pod のデフォルトネットワーク IP でアクセスできます。
2.2. NetworkAttachmentDefinition を使用したプライマリーネットワークの作成 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、NetworkAttachmentDefinition
(NAD) リソースを使用してプライマリーネットワークを作成および管理する方法を説明します。
2.2.1. プライマリーネットワークの管理方法 リンクのコピーリンクがクリップボードにコピーされました!
NAD によって作成されたプライマリーネットワークのライフサイクルは、次のどちらかの方法で管理できます。
-
Cluster Network Operator (CNO) 設定を変更します。この方法を使用すると、CNO によって
NetworkAttachmentDefinition
オブジェクトが自動的に作成および管理されます。CNO は、オブジェクトのライフサイクルを管理するだけでなく、DHCP によって割り当てられる IP アドレスを使用するプライマリーネットワークで DHCP が利用可能であることを確認します。 -
YAML マニフェストを適用します。この方法を使用すると、
NetworkAttachmentDefinition
オブジェクトを作成してプライマリーネットワークを直接管理できます。この方法では、Pod にプライマリーネットワークインターフェイスを割り当てるために複数の CNI プラグインを呼び出すことができます。
各アプローチは同時に使用できず、プライマリーネットワークを管理する場合に 1 つのアプローチしか使用できません。どちらのアプローチでも、プライマリーネットワークは、お客様が設定した Container Network Interface (CNI) プラグインによって管理されます。
OVN SDN を使用して、Red Hat OpenStack Platform (RHOSP) に複数のネットワークインターフェイスを持つ OpenShift Container Platform ノードをデプロイすると、セカンダリーインターフェイスの DNS 設定がプライマリーインターフェイスの DNS 設定よりも優先される場合があります。その場合は、次のコマンドを実行して、セカンダリーインターフェイスに割り当てられているサブネット ID の DNS ネームサーバーを削除します。
openstack subnet set --dns-nameserver 0.0.0.0 <subnet_id>
$ openstack subnet set --dns-nameserver 0.0.0.0 <subnet_id>
2.2.2. Cluster Network Operator によるプライマリーネットワーク割り当ての作成 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成するプライマリーネットワークを指定すると、CNO によって NetworkAttachmentDefinition
CRD が自動的に作成されます。
Cluster Network Operator によって管理される NetworkAttachmentDefinition
CRD は編集しないでください。これを実行すると、プライマリーネットワークのネットワークトラフィックが中断する可能性があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
オプション: プライマリーネットワークの namespace を作成します。
oc create namespace <namespace_name>
$ oc create namespace <namespace_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CNO 設定を編集するには、以下のコマンドを入力します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のサンプル CR のように、作成されるプライマリーネットワークの設定を追加して、作成している CR を変更します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存し、テキストエディターを終了して、変更をコミットします。
検証
次のコマンドを実行して、CNO が
NetworkAttachmentDefinition
CRD を作成したことを確認します。CNO が CRD を作成するまでに遅延が発生する可能性があります。oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>
- CNO の設定に追加したネットワーク割り当ての namespace を指定します。
出力例
NAME AGE test-network-1 14m
NAME AGE test-network-1 14m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.2.1. プライマリーネットワークアタッチメントの設定 リンクのコピーリンクがクリップボードにコピーされました!
プライマリーネットワークは、k8s.cni.cncf.io
API グループの NetworkAttachmentDefinition
API を使用して設定されます。
API の設定は、以下の表で説明されています。
フィールド | 型 | 説明 |
---|---|---|
|
| プライマリーネットワークの名前。 |
|
| オブジェクトが関連付けられる namespace。 |
|
| JSON 形式の CNI プラグイン設定。 |
2.2.3. YAML マニフェストを適用したプライマリーネットワークアタッチメントの作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 - NAD のデプロイ先となる namespace で作業している。
手順
以下の例のように、プライマリーネットワーク設定を含む YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- オプション: NAD が適用される namespace を指定できます。NAD のデプロイ先となる namespace で作業している場合、この仕様は必要ありません。
プライマリーネットワークを作成するには、次のコマンドを入力します。
oc apply -f <file>.yaml
$ oc apply -f <file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<file>
- YAML マニフェストを含むファイルの名前を指定します。
第3章 セカンダリーネットワーク リンクのコピーリンクがクリップボードにコピーされました!
3.1. OVN-Kubernetes でのセカンダリーネットワークの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、NetworkAttachmentDefinition
(NAD) リソースを使用して、クラスターのセカンダリーネットワークを設定できます。
セカンダリーネットワークとしてのユーザー定義ネットワークのサポートが、OpenShift Container Platform の今後のバージョンで追加される予定です。
3.1.1. OVN-Kubernetes セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Networking OVN-Kubernetes ネットワークプラグインを使用すると、Pod のセカンダリーネットワークインターフェイスを設定できます。セカンダリーネットワークインターフェイスを設定するには、NetworkAttachmentDefinition
カスタムリソース定義 (CRD) で設定を定義する必要があります。
Pod およびマルチネットワークポリシーの作成は、ノード内の OVN-Kubernetes コントロールプレーンエージェントが関連する network-attachment-definition
CRD を処理するまで、保留状態のままになる場合があります。
OVN-Kubernetes セカンダリーネットワークは、レイヤー 2、レイヤー 3、または localnet トポロジーで設定できます。これらのトポロジーでサポートされる機能の詳細は、「UserDefinedNetwork および NetworkAttachmentDefinition のサポートマトリックス」を参照してください。
次のセクションでは、OVN-Kubernetes で現在セカンダリーネットワークに許可されている各トポロジーの設定例を示します。
ネットワーク名は一意である必要があります。たとえば、同じネットワークを参照する異なる設定を持つ複数の NetworkAttachmentDefinition
CRD の作成はサポートされていません。
3.1.1.1. OVN-Kubernetes セカンダリーネットワークのサポート対象プラットフォーム リンクのコピーリンクがクリップボードにコピーされました!
次のサポート対象プラットフォームで OVN-Kubernetes セカンダリーネットワークを使用できます。
- ベアメタル
- IBM Power®
- IBM Z®
- IBM® LinuxONE
- VMware vSphere
- Red Hat OpenStack Platform (RHOSP)
3.1.1.2. OVN-Kubernetes ネットワークプラグインの JSON 設定テーブル リンクのコピーリンクがクリップボードにコピーされました!
次の表は、OVN-Kubernetes CNI ネットワークプラグインの設定パラメーターを示しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。必要な値は |
|
|
ネットワークの名前。このネットワークは namespace スコープではありません。たとえば、 |
|
|
設定する CNI プラグインの名前。この値は |
|
|
ネットワークのトポロジー設定。 |
|
| クラスター全体のネットワークに使用するサブネット。
省略した場合、ネットワークを実装する論理スイッチはレイヤー 2 通信のみを提供し、ユーザーは Pod の IP アドレスを設定する必要があります。ポートセキュリティーは、MAC スプーフィングのみを防止します。 |
|
| 最大伝送単位 (MTU)。この値を設定しなかった場合、Cluster Network Operator (CNO) が、プライマリーネットワークインターフェイスのアンダーレイ MTU、Geneve (Generic Network Virtualization Encapsulation) などの Pod ネットワークのオーバーレイ MTU、および IPsec などの有効な機能のバイト容量の差を計算して、デフォルトの MTU 値を設定します。 |
|
|
この設定が含まれるネットワークアタッチメント定義 CRD のメタデータの |
|
| CIDR と IP アドレスのコンマ区切りのリスト。IP アドレスは割り当て可能な IP アドレスプールから削除され、Pod に渡されることはありません。 |
|
|
トポロジーが |
3.1.1.3. マルチネットワークポリシーとの互換性 リンクのコピーリンクがクリップボードにコピーされました!
k8s.cni.cncf.io
API グループの MultiNetworkPolicy
カスタムリソース定義 (CRD) によって提供されるマルチネットワークポリシー API は、OVN-Kubernetes セカンダリーネットワークと互換性があります。ネットワークポリシーを定義する場合、使用できるネットワークポリシールールは、OVN-Kubernetes セカンダリーネットワークが subnets
フィールドを定義しているかどうかによって異なります。詳細は、次の表を参照してください。
subnets フィールドの指定 | 許可されたマルチネットワークポリシーセレクター |
---|---|
はい |
|
いいえ |
|
MultiNetworkPolicy
オブジェクトで k8s.v1.cni.cncf.io/policy-for
アノテーションを使用することで、NetworkAttachmentDefinition
(NAD) カスタムリソース (CR) を指定できます。NAD CR は、ポリシーを適用するネットワークを定義します。次のマルチネットワークポリシーの例は、blue2
という名前のセカンダリーネットワークのセカンダリーネットワーク CNI 設定で subnets
フィールドが定義されている場合にのみ有効です。
Pod セレクターを使用するマルチネットワークポリシーの例
次の例では、ipBlock
ネットワークポリシーセレクターを使用します。これは、OVN-Kubernetes セカンダリーネットワークに対して常に有効です。
IP ブロックセレクターを使用するマルチネットワークポリシーの例
3.1.1.4. localnet スイッチドトポロジーの設定 リンクのコピーリンクがクリップボードにコピーされました!
スイッチド localnet
トポロジーは、ネットワークアタッチメント定義 (NAD) として作成されたワークロードを、クラスター全体の論理スイッチを介して物理ネットワークに相互接続します。
セカンダリーネットワークを ovs-bridge にマッピングして、OVN-Kubernetes セカンダリーネットワークとして使用する必要があります。ブリッジマッピングにより、ネットワークトラフィックが物理ネットワークに到達できるようになります。ブリッジマッピングは、インターフェイスラベルとも呼ばれる物理ネットワーク名を、Open vSwitch (OVS) で作成されたブリッジに関連付けます。
nmstate.io/v1
API グループの一部である NodeNetworkConfigurationPolicy
(NNCP) オブジェクトを作成して、宣言的にマッピングを作成できます。この API は NMState Operator によって提供されます。この API を使用すると、指定した nodeSelector
式 (node-role.kubernetes.io/worker: ''
など) に一致するノードにブリッジマッピングを適用できます。この宣言的なアプローチにより、NMState Operator は、ノードセレクターによって指定されたすべてのノードにセカンダリーネットワーク設定を自動的かつ透過的に適用します。
セカンダリーネットワークを接続する場合、既存の br-ex
ブリッジを使用することも、新しいブリッジを作成することもできます。どのアプローチを使用するかは、特定のネットワークインフラストラクチャーによって異なります。次のアプローチを検討してください。
-
ノードにネットワークインターフェイスが 1 つしか含まれていない場合は、既存のブリッジを使用する必要があります。このネットワークインターフェイスは OVN-Kubernetes によって所有および管理されているため、
br-ex
ブリッジから削除したり、インターフェイス設定を変更したりしないでください。ネットワークインターフェイスを削除または変更すると、クラスターネットワークは正しく動作しなくなります。 - ノードに複数のネットワークインターフェイスが含まれている場合は、別のネットワークインターフェイスを新しいブリッジに接続して、セカンダリーネットワークに使用できます。このアプローチでは、プライマリークラスターネットワークからトラフィックが分離されます。
次の例では、localnet1
ネットワークが br-ex
ブリッジにマッピングされています。
ブリッジを共有するためのマッピングの例
- 1 1
- 設定オブジェクトの名前。
- 2
- ノードネットワーク設定ポリシーを適用するノードを指定するノードセレクター。
- 3
- トラフィックが OVS ブリッジに転送されるセカンダリーネットワークの名前。このセカンダリーネットワークは、OVN-Kubernetes セカンダリーネットワークを定義する
NetworkAttachmentDefinition
CRD のspec.config.name
フィールドの名前と一致する必要があります。 - 4
- ノード上の OVS ブリッジの名前。この値は、
state: present
を指定する場合にのみ必要です。 - 5
- マッピングの状態。ブリッジを追加する場合は
present
、ブリッジを削除する場合はabsent
である必要があります。デフォルト値はpresent
です。次の JSON の例では、
localnet1
という名前の localnet セカンダリーネットワークを設定します。mtu
パラメーターの値は、br-ex
ブリッジインターフェイスにマッピングされるセカンダリーネットワークインターフェイスに設定された MTU 値と一致する必要があることに注意してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次の例では、localnet2
ネットワークインターフェイスが ovs-br1
ブリッジに接続されています。この接続を使って、ネットワークインターフェイスを OVN-Kubernetes ネットワークプラグインでセカンダリーネットワークとして利用できるようになります。
複数のインターフェイスを持つノードのマッピング例
- 1
- 設定オブジェクトの名前を指定します。
- 2
- ノードネットワーク設定ポリシーが適用されるノードを識別するノードセレクターを指定します。
- 3
- クラスタートラフィック用に OVN-Kubernetes によって使用されるデフォルトのブリッジとは別に動作する新しい OVS ブリッジを指定します。
- 4
- マルチキャストスヌーピングを有効にするかどうかを指定します。マルチキャストスヌーピングを有効にすると、ネットワークデバイスがすべてのネットワークメンバーにマルチキャストトラフィックをフラッディングすることを防止します。デフォルトでは、OVS ブリッジはマルチキャストスヌーピングを有効にしません。デフォルト値は
false
です。 - 5
- 新しい OVS ブリッジに関連付けるホストシステム上のネットワークデバイスを指定します。
- 6
- トラフィックを OVS ブリッジに転送するセカンダリーネットワークの名前を指定します。この名前は、OVN-Kubernetes セカンダリーネットワークを定義する
NetworkAttachmentDefinition
CRD のspec.config.name
フィールドの値と一致する必要があります。 - 7
- ノード上の OVS ブリッジの名前を指定します。値は、
state: present
が設定されている場合にのみ必要です。 - 8
- マッピングの状態を指定します。有効な値は、ブリッジを追加する場合は
present
、ブリッジを削除する場合はabsent
です。デフォルト値はpresent
です。次の JSON の例では、
localnet2
という名前の localnet セカンダリーネットワークを設定します。mtu
パラメーターの値は、eth1
セカンダリーネットワークインターフェイスに設定された MTU 値と一致する必要があることに注意してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.1.4.1. レイヤー 2 スイッチドトポロジーの設定 リンクのコピーリンクがクリップボードにコピーされました!
スイッチド (レイヤー 2) トポロジーネットワークは、クラスター全体の論理スイッチを介してワークロードを相互接続します。この設定は、IPv6 およびデュアルスタックデプロイメントに使用できます。
レイヤー 2 スイッチドトポロジーネットワークでは、クラスター内の Pod 間のデータパケットの転送のみが許可されます。
次の JSON 例では、スイッチドセカンダリーネットワークを設定します。
3.1.1.5. セカンダリーネットワーク用の Pod の設定 リンクのコピーリンクがクリップボードにコピーされました!
k8s.v1.cni.cncf.io/networks
アノテーションを使用して、セカンダリーネットワーク割り当てを指定する必要があります。
次の例では、このガイドに示されている割り当て設定ごとに 1 つずつ、2 つのセカンダリー割り当てを持つ Pod をプロビジョニングします。
3.1.1.6. 静的 IP アドレスを使用して Pod を設定する リンクのコピーリンクがクリップボードにコピーされました!
次の例では、静的 IP アドレスを使用して Pod をプロビジョニングします。
- セカンダリーネットワークアタッチメント (namespace スコープのオブジェクト) がレイヤー 2 または localnet トポロジーを使用している場合にのみ、Pod のセカンダリーネットワークアタッチメントの IP アドレスを指定できます。
- Pod の静的 IP アドレスを指定できるのは、割り当て設定にサブネットが含まれていない場合のみです。
3.2. 他の CNI プラグインを使用したセカンダリーネットワークの作成 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、セカンダリーネットワーク用の特定の設定フィールドを説明します。
3.2.1. ブリッジセカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のオブジェクトは、Bridge CNI プラグインの設定パラメーターを説明します。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
|
|
オプション: 使用する仮想ブリッジの名前を指定します。ブリッジインターフェイスがホストに存在しない場合は、これが作成されます。デフォルト値は |
|
|
オプション: 仮想ネットワークから外すトラフィックの IP マスカレードを有効にするには、 |
|
|
オプション: IP アドレスをブリッジに割り当てるには |
|
|
オプション: ブリッジを仮想ネットワークのデフォルトゲートウェイとして設定するには、 |
|
|
オプション: 仮想ブリッジの事前に割り当てられた IP アドレスの割り当てを許可するには、 |
|
|
オプション: 仮想ブリッジが受信時に使用した仮想ポートでイーサネットフレームを送信できるようにするには、 |
|
|
オプション: ブリッジで無作為検出モード (Promiscuous Mode) を有効にするには、 |
|
| オプション: 仮想 LAN (VLAN) タグを整数値として指定します。デフォルトで、VLAN タグは割り当てません。 |
|
|
オプション: デフォルトの VLAN をブリッジに接続されている |
|
|
オプション: VLAN トランクタグを割り当てます。デフォルト値は |
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
オプション: コンテナー側の |
|
|
オプション: MAC スプーフィングチェックを有効にして、コンテナーから発信されるトラフィックをインターフェイスの MAC アドレスに制限します。デフォルト値は |
VLAN パラメーターは、veth
のホスト側に VLAN タグを設定し、ブリッジインターフェイスで vlan_filtering
機能を有効にします。
L2 ネットワークのアップリンクを設定するには、次のコマンドを使用してアップリンクインターフェイスで VLAN を許可する必要があります。
bridge vlan add vid VLAN_ID dev DEV
$ bridge vlan add vid VLAN_ID dev DEV
3.2.1.1. ブリッジ CNI プラグインの設定例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、bridge-net
という名前のセカンダリーネットワークを設定します。
3.2.2. Bond CNI セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
Bond Container Network Interface (Bond CNI) を使用すると、複数のネットワークインターフェイスを、コンテナー内の 1 つの論理的な "ボンディングされた" インターフェイスに集約できます。これにより、ネットワークの冗長性とフォールトトレランスが向上します。このプラグインを使用したボンディングでは、SR-IOV Virtual Function (VF) のみがサポートされます。
次の表は、Bond CNI プラグインの設定パラメーターを示しています。
フィールド | 型 | 説明 |
---|---|---|
|
| この CNI ネットワークアタッチメント定義に付ける名前を指定します。この名前は、コンテナー内のインターフェイスを識別および参照するために使用されます。 |
|
| CNI 仕様のバージョン。 |
|
|
設定する CNI プラグインの名前を指定します ( |
|
| Address Resolution Protocol (ARP) のリンク監視頻度をミリ秒単位で指定します。このパラメーターは、集約されたインターフェイスの可用性を確認するために、ボンディングインターフェイスが ARP 要求を送信する頻度を定義します。 |
|
| オプション: ボンディングの最大転送単位 (MTU) を指定します。デフォルトは 1500 です。 |
|
|
オプション: ボンディングの |
|
| ボンディングポリシーを指定します。 |
|
|
オプション: ボンディング対象のネットワークインターフェイスが、ボンディングの開始時に、コンテナーのネットワーク namespace 内に直接作成され、使用可能な状態になっていることを前提とするかどうかを指定します。デフォルトの |
|
| ボンディングするインターフェイスを指定します。 |
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
3.2.2.1. Bond CNI プラグインの設定例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、bond-net1
という名前のセカンダリーネットワークを設定します。
3.2.3. ホストデバイスのセカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
device
、hwaddr
、kernelpath
、または pciBusID
のいずれかのパラメーターを設定してネットワークデバイスを指定します。
以下のオブジェクトは、ホストデバイス CNI プラグインの設定パラメーターを説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
|
オプション: |
|
| オプション: デバイスハードウェアの MAC アドレス。 |
|
|
オプション: |
|
|
オプション: |
3.2.3.1. ホストデバイス設定例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、hostdev-net
という名前のセカンダリーネットワークを設定します。
3.2.4. VLAN セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のオブジェクトは、VLAN、vlan
、CNI プラグインの設定パラメーターを示しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
|
ネットワーク割り当てに関連付けるイーサネットインターフェイス。 |
|
|
|
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
| オプション: 返される DNS 情報。たとえば、DNS ネームサーバーの優先順位順リストなどです。 |
|
|
オプション: |
vlan
設定を持つ NetworkAttachmentDefinition
カスタムリソース定義 (CRD) は、ノード内の単一の Pod でのみ使用できます。CNI プラグインは、同じ master
インターフェイス上に同じ vlanId
を持つ vlan
サブインターフェイスを複数作成できないためです。
3.2.4.1. VLAN 設定例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、vlan-net
という名前のセカンダリーネットワークを含む vlan
設定を示しています。
3.2.5. IPVLAN セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のオブジェクトは、IPVLAN、ipvlan
、CNI プラグインの設定パラメーターを示しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。これは、プラグインが連鎖している場合を除き必要です。 |
|
|
オプション: 仮想ネットワークの操作モードを指定します。この値は、 |
|
|
オプション: ネットワーク割り当てに関連付けるイーサネットインターフェイスを指定します。 |
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
オプション: |
-
ipvlan
オブジェクトは、仮想インターフェイスがmaster
インターフェイスと通信することを許可しません。したがって、コンテナーはipvlan
インターフェイスを使用してホストに到達できません。コンテナーが、Precision Time Protocol (PTP
) をサポートするネットワークなど、ホストへの接続を提供するネットワークに参加していることを確認してください。 -
1 つの
master
インターフェイスを、macvlan
とipvlan
の両方を同時に使用するように設定することはできません。 -
インターフェイスに依存できない IP 割り当てスキームの場合、
ipvlan
プラグインは、このロジックを処理する以前のプラグインと連鎖させることができます。master
が省略された場合、前の結果にはスレーブにするipvlan
プラグインのインターフェイス名が 1 つ含まれていなければなりません。ipam
が省略された場合、ipvlan
インターフェイスの設定には前の結果が使用されます。
3.2.5.1. IPVLAN CNI プラグインの設定例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、ipvlan-net
という名前のセカンダリーネットワークを設定します。
3.2.6. MACVLAN セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
以下のオブジェクトは、MAC 仮想 LAN (MACVLAN) Container Network Interface (CNI) プラグインの設定パラメーターを説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
| IPAM CNI プラグインの設定オブジェクト。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。 |
|
|
オプション: 仮想ネットワークのトラフィックの可視性を設定します。 |
|
| オプション: 新しく作成された macvlan インターフェイスに関連付けるホストネットワークインターフェイス。値が指定されていない場合は、デフォルトのルートインターフェイスが使用されます。 |
|
| オプション: 指定された値への最大転送単位 (MTU)。デフォルト値はカーネルによって自動的に設定されます。 |
|
|
オプション: |
プラグイン設定の master
キーを指定する場合は、競合の可能性を回避するために、プライマリーネットワークプラグインに関連付けられているものとは異なる物理ネットワークインターフェイスを使用してください。
3.2.6.1. MACVLAN CNI プラグイン設定の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、macvlan-net
という名前のセカンダリーネットワークを設定します。
3.2.7. TAP セカンダリーネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
以下のオブジェクトは、TAP CNI プラグインの設定パラメーターを説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNI 仕様のバージョン。値 |
|
|
CNO 設定に以前に指定した |
|
|
設定する CNI プラグインの名前: |
|
| オプション: インターフェイスの指定された MAC アドレスを要求します。 |
|
| オプション: 最大転送単位 (MTU) を指定された値に設定します。デフォルト値はカーネルによって自動的に設定されます。 |
|
| オプション: タップデバイスに関連付ける SELinux コンテキスト。 注記
OpenShift Container Platform には、値 |
|
|
オプション: マルチキューを有効にするには |
|
| オプション: タップデバイスを所有するユーザー。 |
|
| オプション: タップデバイスを所有するグループ。 |
|
| オプション: タップデバイスを既存のブリッジのポートとして設定します。 |
3.2.7.1. Tap 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、mynet
という名前のセカンダリーネットワークを設定します。
3.2.7.2. TAP CNI プラグインの SELinux ブール値の設定 リンクのコピーリンクがクリップボードにコピーされました!
container_t
SELinux コンテキストを使用してタップデバイスを作成するには、Machine Config Operator (MCO) を使用してホスト上で container_use_devices
ブール値を有効にします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。
手順
次の詳細を含む、
setsebool-container-use-devices.yaml
などの名前の新しい YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、新しい
MachineConfig
オブジェクトを作成します。oc apply -f setsebool-container-use-devices.yaml
$ oc apply -f setsebool-container-use-devices.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記MachineConfig
オブジェクトに変更を適用すると、変更が適用された後、影響を受けるすべてのノードが正常に再起動します。この更新が適用されるまでに、時間がかかる場合があります。次のコマンドを実行して、変更が適用されていることを確認します。
oc get machineconfigpools
$ oc get machineconfigpools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-e5e0c8e8be9194e7c5a882e047379cfa True False False 3 3 3 0 7d2h worker rendered-worker-d6c9ca107fba6cd76cdcbfcedcafa0f2 True False False 3 3 3 0 7d
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-e5e0c8e8be9194e7c5a882e047379cfa True False False 3 3 3 0 7d2h worker rendered-worker-d6c9ca107fba6cd76cdcbfcedcafa0f2 True False False 3 3 3 0 7d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記すべてのノードが更新され、準備完了状態になっている必要があります。
3.2.8. セカンダリーネットワークで route-override プラグインを使用してルートを設定する リンクのコピーリンクがクリップボードにコピーされました!
次のオブジェクトは、route-override
CNI プラグインの設定パラメーターを示しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
設定する CNI プラグインの名前: |
|
|
オプション: 既存ルートをフラッシュするには |
|
|
オプション: デフォルトルート、つまりゲートウェイルートをフラッシュするには |
|
| オプション: コンテナー namespace から削除するルートのリストを指定します。 |
|
|
オプション: コンテナー namespace に追加するルートのリストを指定します。各ルートは、 |
|
|
オプション: check コマンドをスキップするには、これを |
3.2.8.1. route-override プラグインの設定例 リンクのコピーリンクがクリップボードにコピーされました!
route-override
CNI は、親 CNI と連鎖して使用するように設計された CNI タイプです。独立して動作するのではなく、まず親 CNI を利用してネットワークインターフェイスを作成して IP アドレスを割り当てます。その後、ルーティングルールの変更が可能になります。
次の例では、mymacvlan
という名前のセカンダリーネットワークを設定します。親 CNI は、eth1
にアタッチされたネットワークインターフェイスを作成し、host-local
IPAM を使用して 192.168.1.0/24
の範囲の IP アドレスを割り当てます。これにより route-override
CNI が親 CNI に連結され、既存ルートをフラッシュし、192.168.0.0/24
へのルートを削除し、カスタムゲートウェイを使用して 192.168.0.0/24
の新しいルートを追加することで、ルーティングルールが変更されます。
3.3. Pod をセカンダリーネットワークにアタッチする リンクのコピーリンクがクリップボードにコピーされました!
クラスターユーザーとして、Pod をセカンダリーネットワークにアタッチできます。
3.3.1. セカンダリーネットワークに Pod を追加する リンクのコピーリンクがクリップボードにコピーされました!
セカンダリーネットワークに Pod を追加できます。Pod は、デフォルトネットワークで通常のクラスター関連のネットワークトラフィックを継続的に送信します。
Pod が作成されると、セカンダリーネットワークが Pod にアタッチされます。ただし、Pod がすでに存在する場合は、セカンダリーネットワークをその Pod にアタッチすることはできません。
Pod はセカンダリーネットワークと同じ namespace に存在する必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - クラスターにログインする。
手順
アノテーションを
Pod
オブジェクトに追加します。以下のアノテーション形式のいずれかのみを使用できます。カスタマイズせずにセカンダリーネットワークをアタッチするには、次の形式でアノテーションを追加します。
<network>
が、Pod に関連付けるセカンダリーネットワークの名前に置き換えます。metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 複数のセカンダリーネットワークを指定するには、各ネットワークをコンマで区切ります。コンマの間にはスペースを入れないでください。同じセカンダリーネットワークを複数回指定した場合、Pod は複数のネットワークインターフェイスをそのネットワークにアタッチします。
カスタマイズしてセカンダリーネットワークをアタッチするには、次の形式でアノテーションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pod を作成するには、以下のコマンドを入力します。
<name>
を Pod の名前に置き換えます。oc create -f <name>.yaml
$ oc create -f <name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: アノテーションが
Pod
CR に存在することを確認するには、<name>
を Pod の名前に置き換えて、以下のコマンドを入力します。oc get pod <name> -o yaml
$ oc get pod <name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例では、
example-pod
Pod がnet1
セカンダリーネットワークにアタッチされています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/network-status
パラメーターは、オブジェクトの JSON 配列です。各オブジェクトは、Pod にアタッチされているセカンダリーネットワークのステータスを表します。アノテーションの値はプレーンテキストの値として保存されます。
3.3.1.1. Pod 固有のアドレスおよびルーティングオプションの指定 リンクのコピーリンクがクリップボードにコピーされました!
Pod をセカンダリーネットワークに割り当てる場合、特定の Pod でそのネットワークに関するその他のプロパティーを指定する必要がある場合があります。これにより、ルーティングの一部を変更することができ、静的 IP アドレスおよび MAC アドレスを指定できます。これを実行するには、JSON 形式のアノテーションを使用できます。
前提条件
- Pod はセカンダリーネットワークと同じ namespace に存在する必要があります。
-
OpenShift CLI (
oc
) がインストールされている。 - クラスターにログインすること。
手順
アドレスおよび/またはルーティングオプションを指定する間に Pod をセカンダリーネットワークに追加するには、以下の手順を実行します。
Pod
リソース定義を編集します。既存のPod
リソースを編集する場合は、以下のコマンドを実行してデフォルトエディターでその定義を編集します。<name>
を、編集するPod
リソースの名前に置き換えます。oc edit pod <name>
$ oc edit pod <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod
リソース定義で、k8s.v1.cni.cncf.io/networks
パラメーターを Pod のmetadata
マッピングに追加します。k8s.v1.cni.cncf.io/networks
は、追加のプロパティーを指定するだけでなく、NetworkAttachmentDefinition
カスタムリソース (CR) 名を参照するオブジェクトリストの JSON 文字列を受け入れます。metadata: annotations: k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]'
metadata: annotations: k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]'
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<network>
を、以下の例にあるように JSON オブジェクトに置き換えます。一重引用符が必要です。
以下の例では、アノテーションで
default-route
パラメーターを使用して、デフォルトルートを持つネットワーク割り当てを指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
デフォルトのルートにより、他のルートに指定されていないトラフィックがゲートウェイにルーティングされます。
OpenShift Container Platform のデフォルトのネットワークインターフェイス以外のインターフェイスへのデフォルトのルートを設定すると、Pod 間のトラフィックに予想されるトラフィックが別のインターフェイスでルーティングされる可能性があります。
Pod のルーティングプロパティーを確認する場合、oc
コマンドを Pod 内で ip
コマンドを実行するために使用できます。
oc exec -it <pod_name> -- ip route
$ oc exec -it <pod_name> -- ip route
また、Pod の k8s.v1.cni.cncf.io/network-status
を参照して、JSON 形式の一覧のオブジェクトで default-route
キーの有無を確認し、デフォルトルートが割り当てられているセカンダリーネットワークを確認することができます。
Pod に静的 IP アドレスまたは MAC アドレスを設定するには、JSON 形式のアノテーションを使用できます。これには、この機能をとくに許可するネットワークを作成する必要があります。これは、CNO の rawCNIConfig で指定できます。
以下のコマンドを実行して CNO CR を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以下の YAML は、CNO の設定パラメーターを説明しています。
Cluster Network Operator YAML の設定
以下のオブジェクトは、macvlan CNI プラグインを使用して静的 MAC アドレスと IP アドレスを使用するための設定パラメーターを説明しています。
静的 IP および MAC アドレスを使用した macvlan CNI プラグイン JSON 設定オブジェクト
- 1
- 作成するセカンダリーネットワークアタッチメントの名前を指定します。名前は指定された
namespace
内で一意である必要があります。 - 2
- CNI プラグイン設定の配列を指定します。1 つ目のオブジェクトは、macvlan プラグイン設定を指定し、2 つ目のオブジェクトはチューニングプラグイン設定を指定します。
- 3
- CNI プラグインのランタイム設定機能の静的 IP 機能を有効にするために要求が実行されるように指定します。
- 4
- macvlan プラグインが使用するインターフェイスを指定します。
- 5
- CNI プラグインの静的 MAC アドレス機能を有効にするために要求が実行されるように指定します。
上記のネットワーク割り当ては、特定の Pod に割り当てられる静的 IP アドレスと MAC アドレスを指定するキーと共に、JSON 形式のアノテーションで参照できます。
以下を使用して Pod を編集します。
oc edit pod <name>
$ oc edit pod <name>
静的 IP および MAC アドレスを使用した macvlan CNI プラグイン JSON 設定オブジェクト
静的 IP アドレスおよび MAC アドレスを同時に使用することはできません。これらは個別に使用することも、一緒に使用することもできます。
セカンダリーネットワークを持つ Pod の IP アドレスと MAC プロパティーを検証するには、oc
コマンドを使用して Pod 内で ip コマンドを実行します。
oc exec -it <pod_name> -- ip a
$ oc exec -it <pod_name> -- ip a
3.4. マルチネットワークポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
管理者は MultiNetworkPolicy
API を使用して、セカンダリーネットワークに接続された Pod のトラフィックを管理する複数のネットワークポリシーを作成できます。たとえば、特定のポート、IP/範囲、またはラベルに基づいてトラフィックを許可または拒否するポリシーを作成できます。
マルチネットワークポリシーを使用すると、クラスター内のセカンダリーネットワーク上のトラフィックを管理できます。これらのポリシーでは、ユーザー定義ネットワークのデフォルトのクラスターネットワークまたはプライマリーネットワークを管理できません。
クラスター管理者は、以下のネットワークタイプのいずれかにマルチネットワークポリシーを設定できます。
- Single-Root I/O Virtualization (SR-IOV)
- MAC Virtual Local Area Network (MacVLAN)
- IPVLAN (IP 仮想ローカルエリアネットワーク)
- SR-IOV 上のボンディング Container Network Interface (CNI)
- OVN-Kubernetes セカンダリーネットワーク
SR-IOV セカンダリーネットワークのマルチネットワークポリシーの設定のサポートは、カーネルネットワークインターフェイスコントローラー (NIC) でのみサポートされます。SR-IOV は、データプレーン開発キット (DPDK) アプリケーションではサポートされていません。
3.4.1. マルチネットワークポリシーとネットワークポリシーの違い リンクのコピーリンクがクリップボードにコピーされました!
MultiNetworkPolicy
API は、NetworkPolicy
API を実装していますが、いくつかの重要な違いがあります。
以下の場合は、
MultiNetworkPolicy
API を使用する必要があります。apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy
apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
CLI を使用してマルチネットワークポリシーと対話する場合は、
multi-networkpolicy
リソース名を使用する必要があります。たとえば、oc get multi-networkpolicy <name>
コマンドを使用してマルチネットワークポリシーオブジェクトを表示できます。ここで、<name>
はマルチネットワークポリシーの名前になります。 MultiNetworkPolicy
オブジェクトでk8s.v1.cni.cncf.io/policy-for
アノテーションを使用することで、NetworkAttachmentDefinition
(NAD) カスタムリソース (CR) を指定できます。NAD CR は、ポリシーを適用するネットワークを定義します。k8s.v1.cni.cncf.io/policy-for
アノテーションを含むマルチネットワークポリシーの例apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
apiVersion: k8s.cni.cncf.io/v1beta1 kind: MultiNetworkPolicy metadata: annotations: k8s.v1.cni.cncf.io/policy-for:<namespace_name>/<network_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace_name>
- namespace 名を指定します。
<network_name>
- ネットワーク割り当て定義の名前を指定します。
3.4.2. クラスターのマルチネットワークポリシーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、クラスターでマルチネットワークポリシーのサポートを有効にすることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。
手順
以下の YAML で
multinetwork-enable-patch.yaml
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マルチネットワークポリシーを有効にするようにクラスターを設定します。
oc patch network.operator.openshift.io cluster --type=merge --patch-file=multinetwork-enable-patch.yaml
$ oc patch network.operator.openshift.io cluster --type=merge --patch-file=multinetwork-enable-patch.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
network.operator.openshift.io/cluster patched
network.operator.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.3. IPv6 ネットワークでのマルチネットワークポリシーのサポート リンクのコピーリンクがクリップボードにコピーされました!
ICMPv6 近隣探索プロトコル (NDP) は、デバイスが近隣ノードに関する情報を検出して維持できるようにするための、メッセージとプロセスのセットです。NDP は IPv6 ネットワークで重要な役割を果たし、同じリンク上のデバイス間の対話を促進します。
useMultiNetworkPolicy
パラメーターが true
に設定されている場合、Cluster Network Operator (CNO) はマルチネットワークポリシーの iptables 実装をデプロイします。
IPv6 ネットワークでマルチネットワークポリシーをサポートするために、Cluster Network Operator は、マルチネットワークポリシーの影響を受けるすべての Pod に次のルールのセットをデプロイします。
マルチネットワークポリシーのカスタムルール
- 1
- このルールは、近隣探索プロトコル (NDP) の一部である ICMPv6 ネイバー要請メッセージの受信を許可します。これらのメッセージは、近隣ノードのリンクレイヤーアドレスを決定するのに役立ちます。
- 2
- このルールは、NDP の一部であり、送信者のリンクレイヤーアドレスに関する情報を提供する、受信 ICMPv6 近隣アドバタイズメントメッセージを許可します。
- 3
- このルールは、ICMPv6 ルーター要請メッセージの受信を許可します。ホストは、これらのメッセージを使用してルーター設定情報を要求します。
- 4
- このルールは、ホストに設定情報を提供する ICMPv6 ルーターアドバタイズメントメッセージの受信を許可します。
これらの事前定義されたルールは編集できません。
これらのルールが集合することで、IPv6 環境でのアドレス解決やルーター通信などを含め、ネットワークが正しく機能するために不可欠な ICMPv6 トラフィックが有効になります。これらのルールが適用され、トラフィックを拒否するマルチネットワークポリシーがあれば、アプリケーションで接続の問題が発生することは考えられません。
3.4.4. マルチネットワークポリシーの使用 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、マルチネットワークポリシーを作成、編集、表示、および削除することができます。
3.4.4.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- クラスターのマルチネットワークポリシーサポートを有効にしている。
3.4.4.2. CLI を使用したマルチネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
マルチネットワークポリシーを作成し、クラスターの namespace に許可される Ingress または Egress ネットワークトラフィックを記述する詳細なルールを定義することができます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが適用される namespace で作業していること。
手順
ポリシールールを作成します。
<policy_name>.yaml
ファイルを作成します。touch <policy_name>.yaml
$ touch <policy_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- マルチネットワークポリシーのファイル名を指定します。
作成したばかりのファイルで、以下の例のようなマルチネットワークポリシーを定義します。
すべての namespace のすべての Pod から Ingress を拒否します。
これは基本的なポリシーであり、他のネットワークポリシーの設定によって許可されたクロス Pod トラフィック以外のすべてのクロス Pod ネットワーキングをブロックします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<network_name>
- ネットワーク割り当て定義の名前を指定します。
同じ namespace のすべての Pod から Ingress を許可する
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<network_name>
- ネットワーク割り当て定義の名前を指定します。
特定の namespace から 1 つの Pod への Ingress トラフィックを許可する
このポリシーは、
namespacey
で実行されている Pod からpod-a
ラベルを持つ Pod へのトラフィックを許可します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<network_name>
- ネットワーク割り当て定義の名前を指定します。
サービスへのトラフィックを制限する
このポリシーを適用すると、
app=bookstore
とrole=api
の両方のラベルを持つすべての Pod に、app=bookstore
というラベルを持つ Pod のみがアクセスできるようになります。この例では、アプリケーションは、ラベルapp=bookstore
およびrole=api
でマークされた REST API サーバーである可能性があります。この例では、次のユースケースに対応します。
- サービスへのトラフィックを、それを使用する必要がある他のマイクロサービスのみに制限します。
データベースへの接続を制限して、それを使用するアプリケーションのみを許可します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<network_name>
- ネットワーク割り当て定義の名前を指定します。
マルチネットワークポリシーオブジェクトを作成するには、以下のコマンドを入力します。
oc apply -f <policy_name>.yaml -n <namespace>
$ oc apply -f <policy_name>.yaml -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- マルチネットワークポリシーのファイル名を指定します。
<namespace>
- オプションのパラメーター。現在の namespace 以外の namespace にオブジェクトを定義した場合、namespace を指定してパラメーターを指定します。
成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールのフォームから、クラスターの任意の namespace でネットワークポリシーを直接作成できます。
3.4.4.3. マルチネットワークポリシーの編集 リンクのコピーリンクがクリップボードにコピーされました!
namespace のマルチネットワークポリシーを編集できます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが存在する namespace で作業している。
手順
オプション: namespace のマルチネットワークポリシーオブジェクトをリスト表示するには、以下のコマンドを入力します。
oc get multi-networkpolicy
$ oc get multi-networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
マルチネットワークポリシーオブジェクトを編集します。
マルチネットワークポリシーの定義をファイルに保存した場合は、ファイルを編集して必要な変更を加えてから、以下のコマンドを入力します。
oc apply -n <namespace> -f <policy_file>.yaml
$ oc apply -n <namespace> -f <policy_file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
<policy_file>
- ネットワークポリシーを含むファイルの名前を指定します。
マルチネットワークポリシーオブジェクトを直接更新する必要がある場合、以下のコマンドを入力できます。
oc edit multi-networkpolicy <policy_name> -n <namespace>
$ oc edit multi-networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- ネットワークポリシーの名前を指定します。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
マルチネットワークポリシーオブジェクトが更新されていることを確認します。
oc describe multi-networkpolicy <policy_name> -n <namespace>
$ oc describe multi-networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- マルチネットワークポリシーの名前を指定します。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールの Actions メニューのポリシーから、クラスターの任意の namespace でネットワークポリシーを直接編集できます。
3.4.4.4. CLI を使用したマルチネットワークポリシーの表示 リンクのコピーリンクがクリップボードにコピーされました!
namespace のマルチネットワークポリシーを検査できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが存在する namespace で作業している。
手順
namespace のマルチネットワークポリシーをリスト表示します。
namespace で定義されたマルチネットワークポリシーオブジェクトを表示するには、以下のコマンドを実行します。
oc get multi-networkpolicy
$ oc get multi-networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 特定のマルチネットワークポリシーを検査するには、以下のコマンドを入力します。
oc describe multi-networkpolicy <policy_name> -n <namespace>
$ oc describe multi-networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- 検査するマルチネットワークポリシーの名前を指定します。
<namespace>
- オプション: オブジェクトが現在の namespace 以外の namespace に定義されている場合は namespace を指定します。
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールのフォームから、クラスターの任意の namespace でネットワークポリシーを直接表示できます。
3.4.4.5. CLI を使用したマルチネットワークポリシーの削除 リンクのコピーリンクがクリップボードにコピーされました!
namespace のマルチネットワークポリシーを削除できます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが存在する namespace で作業している。
手順
マルチネットワークポリシーオブジェクトを削除するには、以下のコマンドを入力します。
oc delete multi-networkpolicy <policy_name> -n <namespace>
$ oc delete multi-networkpolicy <policy_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<policy_name>
- マルチネットワークポリシーの名前を指定します。
<namespace>
- オプションのパラメーター。現在の namespace 以外の namespace にオブジェクトを定義した場合、namespace を指定してパラメーターを指定します。
成功した出力には、ポリシーオブジェクトの名前と
削除され
たステータスが一覧表示されます。
cluster-admin
権限で Web コンソールにログインする場合、YAML で、または Web コンソールの Actions メニューのポリシーから、クラスターの任意の namespace でネットワークポリシーを直接削除できます。
3.4.4.6. デフォルトのすべてのマルチネットワーク拒否ポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
このポリシーは、デプロイされた他のネットワークポリシーの設定によって許可されたネットワークトラフィックと、ホストネットワークを使用する Pod 間のトラフィック以外のすべての Pod 間ネットワークをブロックします。この手順では、my-project
namespace に deny-by-default
ポリシーを適用することにより、強力な拒否ポリシーを強制します。
トラフィック通信を許可する NetworkPolicy
カスタムリソース (CR) を設定しない場合、次のポリシーによってクラスター全体で通信問題が発生する可能性があります。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが適用される namespace で作業していること。
手順
すべての namespace におけるすべての Pod からの Ingress を拒否する
deny-by-default
ポリシーを定義する次の YAML を作成します。YAML をdeny-by-default.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ポリシーをデプロイする namespace を指定します。たとえば、
my-project
namespace です。 - 2
- namespace プロジェクトの名前と、それに続くネットワークアタッチメント定義名を指定します。
- 3
- このフィールドが空の場合、設定はすべての Pod と一致します。したがって、ポリシーは
my-project
namespace 内のすべての Pod に適用されます。 - 4
NetworkPolicy
が関連するルールタイプのリストを指定します。- 5
Ingress
専用のpolicyTypes
を指定します。- 6
Ingress
ルールを指定します。指定しない場合は、すべての Pod へのすべての着信トラフィックがドロップされます。
次のコマンドを入力して、ポリシーを適用します。
oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
3.4.4.7. 外部クライアントからのトラフィックを許可するマルチネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
deny-by-default
ポリシーを設定すると、外部クライアントからラベル app=web
を持つ Pod へのトラフィックを許可するポリシーの設定に進むことができます。
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
この手順に従って、パブリックインターネットから直接、またはロードバランサーを使用して Pod にアクセスすることにより、外部サービスを許可するポリシーを設定します。トラフィックは、ラベル app=web
を持つ Pod にのみ許可されます。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが適用される namespace で作業していること。
手順
パブリックインターネットからのトラフィックが直接、またはロードバランサーを使用して Pod にアクセスできるようにするポリシーを作成します。YAML を
web-allow-external.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。
oc apply -f web-allow-external.yaml
$ oc apply -f web-allow-external.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。このポリシーは、次の図に示すように、外部トラフィックを含むすべてのリソースからのトラフィックを許可します。
3.4.4.8. すべての namespace からアプリケーションへのトラフィックを許可するマルチネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
この手順に従って、すべての namespace 内のすべての Pod から特定のアプリケーションへのトラフィックを許可するポリシーを設定します。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが適用される namespace で作業していること。
手順
すべての namespace のすべての Pod から特定のアプリケーションへのトラフィックを許可するポリシーを作成します。YAML を
web-allow-all-namespaces.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デフォルトでは、ポリシーオブジェクトに
namespaceSelector
パラメーターを指定しないと、namespace は選択されません。これは、ポリシーがネットワークポリシーがデプロイされる namespace からのトラフィックのみを許可することを意味します。次のコマンドを入力して、ポリシーを適用します。
oc apply -f web-allow-all-namespaces.yaml
$ oc apply -f web-allow-all-namespaces.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
検証
次のコマンドを入力して、
default
namespace で Web サービスを開始します。oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpine
イメージをsecondary
namespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、サービスが要求を許可していることを確認します。
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.4.9. namespace からアプリケーションへのトラフィックを許可するマルチネットワークポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
cluster-admin
ロールを持つユーザーでログインしている場合、クラスター内の任意の namespace でネットワークポリシーを作成できます。
特定の namespace からラベル app=web
を持つ Pod へのトラフィックを許可するポリシーを設定するには、次の手順に従います。以下の場合にこれを行うことができます。
- 実稼働データベースへのトラフィックを、運用ワークロードがデプロイされている namespace のみに制限します。
- 特定の namespace にデプロイされた監視ツールを有効にして、現在の namespace からメトリクスをスクレイピングします。
前提条件
-
クラスターが、
mode: NetworkPolicy
が設定されたNetworkPolicy
オブジェクトをサポートするネットワークプラグイン (OVN-Kubernetes ネットワークプラグインなど) を使用している。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - マルチネットワークポリシーが適用される namespace で作業していること。
手順
ラベルが
purpose=production
の特定の namespace 内にあるすべての Pod からのトラフィックを許可するポリシーを作成します。YAML をweb-allow-prod.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。
oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功した出力には、ポリシーオブジェクトの名前と
作成された
ステータスが一覧表示されます。
検証
次のコマンドを入力して、
default
namespace で Web サービスを開始します。oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
prod
namespace を作成します。oc create namespace prod
$ oc create namespace prod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
prod
namespace にラベルを付けます。oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
dev
namespace を作成します。oc create namespace dev
$ oc create namespace dev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
dev
namespace にラベルを付けます。oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpine
イメージをdev
namespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、ブロックされた要求の理由を確認します。たとえば、予期される出力状態は
wget: download timed out
となっています。wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
alpine
イメージをprod
namespace にデプロイし、シェルを開始します。oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルで次のコマンドを実行し、リクエストが許可されていることを確認します。
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. セカンダリーネットワークから Pod を削除する リンクのコピーリンクがクリップボードにコピーされました!
クラスターユーザーとして、セカンダリーネットワークから Pod を削除できます。
3.5.1. セカンダリーネットワークから Pod を削除する リンクのコピーリンクがクリップボードにコピーされました!
Pod を削除することによってのみ、セカンダリーネットワークから Pod を削除できます。
前提条件
- セカンダリーネットワークが Pod にアタッチされている。
-
OpenShift CLI (
oc
) がインストールされている。 - クラスターにログインする。
手順
Pod を削除するには、以下のコマンドを入力します。
oc delete pod <name> -n <namespace>
$ oc delete pod <name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<name>
は Pod の名前です。 -
<namespace>
は Pod が含まれる namespace です。
-
3.6. セカンダリーネットワークの編集 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存のセカンダリーネットワークの設定を変更できます。
3.6.1. セカンダリーネットワークアタッチメントの定義を変更する リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、既存のセカンダリーネットワークに変更を加えることができます。セカンダリーネットワークにアタッチされている既存の Pod は更新されません。
前提条件
- クラスターのセカンダリーネットワークを設定した。
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
クラスターのセカンダリーネットワークを編集するには、次の手順を実行します。
以下のコマンドを実行し、デフォルトのテキストエディターで Cluster Network Operator (CNO) CR を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
additionalNetworks
コレクションで、セカンダリーネットワークを変更して更新します。 - 変更を保存し、テキストエディターを終了して、変更をコミットします。
オプション: 以下のコマンドを実行して、CNO が
NetworkAttachmentDefinition
オブジェクトを更新していることを確認します。<network-name>
は、表示するセカンダリーネットワークの名前に置き換えます。CNO がNetworkAttachmentDefinition
オブジェクトを更新して変更内容が反映されるまでに遅延が生じる可能性があります。oc get network-attachment-definitions <network-name> -o yaml
$ oc get network-attachment-definitions <network-name> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、以下のコンソールの出力は
net1
という名前のNetworkAttachmentDefinition
オブジェクトを表示します。oc get network-attachment-definitions net1 -o go-template='{{printf "%s\n" .spec.config}}'
$ oc get network-attachment-definitions net1 -o go-template='{{printf "%s\n" .spec.config}}' { "cniVersion": "0.3.1", "type": "macvlan", "master": "ens5", "mode": "bridge", "ipam": {"type":"static","routes":[{"dst":"0.0.0.0/0","gw":"10.128.2.1"}],"addresses":[{"address":"10.128.2.100/23","gateway":"10.128.2.1"}],"dns":{"nameservers":["172.30.0.10"],"domain":"us-west-2.compute.internal","search":["us-west-2.compute.internal"]}} }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. セカンダリーネットワークでの IP アドレス割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、セカンダリーネットワークの IP アドレスの割り当てを設定する方法の手順と情報を提供します。
3.7.1. ネットワークアタッチメントの IP アドレス割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
セカンダリーネットワークでは、Dynamic Host Configuration Protocol (DHCP) や静的割り当てなど、さまざまな割り当て方法をサポートする IP アドレス管理 (IPAM) CNI プラグインを使用して IP アドレスを割り当てることができます。
IP アドレスの動的割り当てを担当する DHCP IPAM CNI プラグインは、2 つの異なるコンポーネントを使用して動作します。
- CNI プラグイン: Kubernetes ネットワークスタックと統合して IP アドレスを要求および解放する役割を担います。
- DHCP IPAM CNI デーモン: 環境内の既存の DHCP サーバーと連携して IP アドレス割り当て要求を処理する DHCP イベントのリスナー。このデーモン自体は DHCP サーバーでは ありません。
IPAM 設定で type: dhcp
を必要とするネットワークの場合は、次の点を確認してください。
- DHCP サーバーが環境内で利用可能かつ実行されている。DHCP サーバーはクラスターの外部にあり、お客様の既存のネットワークインフラストラクチャーの一部である必要があります。
- DHCP サーバーが、ノードに IP アドレスを提供するように適切に設定されている。
環境内で DHCP サーバーが利用可能でない場合は、代わりに Whereabouts IPAM CNI プラグインを使用することを推奨します。Whereabouts CNI は、外部 DHCP サーバーを必要とせずに同様の IP アドレス管理機能を提供します。
外部 DHCP サーバーがない場合、または静的 IP アドレス管理が望ましい場合は、Whereabouts CNI プラグインを使用してください。Whereabouts プラグインには、古くなった IP アドレスの割り当てを管理するためのリコンサイラーデーモンが含まれています。
コンテナーの有効期間中、DHCP リースを定期的に更新する必要があるため、別のデーモンである DHCP IPAM CNI デーモンが必要です。DHCP IPAM CNI デーモンをデプロイするには、セカンダリーネットワーク設定の一部としてこのデーモンのデプロイをトリガーするように Cluster Network Operator (CNO) 設定を変更します。
3.7.1.1. 静的 IP アドレス割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の表は、静的 IP アドレスの割り当ての設定を説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
IPAM のアドレスタイプ。値 |
|
| 仮想インターフェイスに割り当てる IP アドレスを指定するオブジェクトの配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。 |
|
| Pod 内で設定するルートを指定するオブジェクトの配列です。 |
|
| オプション: DNS の設定を指定するオブジェクトの配列です。 |
addresses
の配列には、以下のフィールドのあるオブジェクトが必要です。
フィールド | 型 | 説明 |
---|---|---|
|
|
指定する IP アドレスおよびネットワーク接頭辞。たとえば、 |
|
| Egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。 |
フィールド | 型 | 説明 |
---|---|---|
|
|
CIDR 形式の IP アドレス範囲 ( |
|
| ネットワークトラフィックがルーティングされるゲートウェイ。 |
フィールド | 型 | 説明 |
---|---|---|
|
| DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。 |
|
|
ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが |
|
|
DNS ルックアップのクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例: |
静的 IP アドレス割り当ての設定例
3.7.1.2. 動的 IP アドレス (DHCP) 割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
Pod は、作成時に元の DHCP リースを取得します。リースは、クラスターで実行している最小限の DHCP サーバーデプロイメントで定期的に更新する必要があります。
イーサネットネットワークアタッチメントの場合、SR-IOV Network Operator は DHCP サーバーデプロイメントを作成しません。Cluster Network Operator は最小限の DHCP サーバーデプロイメントを作成します。
DHCP サーバーのデプロイメントをトリガーするには、以下の例にあるように Cluster Network Operator 設定を編集して shim ネットワーク割り当てを作成する必要があります。
shim ネットワーク割り当ての定義例
次の表は、DHCP による動的 IP アドレス割り当ての設定パラメーターを示しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
IPAM のアドレスタイプ。値 |
以下の JSON の例は、DHCP を使用した動的 IP アドレスの割り当ての設定を説明しています。
動的 IP アドレス (DHCP) 割り当ての設定例
{ "ipam": { "type": "dhcp" } }
{
"ipam": {
"type": "dhcp"
}
}
3.7.1.3. Whereabouts を使用した動的 IP アドレス割り当ての設定 リンクのコピーリンクがクリップボードにコピーされました!
Whereabouts CNI プラグインにより、DHCP サーバーを使用せずに IP アドレスをセカンダリーネットワークに動的に割り当てることができます。
また、Whereabouts CNI プラグインは、重複する IP アドレス範囲と、別々の NetworkAttachmentDefinition
CRD 内で同じ CIDR 範囲を複数回設定することをサポートしています。これにより、マルチテナント環境での柔軟性と管理機能が向上します。
3.7.1.3.1. 動的 IP アドレス設定オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下の表は、Whereabouts を使用した動的 IP アドレス割り当ての設定オブジェクトを説明しています。
フィールド | 型 | 説明 |
---|---|---|
|
|
IPAM のアドレスタイプ。値 |
|
| IP アドレスと範囲を CIDR 表記。IP アドレスは、この範囲内のアドレスから割り当てられます。 |
|
| オプション: CIDR 表記の IP アドレスと範囲 (0 個以上) のリスト。除外されたアドレス範囲内の IP アドレスは割り当てられません。 |
|
| オプション: 同じ範囲の IP アドレスを共有する場合でも、Pod の各グループまたはドメインが独自の IP アドレスセットを取得するようにします。このフィールドを設定することは、特にマルチテナント環境でネットワークを分離して整理しておく場合に重要です。 |
3.7.1.3.2. Whereabouts を使用した動的 IP アドレス割り当て設定 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、Whereabouts を使用する動的アドレス割り当て設定を示しています。
whereabouts 動的 IP アドレスの割り当て
3.7.1.3.3. IP アドレス範囲が重複する場合に Whereabouts を使用した動的 IP アドレス割り当て リンクのコピーリンクがクリップボードにコピーされました!
次の例は、マルチテナントネットワークで重複する IP アドレスの範囲を使用する、動的な IP アドレスの割り当てを示しています。
NetworkAttachmentDefinition 1
- 1
- オプション: 設定されている場合、
NetworkAttachmentDefinition 2
のnetwork_name
と一致する必要があります。
NetworkAttachmentDefinition 2
- 1
- オプション: 設定されている場合、
NetworkAttachmentDefinition 1
のnetwork_name
と一致する必要があります。
3.7.1.4. whereabouts-reconciler デーモンセットの作成 リンクのコピーリンクがクリップボードにコピーされました!
Whereabouts reconciler は、Whereabouts IP アドレス管理 (IPAM) ソリューションを使用して、クラスター内の Pod の動的 IP アドレス割り当てを管理します。これにより、各 Pod が指定の IP アドレス範囲から一意の IP アドレスを確実に取得します。また、Pod が削除またはスケールダウンされた場合の IP アドレスの解放も処理します。
動的 IP アドレスの割り当てには、NetworkAttachmentDefinition
カスタムリソース定義 (CRD) を使用することもできます。
whereabouts-reconciler
デーモンセットは、Cluster Network Operator を通じてセカンダリーネットワークを設定するときに自動的に作成されます。YAML マニフェストからセカンダリーネットワークを設定する場合、これは自動的には作成されません。
whereabouts-reconciler
デーモンセットのデプロイをトリガーするには、Cluster Network Operator のカスタムリソース (CR) ファイルを編集して、whereabouts-shim
ネットワーク割り当てを手動で作成する必要があります。
whereabouts-reconciler
デーモンセットをデプロイするには、次の手順を使用します。
手順
以下のコマンドを実行して、
Network.operator.openshift.io
カスタムリソース (CR) を編集します。oc edit network.operator.openshift.io cluster
$ oc edit network.operator.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で展開されている YAML の
additionalNetworks
セクションを、カスタムリソース (CR) のspec
定義内に含めます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルを保存し、テキストエディターを編集します。
次のコマンドを実行して、
whereabouts-reconciler
デーモンセットが正常にデプロイされたことを確認します。oc get all -n openshift-multus | grep whereabouts-reconciler
$ oc get all -n openshift-multus | grep whereabouts-reconciler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7.1.5. Whereabouts IP リコンサイラーのスケジュールの設定 リンクのコピーリンクがクリップボードにコピーされました!
Whereabouts IPAM CNI プラグインは、IP リコンサイラーを毎日実行します。このプロセスは、IP が枯渇して新しい Pod に IP が割り当てられなくなる状態を避けるために、完了せずに残っている IP 割り当てをクリーンアップします。
IP リコンサイラーを実行する頻度を変更するには、次の手順を使用します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
whereabouts-reconciler
デーモンセットがデプロイされており、whereabouts-reconciler
Pod が起動して実行されている。
手順
次のコマンドを実行して、IP リコンサイラー用の特定の cron 式を使用し、
openshift-multus
namespace にwhereabouts-config
という名前のConfigMap
オブジェクトを作成します。oc create configmap whereabouts-config -n openshift-multus --from-literal=reconciler_cron_expression="*/15 * * * *"
$ oc create configmap whereabouts-config -n openshift-multus --from-literal=reconciler_cron_expression="*/15 * * * *"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この cron 式は、IP リコンサイラーを 15 分ごとに実行するよう指定します。この式は固有の要件に基づいて調整してください。
注記whereabouts-reconciler
デーモンセットは、5 つのアスタリスクを含む cron 式パターンのみを使用できます。秒を表すために使用される 6 番目のアスタリスクは、現在サポートされていません。次のコマンドを実行して、
openshift-multus
namespace 内のwhereabouts-reconciler
デーモンセットおよび Pod に関連するリソースに関する情報を取得します。oc get all -n openshift-multus | grep whereabouts-reconciler
$ oc get all -n openshift-multus | grep whereabouts-reconciler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、設定した間隔で
whereabouts-reconciler
Pod が IP リコンサイラーを実行していることを確認します。oc -n openshift-multus logs whereabouts-reconciler-2p7hw
$ oc -n openshift-multus logs whereabouts-reconciler-2p7hw
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7.1.6. デュアルスタック IP アドレスを動的に割り当てる設定の作成 リンクのコピーリンクがクリップボードにコピーされました!
デュアルスタックの IP アドレスの割り当ては、ipRanges
パラメーターで設定できます。
- IPv4 アドレス
- IPv6 アドレス
- 複数の IP アドレスの割り当て
手順
-
type
をwhereabouts
に設定します。 以下の例のように、
ipRanges
を使用して IP アドレスを割り当てます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ネットワークを Pod にアタッチします。詳細は、「セカンダリーネットワークへの Pod の追加」を参照してください。
- すべての IP アドレスが割り当てられていることを確認します。
以下のコマンドを実行して、IP アドレスがメタデータとして割り当てられることを確認します。
$ oc exec -it mypod -- ip a
$ oc exec -it mypod -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.8. コンテナーネットワーク namespace での master インターフェイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、master インターフェイスに基づいて MAC-VLAN、IP-VLAN、および VLAN サブインターフェイスを作成および管理する方法の手順と情報を提供します。
3.8.1. コンテナーネットワーク namespace での master インターフェイスの設定について リンクのコピーリンクがクリップボードにコピーされました!
コンテナー namespace に存在する master
インターフェイスに基づいて、MAC-VLAN、IP-VLAN、または VLAN サブインターフェイスを作成できます。別のネットワークアタッチメント定義 CRD で、Pod ネットワーク設定の一部として master
インターフェイスを作成することもできます。
コンテナー namespace の master
インターフェイスを使用するには、NetworkAttachmentDefinition
CRD のサブインターフェイス設定に存在する linkInContainer
パラメーターに true
を指定する必要があります。
3.8.1.1. SR-IOV VF 上で複数の VLAN を作成する リンクのコピーリンクがクリップボードにコピーされました!
この機能を利用するユースケースの例として、SR-IOV VF に基づいて複数の VLAN を作成することが挙げられます。これを行うには、まず SR-IOV ネットワークを作成し、次に VLAN インターフェイスのネットワーク割り当てを定義します。
次の例は、この図に示されているセットアップを設定する方法を示しています。
図3.1 VLAN の作成
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 - SR-IOV Network Operator がインストールされている。
手順
次のコマンドを使用して、Pod をデプロイする専用のコンテナー namespace を作成します。
oc new-project test-namespace
$ oc new-project test-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SR-IOV ノードポリシーを作成します。
SriovNetworkNodePolicy
オブジェクトを作成してから、YAML をsriov-node-network-policy.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記deviceType: netdevice
を設定した SR-IOV ネットワークノードポリシーの設定例は、Mellanox ネットワークインターフェイスカード (NIC) 向けに特別に調整されています。以下のコマンドを実行して YAML を適用します。
oc apply -f sriov-node-network-policy.yaml
$ oc apply -f sriov-node-network-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ノードの再起動が必要なため、YAML の適用には時間がかかる場合があります。
SR-IOV ネットワークを作成します。
次の CR の例のように、追加のセカンダリー SR-IOV ネットワーク割り当て用の
SriovNetwork
カスタムリソース (CR) を作成します。YAML をsriov-network-attachment.yaml
ファイルとして保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して YAML を適用します。
oc apply -f sriov-network-attachment.yaml
$ oc apply -f sriov-network-attachment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
VLAN セカンダリーネットワークを作成します。
以下の YAML の例を使用して、
vlan100-additional-network-configuration.yaml
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f vlan100-additional-network-configuration.yaml
$ oc apply -f vlan100-additional-network-configuration.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
前に指定したネットワークを使用して、Pod 定義を作成します。
次の YAML の例を使用して、
pod-a.yaml
という名前のファイルを作成します。注記以下のマニフェストには 2 つのリソースが含まれています。
- セキュリティーラベルのある namespace
- 適切なネットワークアノテーションを含む Pod 定義
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- VLAN インターフェイスの
master
として使用される名前。
以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f pod-a.yaml
$ oc apply -f pod-a.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、
test-namespace
内のnginx-pod
に関する詳細情報を取得します。oc describe pods nginx-pod -n test-namespace
$ oc describe pods nginx-pod -n test-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.8.1.2. コンテナー namespace のブリッジマスターインターフェイスをベースにしてサブインターフェイスを作成する リンクのコピーリンクがクリップボードにコピーされました!
コンテナー namespace に存在するブリッジ master
インターフェイスに基づいてサブインターフェイスを作成できます。サブインターフェイスの作成は、他のタイプのインターフェイスに適用できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとして OpenShift Container Platform クラスターにログインしている。
手順
次のコマンドを入力して、Pod のデプロイ先となる専用のコンテナー namespace を作成します。
oc new-project test-namespace
$ oc new-project test-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の YAML の例を使用して、
bridge-nad.yaml
という名前のブリッジNetworkAttachmentDefinition
カスタムリソース定義 (CRD) ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
NetworkAttachmentDefinition
CRD を OpenShift Container Platform クラスターに適用します。oc apply -f bridge-nad.yaml
$ oc apply -f bridge-nad.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
NetworkAttachmentDefinition
CRD が正常に作成されたことを確認します。oc get network-attachment-definitions
$ oc get network-attachment-definitions
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE bridge-network 15s
NAME AGE bridge-network 15s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の YAML の例を使用して、IPVLAN セカンダリーネットワーク設定用に
ipvlan-additional-network-configuration.yaml
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f ipvlan-additional-network-configuration.yaml
$ oc apply -f ipvlan-additional-network-configuration.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
NetworkAttachmentDefinition
CRD が正常に作成されたことを確認します。oc get network-attachment-definitions
$ oc get network-attachment-definitions
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE bridge-network 87s ipvlan-net 9s
NAME AGE bridge-network 87s ipvlan-net 9s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の YAML の例を使用して、Pod 定義用に
pod-a.yaml
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- IPVLAN インターフェイスの
master
として使用する名前を指定します。
以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f pod-a.yaml
$ oc apply -f pod-a.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを使用して、Pod が実行されていることを確認します。
oc get pod -n test-namespace
$ oc get pod -n test-namespace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE pod-a 1/1 Running 0 2m36s
NAME READY STATUS RESTARTS AGE pod-a 1/1 Running 0 2m36s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
test-namespace
内のpod-a
リソースに関するネットワークインターフェイス情報を表示します。oc exec -n test-namespace pod-a -- ip a
$ oc exec -n test-namespace pod-a -- ip a
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、ネットワークインターフェイス
net2
が物理インターフェイスnet1
に関連付けられていることを示しています。
3.9. 追加ネットワークの削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、追加のネットワーク割り当てを削除できます。
3.9.1. セカンダリーネットワークアタッチメントの定義を削除する リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、セカンダリーネットワークを OpenShift Container Platform クラスターから削除できます。セカンダリーネットワークは、アタッチされているどの Pod からも削除されません。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
クラスターからセカンダリーネットワークを削除するには、次の手順を実行します。
以下のコマンドを実行して、デフォルトのテキストエディターで Cluster Network Operator (CNO) を編集します。
oc edit networks.operator.openshift.io cluster
$ oc edit networks.operator.openshift.io cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 削除するセカンダリーネットワークの
additionalNetworks
コレクションから CNO が作成した設定を削除して、CR を変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
additionalNetworks
コレクションのセカンダリーネットワークアタッチメントのみの設定マッピングを削除する場合、空のコレクションを指定する必要があります。
クラスターのネットワークからネットワークアタッチメント定義を削除するには、次のコマンドを入力します。
oc delete net-attach-def <name_of_NAD>
$ oc delete net-attach-def <name_of_NAD>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<name_of_NAD>
は、ネットワークアタッチメント定義の名前に置き換えます。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
オプション: 次のコマンドを実行して、セカンダリーネットワーク CR が削除されたことを確認します。
oc get network-attachment-definition --all-namespaces
$ oc get network-attachment-definition --all-namespaces
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 Virtual Routing and Forwarding リンクのコピーリンクがクリップボードにコピーされました!
4.1. Virtual Routing and Forwarding について リンクのコピーリンクがクリップボードにコピーされました!
Virtual Routing and Forwarding (VRF) デバイスと IP ルールを組み合わせることで、Virtual Routing and Forwarding ドメインを作成できます。VRF は、CNF で必要なパーミッションの数を減らし、セカンダリーネットワークのネットワークトポロジーの可視性を強化します。VRF はマルチテナンシー機能を提供するために使用されます。たとえば、この場合、各テナントには固有のルーティングテーブルがあり、異なるデフォルトゲートウェイが必要です。
プロセスは、ソケットを VRF デバイスにバインドできます。バインドされたソケット経由のパケットは、VRF デバイスに関連付けられたルーティングテーブルを使用します。VRF の重要な機能として、これは OSI モデルレイヤー 3 以上にのみ影響を与えるため、LLDP などの L2 ツールは影響を受けません。これにより、ポリシーベースのルーティングなどの優先度の高い IP ルールが、特定のトラフィックを転送する VRF デバイスルールよりも優先されます。
4.1.1. Telecommunications Operator に関する Pod のセカンダリーネットワークの利点 リンクのコピーリンクがクリップボードにコピーされました!
通信のユースケースでは、各 CNF が同じアドレス空間を共有する複数の異なるネットワークに接続される可能性があります。これらのセカンダリーネットワークは、クラスターのメインネットワーク CIDR と競合する可能性があります。CNI VRF プラグインを使用すると、ネットワーク機能は、同じ IP アドレスを使用して異なるユーザーのインフラストラクチャーに接続でき、複数の異なるお客様の分離された状態を維持します。IP アドレスは OpenShift Container Platform の IP スペースと重複します。CNI VRF プラグインは、CNF で必要なパーミッションの数も減らし、セカンダリーネットワークのネットワークトポロジーの可視性を高めます。
第5章 VRF へのセカンダリーネットワークの割り当て リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、CNI VRF プラグインを使用して、Virtual Routing and Forwarding (VRF) ドメインのセカンダリーネットワークを設定できます。このプラグインが作成する仮想ネットワークは、指定した物理インターフェイスに関連付けられます。
VRF インスタンスでセカンダリーネットワークを使用すると、次の利点があります。
- ワークロードの分離
- セカンダリーネットワークの VRF インスタンスを設定して、ワークロードトラフィックを分離します。
- セキュリティーの向上
- VRF ドメイン内の分離されたネットワークパスを通じて、セキュリティーを向上させます。
- マルチテナンシーのサポート
- 各テナントの VRF ドメイン内で、一意のルーティングテーブルを使用したネットワークセグメンテーションを通じて、マルチテナントをサポートします。
VRF を使用するアプリケーションは、特定のデバイスに対してバインドする必要があります。一般的な使用方法として、ソケットに SO_BINDTODEVICE
オプションを使用できます。SO_BINDTODEVICE
オプションは、渡されたインターフェイス名 (例: eth1
) で指定されたデバイスにソケットをバインドします。SO_BINDTODEVICE
オプションを使用するには、アプリケーションに CAP_NET_RAW
機能が必要です。
ip vrf exec
コマンドを使用した VRF の使用は、OpenShift Container Platform Pod ではサポートされません。VRF を使用するには、アプリケーションを VRF インターフェイスに直接バインドします。
5.1. CNI VRF プラグインを使用してセカンダリーネットワークアタッチメントを作成する リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は、セカンダリーネットワークの定義を管理します。作成するセカンダリーネットワークを指定する場合、CNO は NetworkAttachmentDefinition
カスタムリソース (CR) を自動的に作成します。
Cluster Network Operator が管理する NetworkAttachmentDefinition
CR は編集しないでください。これを行うと、セカンダリーネットワーク上のネットワークトラフィックが中断される可能性があります。
CNI VRF プラグインでセカンダリーネットワークアタッチメントを作成するには、以下の手順を実行します。
前提条件
- OpenShift Container Platform CLI (oc) をインストールします。
- cluster-admin 権限を持つユーザーとして OpenShift クラスターにログインします。
手順
以下のサンプル CR のように、セカンダリーネットワーク割り当て用の
Network
カスタムリソース (CR) を作成し、追加ネットワークのrawCNIConfig
設定を挿入します。YAML をadditional-network-attachment.yaml
ファイルとして保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
plugins
は一覧である必要があります。リストの最初の項目は、VRF ネットワークのベースとなるセカンダリーネットワークである必要があります。一覧の 2 つ目の項目は、VRF プラグイン設定です。- 2
type
はvrf
に設定する必要があります。- 3
vrfname
は、インターフェイスが割り当てられた VRF の名前です。これが Pod に存在しない場合は作成されます。- 4
- オプション:
table
はルーティングテーブル ID です。デフォルトで、tableid
パラメーターが使用されます。これが指定されていない場合、CNI は空のルーティングテーブル ID を VRF に割り当てます。
注記VRF は、リソースが
netdevice
タイプの場合にのみ正常に機能します。Network
リソースを作成します。oc create -f additional-network-attachment.yaml
$ oc create -f additional-network-attachment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、CNO が
NetworkAttachmentDefinition
CR を作成していることを確認します。<namespace>
を、ネットワーク割り当ての設定時に指定した namespace に置き換えます (例:additional-network-1
)。oc get network-attachment-definitions -n <namespace>
$ oc get network-attachment-definitions -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME AGE additional-network-1 14m
NAME AGE additional-network-1 14m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記CNO が CR を作成するまでに遅延が生じる可能性があります。
検証
Pod を作成し、その Pod を VRF インスタンスを使用してセカンダリーネットワークに割り当てます。
Pod
リソースを定義する YAML ファイルを作成します。pod-additional-net.yaml
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- VRF インスタンスを持つセカンダリーネットワークの名前を指定します。
次のコマンドを実行して、
Pod
リソースを作成します。oc create -f pod-additional-net.yaml
$ oc create -f pod-additional-net.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
pod/test-pod created
pod/test-pod created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Pod ネットワークアタッチメントが VRF セカンダリーネットワークに接続されていることを確認します。Pod とのリモートセッションを開始し、次のコマンドを実行します。
ip vrf show
$ ip vrf show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Name Table ----------------------- vrf-1 1001
Name Table ----------------------- vrf-1 1001
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VRF インターフェイスがセカンダリーインターフェイスのコントローラーであることを確認します。
ip link
$ ip link
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode
5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Legal Notice
リンクのコピーリンクがクリップボードにコピーされました!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.