OVN-Kubernetes ネットワークプラグイン
OpenShift Container Platform の OVN-Kubernetes ネットワークプラグインの詳細な設定およびトラブルシューティング
概要
第1章 OVN-Kubernetes ネットワークプラグインについて リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターは、Pod およびサービスネットワークに仮想化ネットワークを使用します。
Red Hat OpenShift Networking の一部である OVN-Kubernetes ネットワークプラグインは、OpenShift Container Platform のデフォルトのネットワークプロバイダーです。OVN-Kubernetes は Open Virtual Network (OVN) をベースとしており、オーバーレイベースのネットワーク実装を提供します。OVN-Kubernetes プラグインを使用するクラスターは、各ノードで Open vSwitch (OVS) も実行します。OVN は、宣言ネットワーク設定を実装するように各ノードで OVS を設定します。
OVN-Kubernetes は、OpenShift Container Platform および単一ノードの OpenShift デプロイメントのデフォルトのネットワークソリューションです。
OVS プロジェクトから生まれた OVN-Kubernetes は、オープンフロールールなど、同じコンストラクトの多くを使用して、パケットがネットワークを通過する方法を決定します。詳細は、Open Virtual Network の Web サイト を参照してください。
OVN-Kubernetes は、仮想ネットワーク設定を OpenFlow
ルールに変換する OVS 用の一連のデーモンです。OpenFlow
は、ネットワークスイッチおよびルーターと通信するためのプロトコルです。ネットワークデバイス上のネットワークトラフィックのフローをリモートで制御する手段を提供し、ネットワーク管理者がネットワークトラフィックのフローを設定、管理、および監視できるようにします。
OVN-Kubernetes は、OpenFlow
では利用できない高度な機能をさらに提供します。OVN は、分散仮想ルーティング、分散論理スイッチ、アクセス制御、Dynamic Host Configuration Protocol (DHCP)、および DNS をサポートしています。OVN は、オープンフローと同等のロジックフロー内に分散仮想ルーターを実装します。たとえば、ネットワーク上の DHCP サーバーに DHCP 要求を送信する Pod がある場合、要求内のロジックフロールールによって OVN-Kubernetes がパケットを処理することにより、サーバーがゲートウェイ、DNS サーバー、IP アドレスなどの情報で応答できるようになります。
OVN-Kubernetes は、各ノードでデーモンを実行します。すべてのノードで実行されるデータベースおよび OVN コントローラー用のデーモンセットがあります。OVN コントローラーは、ネットワークプロバイダーの機能 (Egress IP、ファイアウォール、ルーター、ハイブリッドネットワーク、IPSEC 暗号化、IPv6、ネットワークポリシー、ネットワークポリシーログ、ハードウェアオフロード、およびマルチキャスト) をサポートするために、ノード上で Open vSwitch デーモンをプログラムします。
1.1. OVN-Kubernetes の目的 リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes ネットワークプラグインは、Open Virtual Network (OVN) を使用してネットワークトラフィックフローを管理する、オープンソースのフル機能の Kubernetes CNI プラグインです。OVN はコミュニティーで開発され、ベンダーに依存しないネットワーク仮想化ソリューションです。OVN-Kubernetes ネットワークプラグインは次のテクノロジーを使用します。
- ネットワークトラフィックフローを管理するための OVN。
- Ingress ルールおよび Egress ルールを含む Kubernetes ネットワークポリシーのサポートとログ。
- ノード間にオーバーレイネットワークを作成するための、Virtual Extensible LAN (VXLAN) ではなく、Generic Network Virtualization Encapsulation (Geneve) プロトコル。
OVN-Kubernetes ネットワークプラグインは、次の機能をサポートしています。
- Linux と Microsoft Windows の両方のワークロードを実行できるハイブリッドクラスター。この環境は ハイブリッドネットワーキング と呼ばれます。
- ホストの中央処理装置 (CPU) から互換性のあるネットワークカードおよびデータ処理装置 (DPU) へのネットワークデータ処理のオフロード。これは ハードウェアオフロード と呼ばれます。
- ベアメタル、VMware vSphere、IBM Power®、IBM Z®、および Red Hat OpenStack Platform (RHOSP) プラットフォーム上の IPv4 プライマリーデュアルスタックネットワーク。
- RHOSP およびベアメタルプラットフォーム上の IPv6 シングルスタックネットワーク。
- ベアメタル、VMware vSphere、または RHOSP プラットフォーム上で実行しているクラスター用の IPv6 プライマリーデュアルスタックネットワーク。
- Egress ファイアウォールデバイスと Egress IP アドレス。
- リダイレクトモードで動作する Egress ルーターデバイス。
- クラスター内通信の IPsec 暗号化。
1.2. OVN-Kubernetes IPv6 とデュアルスタックの制限 リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes ネットワークプラグインには、次の制限があります。
-
クラスターの
MachineConfig
カスタムリソース(CR)のkernelArgument
セクションでipv6.disable
パラメーターを1
に設定すると、OVN-Kubernetes Pod はCrashLoopBackOff
状態になります。さらに、ネットワーク Operator がDegraded
状態のままであるため、クラスターを新しいバージョンの OpenShift Container Platform に更新すると失敗します。Red Hat は、クラスターの IPv6 アドウスの無効化をサポートしていないため、ipv6.disable
パラメーターを1
に設定しないでください。
デュアルスタックネットワークに設定されたクラスターでは、IPv4 と IPv6 の両方のトラフィックがデフォルトゲートウェイとして同じネットワークインターフェイスを使用する必要があります。この要件が満たされない場合には、
ovnkube-node
デーモンセットのホストにある Pod は、CrashLoopBackOff
状態になります。oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml
のようなコマンドで Pod を表示すると、以下の出力のように、status
フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。I1006 16:09:50.985852 60651 helper_linux.go:73] Found default gateway interface br-ex 192.168.127.1 I1006 16:09:50.985923 60651 helper_linux.go:73] Found default gateway interface ens4 fe80::5054:ff:febe:bcd4 F1006 16:09:50.985939 60651 ovnkube.go:130] multiple gateway interfaces detected: br-ex ens4
I1006 16:09:50.985852 60651 helper_linux.go:73] Found default gateway interface br-ex 192.168.127.1 I1006 16:09:50.985923 60651 helper_linux.go:73] Found default gateway interface ens4 fe80::5054:ff:febe:bcd4 F1006 16:09:50.985939 60651 ovnkube.go:130] multiple gateway interfaces detected: br-ex ens4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 唯一の解決策は、両方の IP ファミリーがデフォルトゲートウェイに同じネットワークインターフェイスを使用するように、ホストネットワークを再設定することです。
デュアルスタックネットワーク用に設定されたクラスターの場合、IPv4 と IPv6 の両方のルーティングテーブルにデフォルトゲートウェイが含まれている必要があります。この要件が満たされない場合には、
ovnkube-node
デーモンセットのホストにある Pod は、CrashLoopBackOff
状態になります。oc get pod -n openshift-ovn-kubernetes -l app=ovnkube-node -o yaml
のようなコマンドで Pod を表示すると、以下の出力のように、status
フィールドにデフォルトゲートウェイに関する複数のメッセージが表示されます。I0512 19:07:17.589083 108432 helper_linux.go:74] Found default gateway interface br-ex 192.168.123.1 F0512 19:07:17.589141 108432 ovnkube.go:133] failed to get default gateway interface
I0512 19:07:17.589083 108432 helper_linux.go:74] Found default gateway interface br-ex 192.168.123.1 F0512 19:07:17.589141 108432 ovnkube.go:133] failed to get default gateway interface
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 唯一の解決策として、両方の IP ファミリーにデフォルトゲートウェイが含まれるようにホストネットワークを再設定できます。
1.3. セッションアフィニティー リンクのコピーリンクがクリップボードにコピーされました!
セッションアフィニティーは、Kubernetes Service
オブジェクトに適用される機能です。<service_VIP>:<Port> に接続するたびに、トラフィックが常に同じバックエンドに負荷分散されるようにする場合は、セッションアフィニティー を使用できます。クライアントの IP アドレスに基づいてセッションアフィニティーを設定する方法など、詳細は、セッションアフィニティー を参照してください。
セッションアフィニティーのスティッキタイムアウト
OpenShift Container Platform の OVN-Kubernetes ネットワークプラグインは、最後のパケットに基づいて、クライアントからのセッションのスティッキタイムアウトを計算します。たとえば、curl
コマンドを 10 回実行すると、スティッキーセッションタイマーは最初のパケットではなく 10 番目のパケットから開始します。その結果、クライアントが継続的にサービスに接続している場合でも、セッションがタイムアウトすることはありません。タイムアウトは、timeoutSeconds
パラメーターで設定された時間、サービスがパケットを受信しなかった場合に開始されます。
第2章 OVN-Kubernetes のアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
2.1. OVN-Kubernetes のアーキテクチャーの紹介 リンクのコピーリンクがクリップボードにコピーされました!
次の図は、OVN-Kubernetes のアーキテクチャーを示しています。
図2.1 OVK-Kubernetes のアーキテクチャー
主なコンポーネントは次のとおりです。
- Cloud Management System (CMS) - OVN 統合用の CMS 固有のプラグインを提供する OVN 用のプラットフォーム固有のクライアント。このプラグインは、CMS 固有の形式で CMS 設定データベースに格納されているクラウド管理システムの論理ネットワーク設定の概念を、OVN が理解できる中間表現に変換します。
-
OVN ノースバウンドデータベース (
nbdb
) コンテナー - CMS プラグインによって渡された論理ネットワーク設定を格納します。 -
OVN サウスバウンドデータベース (
sbdb
) コンテナー - 各ノードの Open vSwitch (OVS) システムの物理および論理ネットワーク設定状態を、それらをバインドするテーブルを含めて格納します。 -
OVN North デーモン (
ovn-northd
) - これは、nbdb
コンテナーとsbdb
コンテナーの間の仲介クライアントです。これは、論理ネットワーク設定を、nbdb
コンテナーから取得した従来のネットワーク概念の観点から、その下のsbdb
コンテナーの論理データパスフローに変換します。ovn-northd
デーモンのコンテナー名はNorthd
で、ovnkube-node
Pod 内で実行されます。 -
ovn-controller -
sbdb
コンテナーに必要な情報または更新のために、OVS およびハイパーバイザーと対話する OVN エージェントです。ovn-controller
はsbdb
コンテナーから論理フローを読み取り、それらをOpenFlow
フローに変換して、ノードの OVS デーモンに送信します。コンテナー名はovn-controller
で、ovnkube-node
Pod で実行されます。
OVN Northd、ノースバウンドデータベース、およびサウスバウンドデータベースはクラスター内の各ノードで実行され、主にそのノードにローカルな情報を格納して処理します。
OVN ノースバウンドデータベースには、クラウド管理システム (CMS) によって渡された論理ネットワーク設定があります。OVN ノースバウンドデータベースには、ネットワークの現在の望ましい状態が含まれており、論理ポート、論理スイッチ、論理ルーターなどのコレクションとして提示されます。ovn-northd
(northd
コンテナー) は、OVN ノースバウンドデータベースと OVN サウスバウンドデータベースに接続します。これは、論理ネットワーク設定を、OVN ノースバウンドデータベースから取得した従来のネットワーク概念の観点から、OVN サウスバウンドデータベースの論理データパスフローに変換します。
OVN サウスバウンドデータベースには、ネットワークの物理的および論理的表現と、それらをリンクするバインディングテーブルがあります。これには、ノードのシャーシ情報と、クラスター内の他のノードに接続するために必要なリモート中継スイッチポートなどの他の設定要素が含まれます。OVN サウスバウンドデータベースには、すべてのロジックフローも含まれています。このロジックフローは、各ノードで実行される ovn-controller
プロセスと共有され、ovn-controller
はそれらを Open vSwitch
(OVS) をプログラムする OpenFlow
ルールに変換します。
Kubernetes コントロールプレーンノードでは、別々のノードに 2 つの ovnkube-control-plane
Pod が含まれています。これらの Pod は、クラスター内の各ノードに一元的な IP アドレス管理 (IPAM) 割り当てを実行します。どの時点でも、1 つの ovnkube-control-plane
Pod がリーダーです。
2.2. OVN-Kubernetes プロジェクト内のすべてのリソースの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes プロジェクトで実行されるリソースとコンテナーを見つけることは、OVN-Kubernetes ネットワークの実装を理解するのに役立ちます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
次のコマンドを実行して、OVN-Kubernetes プロジェクト内のすべてのリソース、エンドポイント、および
ConfigMap
を取得します。oc get all,ep,cm -n openshift-ovn-kubernetes
$ oc get all,ep,cm -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター内の各ノードには、1 つの
ovnkube-node
Pod があります。ovnkube-config
config map には、OpenShift Container Platform OVN-Kubernetes 設定が含まれています。次のコマンドを実行して、
ovnkube-node
Pod 内のすべてのコンテナーを一覧表示します。oc get pods ovnkube-node-bcvts -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
$ oc get pods ovnkube-node-bcvts -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
ovn-controller ovn-acl-logging kube-rbac-proxy-node kube-rbac-proxy-ovn-metrics northd nbdb sbdb ovnkube-controller
ovn-controller ovn-acl-logging kube-rbac-proxy-node kube-rbac-proxy-ovn-metrics northd nbdb sbdb ovnkube-controller
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-node
Pod は、複数のコンテナーで構成されています。これは、ノースバウンドデータベース (nbdb
コンテナー)、サウスバウンドデータベース (sbdb
コンテナー)、ノースデーモン (northd
コンテナー)、ovn-controller
およびovnkube-controller
コンテナーをホストします。ovnkube-controller
コンテナーは、Pod、Egress IP、namespace、サービス、エンドポイント、Egress ファイアウォール、ネットワークポリシーなどの API オブジェクトを監視します。また、そのノードの利用可能なサブネットプールから Pod IP への割り当ても行います。次のコマンドを実行して、
ovnkube-control-plane
Pod 内のすべてのコンテナーをリスト表示します。oc get pods ovnkube-control-plane-65c6f55656-6d55h -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
$ oc get pods ovnkube-control-plane-65c6f55656-6d55h -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
kube-rbac-proxy ovnkube-cluster-manager
kube-rbac-proxy ovnkube-cluster-manager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-control-plane
Pod には、各 OpenShift Container Platform ノードに常駐するコンテナー (ovnkube-cluster-manager
) があります。ovnkube-cluster-manager
コンテナーは、Pod サブネット、トランジットスイッチサブネット IP、およびジョインスイッチサブネット IP をクラスター内の各ノードに割り当てます。kube-rbac-proxy
コンテナーはovnkube-cluster-manager
コンテナーのメトリックを監視します。
2.3. OVN-Kubernetes ノースバウンドデータベースの内容の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
各ノードは、そのノード上の ovnkube-node
Pod で実行されている ovnkube-controller
コンテナーによって制御されます。OVN 論理ネットワークエンティティーを理解するには、そのノード上の ovnkube-node
Pod 内でコンテナーとして実行されているノースバウンドデータベースを調べて、表示するノード内にどのようなオブジェクトがあるかを確認する必要があります。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
クラスター内で ovn nbctl
または sbctl
コマンドを実行するには、関連するノード上の nbdb
または sbdb
コンテナーにリモートシェルを開く必要があります。
次のコマンドを実行して Pod をリスト表示します。
oc get po -n openshift-ovn-kubernetes
$ oc get po -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Pod とノード情報をリストするには、次のコマンドを実行します。
oc get pods -n openshift-ovn-kubernetes -owide
$ oc get pods -n openshift-ovn-kubernetes -owide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Pod に移動してノースバウンドデータベースを確認します。
oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2
$ oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ノースバウンドデータベース内のすべてのオブジェクトを表示します。
ovn-nbctl show
$ ovn-nbctl show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は長すぎてここにリストできません。リストには、NAT ルール、論理スイッチ、ロードバランサーなどが含まれます。
次の任意のコマンドのいくつかを使用すると、特定のコンポーネントに絞り込むことができます。
次のコマンドを実行して、論理ルーターのリストを表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c northd -- ovn-nbctl lr-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c northd -- ovn-nbctl lr-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
45339f4f-7d0b-41d0-b5f9-9fca9ce40ce6 (GR_ci-ln-t487nnb-72292-mdcnq-master-2) 96a0a0f0-e7ed-4fec-8393-3195563de1b8 (ovn_cluster_router)
45339f4f-7d0b-41d0-b5f9-9fca9ce40ce6 (GR_ci-ln-t487nnb-72292-mdcnq-master-2) 96a0a0f0-e7ed-4fec-8393-3195563de1b8 (ovn_cluster_router)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この出力から、各ノードにルーターと
ovn_cluster_router
があることがわかります。次のコマンドを実行して、論理スイッチのリストを表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl ls-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl ls-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
bdd7dc3d-d848-4a74-b293-cc15128ea614 (ci-ln-t487nnb-72292-mdcnq-master-2) b349292d-ee03-4914-935f-1940b6cb91e5 (ext_ci-ln-t487nnb-72292-mdcnq-master-2) 0aac0754-ea32-4e33-b086-35eeabf0a140 (join) 992509d7-2c3f-4432-88db-c179e43592e5 (transit_switch)
bdd7dc3d-d848-4a74-b293-cc15128ea614 (ci-ln-t487nnb-72292-mdcnq-master-2) b349292d-ee03-4914-935f-1940b6cb91e5 (ext_ci-ln-t487nnb-72292-mdcnq-master-2) 0aac0754-ea32-4e33-b086-35eeabf0a140 (join) 992509d7-2c3f-4432-88db-c179e43592e5 (transit_switch)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この出力から、各ノードの ext スイッチに加えて、ノード名自体を持つスイッチと結合スイッチがあることがわかります。
次のコマンドを実行して、ロードバランサーのリストを表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl lb-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl lb-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この出力 (一部省略あり) から、多くの OVN-Kubernetes ロードバランサーがあることがわかります。OVN-Kubernetes のロードバランサーはサービスの表現です。
次のコマンドを実行して、コマンド
ovn-nbctl
で使用可能なオプションを表示します。oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb ovn-nbctl --help
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb ovn-nbctl --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. ノースバウンドデータベースの内容を調べるための ovn-nbctl のコマンドライン引数 リンクのコピーリンクがクリップボードにコピーされました!
次の表に、ノースバウンドデータベースの内容を調べるために ovn-nbctl
で使用できるコマンドライン引数を示します。
内容を表示する Pod でリモートシェルを開き、ovn-nbctl
コマンドを実行します。
引数 | 説明 |
---|---|
| 特定のノードから見たノースバウンドデータベースの内容の概要。 |
| 指定されたスイッチまたはルーターに関連付けられた詳細を表示します。 |
| 論理ルーターを表示します。 |
|
|
| 指定されたルーターのネットワークアドレス変換の詳細を表示します。 |
| 論理スイッチを表示します。 |
|
|
| 論理ポートのタイプを取得します。 |
| ロードバランサーを表示します。 |
2.5. OVN-Kubernetes サウスバウンドデータベースの内容の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
各ノードは、そのノード上の ovnkube-node
Pod で実行されている ovnkube-controller
コンテナーによって制御されます。OVN 論理ネットワークエンティティーを理解するには、そのノード上の ovnkube-node
Pod 内でコンテナーとして実行されているノースバウンドデータベースを調べて、表示するノード内にどのようなオブジェクトがあるかを確認する必要があります。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
クラスター内で ovn nbctl
または sbctl
コマンドを実行するには、関連するノード上の nbdb
または sbdb
コンテナーにリモートシェルを開く必要があります。
次のコマンドを実行して、Pod を一覧表示します。
oc get po -n openshift-ovn-kubernetes
$ oc get po -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: Pod とノード情報をリストするには、次のコマンドを実行します。
oc get pods -n openshift-ovn-kubernetes -owide
$ oc get pods -n openshift-ovn-kubernetes -owide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod に移動してサウスバウンドデータベースを確認します。
oc rsh -c sbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2
$ oc rsh -c sbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サウスバウンドデータベース内のすべてのオブジェクトを表示します。
ovn-sbctl show
$ ovn-sbctl show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この詳細な出力は、シャーシとシャーシに接続されているポート (この場合、すべてのルーターポートとホストネットワークのように動作するもの) を示しています。すべての Pod は、ソースネットワークアドレス変換 (SNAT) を使用して、より広いネットワークと通信します。Pod の IP アドレスは、Pod が実行されているノードの IP アドレスに変換され、ネットワークに送信されます。
シャーシ情報に加えて、サウスバウンドデータベースにはすべてのロジックフローがあります。これらのロジックフローは各ノードで実行されている
ovn-controller
に送信されます。ovn-controller
は、ロジックフローをオープンフロールールに変換し、最終的にOpenvSwitch
をプログラムして、Pod がオープンフロールールに従ってネットワークの外に出られるようにします。次のコマンドを実行して、コマンド
ovn-sbctl
で使用可能なオプションを表示します。oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c sbdb ovn-sbctl --help
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c sbdb ovn-sbctl --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. サウスバウンドデータベースの内容を調べるための ovn-sbctl のコマンドライン引数 リンクのコピーリンクがクリップボードにコピーされました!
次の表に、サウスバウンドデータベースの内容を調べるために ovn-sbctl
で使用できるコマンドライン引数を示します。
内容を表示する Pod でリモートシェルを開き、ovn-sbctl
コマンドを実行します。
引数 | 説明 |
---|---|
| 特定のノードから見たサウスバウンドデータベースの内容の概要。 |
| 指定されたポートのサウスバウンドデータベースの内容を一覧表示します。 |
| 論理フローを一覧表示します。 |
2.7. OVN-Kubernetes の論理アーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
OVN はネットワーク仮想化ソリューションです。OVN は論理スイッチとルーターを作成します。これらのスイッチとルーターは相互接続され、任意のネットワークトポロジーを作成します。ログレベルを 2 または 5 に設定して ovnkube-trace
を実行すると、OVN-Kubernetes 論理コンポーネントが公開されます。以下の図は、ルーターとスイッチが OpenShift Container Platform でどのように接続されているかを示しています。
図2.2 OVN-Kubernetes のルーターおよびスイッチコンポーネント
パケット処理に関係する主要なコンポーネントは次のとおりです。
- ゲートウェイルーター
-
L3 ゲートウェイルーターとも呼ばれるゲートウェイルーターは、通常、分散ルーターと物理ネットワークの間で使用されます。論理パッチポートを含むゲートウェイルーターは、(分散されていない) 物理的な場所またはシャーシにバインドされます。このルーターのパッチポートは、ovn-southbound データベース (
ovn-sbdb
) では l3gateway ポートと呼ばれます。 - 分散論理ルーター
- 分散論理ルーターと、仮想マシンとコンテナーが接続されるその背後にある論理スイッチは、事実上、各ハイパーバイザーに常駐します。
- 結合ローカルスイッチ
- 結合ローカルスイッチは、分散ルーターとゲートウェイルーターを接続するために使用されます。これにより、分散ルーターで必要な IP アドレスの数が減ります。
- パッチポートを備えた論理スイッチ
- パッチポートを備えた論理スイッチは、ネットワークスタックを仮想化するために使用されます。これらは、トンネルを介してリモート論理ポートを接続します。
- localnet ポートを備えた論理スイッチ
- localnet ポートを備えた論理スイッチは、OVN を物理ネットワークに接続するために使用されます。これらは、localnet ポートを使用して直接接続された物理 L2 セグメントにパケットをブリッジすることにより、リモート論理ポートを接続します。
- パッチポート
- パッチポートは、論理スイッチと論理ルーターの間、およびピア論理ルーター間の接続を表します。1 つの接続には、このような接続ポイントごとに、両側に 1 つずつ、1 組のパッチポートがあります。
- l3gateway ポート
-
l3gateway ポートは、ゲートウェイルーターで使用される論理パッチポートの
ovn-sbdb
内のポートバインディングエントリーです。これらのポートは、ゲートウェイルーター本体と同様にシャーシにバインドされているという事実を表すために、パッチポートではなく l3gateway ポートと呼ばれます。 - localnet ポート
-
localnet ポートは、各
ovn-controller
インスタンスからローカルにアクセス可能なネットワークへの接続を可能にするブリッジ論理スイッチに存在します。これは、論理スイッチから物理ネットワークへの直接接続をモデル化するのに役立ちます。論理スイッチに接続できる localnet ポートは 1 つだけです。
2.7.1. ローカルホストへの network-tools のインストール リンクのコピーリンクがクリップボードにコピーされました!
ローカルホストに network-tools
をインストールして、OpenShift Container Platform クラスターネットワークの問題をデバッグするための一連のツールを使用できるようにします。
手順
次のコマンドを使用して、
network-tools
リポジトリーのクローンをワークステーションに作成します。git clone git@github.com:openshift/network-tools.git
$ git clone git@github.com:openshift/network-tools.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クローン作成したリポジトリーのディレクトリーに移動します。
cd network-tools
$ cd network-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 使用可能なすべてのコマンドをリストします。
./debug-scripts/network-tools -h
$ ./debug-scripts/network-tools -h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7.2. network-tools の実行 リンクのコピーリンクがクリップボードにコピーされました!
network-tools
を実行して、論理スイッチとルーターに関する情報を取得します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 -
ローカルホストに
network-tools
がインストールされている。
手順
次のコマンドを実行して、ルーターを一覧表示します。
./debug-scripts/network-tools ovn-db-run-command ovn-nbctl lr-list
$ ./debug-scripts/network-tools ovn-db-run-command ovn-nbctl lr-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
944a7b53-7948-4ad2-a494-82b55eeccf87 (GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99) 84bd4a4c-4b0b-4a47-b0cf-a2c32709fc53 (ovn_cluster_router)
944a7b53-7948-4ad2-a494-82b55eeccf87 (GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99) 84bd4a4c-4b0b-4a47-b0cf-a2c32709fc53 (ovn_cluster_router)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、localnet ポートを一覧表示します。
./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=localnet
$ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=localnet
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
l3gateway
ポートを一覧表示します。./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=l3gateway
$ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=l3gateway
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、パッチポートを一覧表示します。
./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=patch
$ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=patch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 OVN-Kubernetes のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes には、組み込みのヘルスチェックとログのソースが多数あります。以下のセクションの手順に従ってクラスターを調査してください。サポートケースが必要な場合は、サポートガイド に従って、must-gather
を使用して追加情報を収集してください。-- gather_network_logs
は、サポートから指示された場合にのみ使用してください。
3.1. readiness プローブを使用した OVN-Kubernetes の正常性の監視 リンクのコピーリンクがクリップボードにコピーされました!
ovnkube-control-plane
および ovnkube-node
Pod には、readiness プローブが設定されたコンテナーがあります。
前提条件
-
OpenShift CLI (
oc
) へのアクセスがある。 -
cluster-admin
権限でクラスターにアクセスできる。 -
jq
がインストールされている。
手順
次のコマンドを実行して、
ovnkube-node
readiness プローブの詳細を確認します。oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node \ -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'
$ oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node \ -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-node
Pod 内のノースバウンドおよびサウスバウンドのデータベースコンテナーの Readiness プローブは、データベースとovnkube-controller
コンテナーの正常性をチェックします。ovnkube-node
Pod のovnkube-controller
コンテナーには、OVN-Kubernetes CNI 設定ファイルの存在を確認するための readiness プローブがあります。この設定ファイルがない場合、Pod が実行中でないか、Pod を設定するリクエストを受け入れる準備ができていません。次のコマンドを使用して、プローブの失敗を含む namespace のすべてのイベントを表示します。
oc get events -n openshift-ovn-kubernetes
$ oc get events -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定の Pod のみのイベントを表示します。
oc describe pod ovnkube-node-9lqfk -n openshift-ovn-kubernetes
$ oc describe pod ovnkube-node-9lqfk -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターネットワーク Operator からのメッセージとステータスを表示します。
oc get co/network -o json | jq '.status.conditions[]'
$ oc get co/network -o json | jq '.status.conditions[]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のスクリプトを実行して、
ovnkube-node
Pod 内の各コンテナーのready
ステータスを表示します。for p in $(oc get pods --selector app=ovnkube-node -n openshift-ovn-kubernetes \ -o jsonpath='{range.items[*]}{" "}{.metadata.name}'); do echo === $p ===; \ oc get pods -n openshift-ovn-kubernetes $p -o json | jq '.status.containerStatuses[] | .name, .ready'; \ done
$ for p in $(oc get pods --selector app=ovnkube-node -n openshift-ovn-kubernetes \ -o jsonpath='{range.items[*]}{" "}{.metadata.name}'); do echo === $p ===; \ oc get pods -n openshift-ovn-kubernetes $p -o json | jq '.status.containerStatuses[] | .name, .ready'; \ done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記すべてのコンテナーのステータスが
true
として報告されることが期待されます。readiness プローブが失敗すると、ステータスがfalse
に設定されます。
3.2. コンソールでの OVN-Kubernetes アラートの表示 リンクのコピーリンクがクリップボードにコピーされました!
アラート UI は、アラートおよびそれらを規定するアラートルールおよびサイレンスに関する詳細情報を提供します。
前提条件
- 開発者として、またはメトリクスで表示しているプロジェクトの表示権限を持つユーザーとしてクラスターへのアクセスがある。
手順 (UI)
- Administrator パースペクティブで、Observe → Alerting を選択します。このパースペクティブのアラート UI の主なページには、Alerts、Silences、および Alerting Rules という 3 つのページがあります。
- Observe → Alerting → Alerting Rules を選択して、OVN-Kubernetes アラートのルールを表示します。
3.3. CLI での OVN-Kubernetes アラートの表示 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインから、アラートとその管理アラートルールおよびサイレンスに関する情報を取得できます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 -
jq
がインストールされている。
手順
次のコマンドを実行して、アクティブまたは発生中のアラートを表示します。
次のコマンドを実行して、アラートマネージャーのルート環境変数を設定します。
ALERT_MANAGER=$(oc get route alertmanager-main -n openshift-monitoring \ -o jsonpath='{@.spec.host}')
$ ALERT_MANAGER=$(oc get route alertmanager-main -n openshift-monitoring \ -o jsonpath='{@.spec.host}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してアラートマネージャールート API に
curl
リクエストを実行します。$ALERT_MANAGER
は、Alertmanager
インスタンスの URL に置き換えます。curl -s -k -H "Authorization: Bearer $(oc create token prometheus-k8s -n openshift-monitoring)" https://$ALERT_MANAGER/api/v1/alerts | jq '.data[] | "\(.labels.severity) \(.labels.alertname) \(.labels.pod) \(.labels.container) \(.labels.endpoint) \(.labels.instance)"'
$ curl -s -k -H "Authorization: Bearer $(oc create token prometheus-k8s -n openshift-monitoring)" https://$ALERT_MANAGER/api/v1/alerts | jq '.data[] | "\(.labels.severity) \(.labels.alertname) \(.labels.pod) \(.labels.container) \(.labels.endpoint) \(.labels.instance)"'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、アラートルールを表示します。
oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s 'http://localhost:9090/api/v1/rules' | jq '.data.groups[].rules[] | select(((.name|contains("ovn")) or (.name|contains("OVN")) or (.name|contains("Ovn")) or (.name|contains("North")) or (.name|contains("South"))) and .type=="alerting")'
$ oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s 'http://localhost:9090/api/v1/rules' | jq '.data.groups[].rules[] | select(((.name|contains("ovn")) or (.name|contains("OVN")) or (.name|contains("Ovn")) or (.name|contains("North")) or (.name|contains("South"))) and .type=="alerting")'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. CLI を使用した OVN-Kubernetes ログの表示 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift CLI (oc
) を使用して、ovnkube-master
および ovnkube-node
Pod 内の各 Pod のログを表示できます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) へのアクセスがある。 -
jq
がインストールされている。
手順
特定の Pod のログを表示します。
oc logs -f <pod_name> -c <container_name> -n <namespace>
$ oc logs -f <pod_name> -c <container_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-f
- オプション: ログに書き込まれている内容に沿って出力することを指定します。
<pod_name>
- Pod の名前を指定します。
<container_name>
- オプション: コンテナーの名前を指定します。Pod に複数のコンテナーがある場合、コンテナー名を指定する必要があります。
<namespace>
- Pod が実行されている namespace を指定します。
以下に例を示します。
oc logs ovnkube-node-5dx44 -n openshift-ovn-kubernetes
$ oc logs ovnkube-node-5dx44 -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -f ovnkube-node-5dx44 -c ovnkube-controller -n openshift-ovn-kubernetes
$ oc logs -f ovnkube-node-5dx44 -c ovnkube-controller -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログファイルの内容が出力されます。
ovnkube-node
Pod 内のすべてのコンテナーの最新のエントリーを調べます。for p in $(oc get pods --selector app=ovnkube-node -n openshift-ovn-kubernetes \ -o jsonpath='{range.items[*]}{" "}{.metadata.name}'); \ do echo === $p ===; for container in $(oc get pods -n openshift-ovn-kubernetes $p \ -o json | jq -r '.status.containerStatuses[] | .name');do echo ---$container---; \ oc logs -c $container $p -n openshift-ovn-kubernetes --tail=5; done; done
$ for p in $(oc get pods --selector app=ovnkube-node -n openshift-ovn-kubernetes \ -o jsonpath='{range.items[*]}{" "}{.metadata.name}'); \ do echo === $p ===; for container in $(oc get pods -n openshift-ovn-kubernetes $p \ -o json | jq -r '.status.containerStatuses[] | .name');do echo ---$container---; \ oc logs -c $container $p -n openshift-ovn-kubernetes --tail=5; done; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、
ovnkube-node
Pod 内のすべてのコンテナーのすべてのログの最後の 5 行を表示します。oc logs -l app=ovnkube-node -n openshift-ovn-kubernetes --all-containers --tail 5
$ oc logs -l app=ovnkube-node -n openshift-ovn-kubernetes --all-containers --tail 5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. Web コンソールを使用した OVN-Kubernetes ログの表示 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールで、ovnkube-master
Pod と ovnkube-node
Pod の各 Pod のログを表示できます。
前提条件
-
OpenShift CLI (
oc
) へのアクセスがある。
手順
- OpenShift Container Platform コンソールで Workloads → Pods に移動するか、調査するリソースから Pod に移動します。
-
ドロップダウンメニューから
openshift-ovn-kubernetes
プロジェクトを選択します。 - 調査する Pod の名前をクリックします。
-
Logs をクリックします。
ovnkube-master
のデフォルトでは、northd
コンテナーに関連付けられたログが表示されます。 - ドロップダウンメニューを使用して、各コンテナーのログを順番に選択します。
3.5.1. OVN-Kubernetes のログレベルの変更 リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes のデフォルトのログレベルは 4 です。OVN-Kubernetes をデバッグするには、ログレベルを 5 に設定します。次の手順に従って OVN-Kubernetes のログレベルを上げることで、問題のデバッグに役立てることができます。
前提条件
-
cluster-admin
権限でクラスターにアクセスできる。 - OpenShift Container Platform Web コンソールにアクセスできる。
手順
次のコマンドを実行して、OVN-Kubernetes プロジェクト内のすべての Pod の詳細情報を取得します。
oc get po -o wide -n openshift-ovn-kubernetes
$ oc get po -o wide -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のような
ConfigMap
ファイルを作成し、env-overrides.yaml
などのファイル名を使用します。ConfigMap
ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、
ConfigMap
ファイルを適用します。oc apply -n openshift-ovn-kubernetes -f env-overrides.yaml
$ oc apply -n openshift-ovn-kubernetes -f env-overrides.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
configmap/env-overrides.yaml created
configmap/env-overrides.yaml created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して
ovnkube
Pod を再起動し、新しいログレベルを適用します。oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ci-ln-3njdr9b-72292-5nwkp-master-0 -l app=ovnkube-node
$ oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ci-ln-3njdr9b-72292-5nwkp-master-0 -l app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ci-ln-3njdr9b-72292-5nwkp-master-2 -l app=ovnkube-node
$ oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ci-ln-3njdr9b-72292-5nwkp-master-2 -l app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pod -n openshift-ovn-kubernetes -l app=ovnkube-node
$ oc delete pod -n openshift-ovn-kubernetes -l app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ConfigMap ファイルが特定の Pod のすべてのノードに適用されていることを確認するには、次のコマンドを実行します。
oc logs -n openshift-ovn-kubernetes --all-containers --prefix ovnkube-node-<xxxx> | grep -E -m 10 '(Logging config:|vconsole|DBG)'
$ oc logs -n openshift-ovn-kubernetes --all-containers --prefix ovnkube-node-<xxxx> | grep -E -m 10 '(Logging config:|vconsole|DBG)'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<XXXX>
前の手順の Pod の文字のランダムなシーケンスを指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
オプション: 次のコマンドを実行して、
ConfigMap
ファイルが適用されていることを確認します。for f in $(oc -n openshift-ovn-kubernetes get po -l 'app=ovnkube-node' --no-headers -o custom-columns=N:.metadata.name) ; do echo "---- $f ----" ; oc -n openshift-ovn-kubernetes exec -c ovnkube-controller $f -- pgrep -a -f init-ovnkube-controller | grep -P -o '^.*loglevel\s+\d' ; done
for f in $(oc -n openshift-ovn-kubernetes get po -l 'app=ovnkube-node' --no-headers -o custom-columns=N:.metadata.name) ; do echo "---- $f ----" ; oc -n openshift-ovn-kubernetes exec -c ovnkube-controller $f -- pgrep -a -f init-ovnkube-controller | grep -P -o '^.*loglevel\s+\d' ; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6. OVN-Kubernetes Pod ネットワーク接続のチェック リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform 4.10 以降の接続チェックコントローラーは、クラスター内の接続検証チェックをオーケストレーションします。これには、Kubernetes API、OpenShift API、および個々のノードが含まれます。接続テストの結果は、openshift-network-diagnostics
namespace の PodNetworkConnectivity
オブジェクトに保存されます。接続テストは、1 分ごとに並行して実行されます。
前提条件
-
OpenShift CLI (
oc
) へのアクセスがある。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
jq
がインストールされている。
手順
現在の
PodNetworkConnectivityCheck
オブジェクトをリスト表示するには、以下のコマンドを入力します。oc get podnetworkconnectivitychecks -n openshift-network-diagnostics
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、各接続オブジェクトの最新の成功を表示します。
oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.successes[0]'
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.successes[0]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、各接続オブジェクトの最新のエラーを表示します。
oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.failures[0]'
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.failures[0]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、各接続オブジェクトの最新の停止を表示します。
oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.outages[0]'
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.outages[0]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続チェックコントローラーは、これらのチェックからのメトリクスも Prometheus に記録します。
次のコマンドを実行して、すべてのメトリクスを表示します。
oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
$ oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 過去 5 分間のソース Pod と openshift api サービス間のレイテンシーを表示します。
oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
$ oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. CLI を使用して OVS サンプリングで OVN-Kubernetes ネットワークトラフィックを確認する リンクのコピーリンクがクリップボードにコピーされました!
OVS サンプリングによる OVN-Kubernetes ネットワークトラフィックのチェックは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OVN-Kubernetes ネットワークトラフィックは、CLI を介した次のネットワーク API の OVS サンプリングで表示できます。
-
NetworkPolicy
-
AdminNetworkPolicy
-
BaselineNetworkPolicy
-
UserDefinedNetwork
分離 -
EgressFirewall
- マルチキャスト ACL。
これらのネットワークイベントのスクリプトは、各 OVN-Kubernetes ノードの /usr/bin/ovnkube-observ
パスにあります。
Network Observability Operator と OVS サンプリングによる OVN-Kubernetes ネットワークトラフィックのチェックは、どちらもデバッグに適していますが、Network Observability Operator はネットワークイベントの監視を目的としています。または、CLI を使用して OVS サンプリングで OVN-Kubernetes ネットワークトラフィックをチェックすると、パケットトレースに役立ちます。Network Observability Operator がインストールされている場合にも使用できますが、必須ではありません。
管理者は、--add-ovs-collect
オプションを追加してノード全体のネットワークトラフィックを表示したり、追加のフラグを渡して特定の Pod の結果をフィルタリングしたりできます。追加のフラグについては、「OVS サンプリングフラグを使用した OVN-Kubernetes ネットワークトラフィック」セクションを参照してください。
CLI を使用して OVN-Kubernetes ネットワークトラフィックを表示するには、次の手順に従います。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - ソース Pod と宛先 Pod を作成し、それらの間でトラフィックを実行した。
-
NetworkPolicy
、AdminNetworkPolicy
、BaselineNetworkPolicy
、UserDefinedNetwork
の分離、マルチキャスト、または Egress ファイアウォールのいずれかのネットワーク API を 1 つ以上作成した。
手順
OVS サンプリング機能を使用して
OVNObservability
を有効にするには、次のコマンドを入力して、cluster
という名前のFeatureGate
CR でTechPreviewNoUpgrade
機能セットを有効にします。oc patch --type=merge --patch '{"spec": {"featureSet": "TechPreviewNoUpgrade"}}' featuregate/cluster
$ oc patch --type=merge --patch '{"spec": {"featureSet": "TechPreviewNoUpgrade"}}' featuregate/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
featuregate.config.openshift.io/cluster patched
featuregate.config.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
OVNObservability
機能が有効になっていることを確認します。oc get featuregate cluster -o yaml
$ oc get featuregate cluster -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
featureGates: # ... enabled: - name: OVNObservability
featureGates: # ... enabled: - name: OVNObservability
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、関連するネットワーク API の 1 つを作成した namespace 内の Pod のリストを取得します。次の手順で使用するために、Pod の
NODE
名をメモします。oc get pods -n <namespace> -o wide
$ oc get pods -n <namespace> -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES destination-pod 1/1 Running 0 53s 10.131.0.23 ci-ln-1gqp7b2-72292-bb9dv-worker-a-gtmpc <none> <none> source-pod 1/1 Running 0 56s 10.131.0.22 ci-ln-1gqp7b2-72292-bb9dv-worker-a-gtmpc <none> <none>
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES destination-pod 1/1 Running 0 53s 10.131.0.23 ci-ln-1gqp7b2-72292-bb9dv-worker-a-gtmpc <none> <none> source-pod 1/1 Running 0 56s 10.131.0.22 ci-ln-1gqp7b2-72292-bb9dv-worker-a-gtmpc <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、OVN-Kubernetes Pod のリストを取得し、前の手順の Pod と同じ
NODE
を共有する Pod を見つけます。oc get pods -n openshift-ovn-kubernetes -o wide
$ oc get pods -n openshift-ovn-kubernetes -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME ... READY STATUS RESTARTS AGE IP NODE NOMINATED NODE ovnkube-node-jzn5b 8/8 Running 1 (34m ago) 37m 10.0.128.2 ci-ln-1gqp7b2-72292-bb9dv-worker-a-gtmpc <none> ...
NAME ... READY STATUS RESTARTS AGE IP NODE NOMINATED NODE ovnkube-node-jzn5b 8/8 Running 1 (34m ago) 37m 10.0.128.2 ci-ln-1gqp7b2-72292-bb9dv-worker-a-gtmpc <none> ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
ovnkube-node
Pod 内で bash シェルを開きます。oc exec -it <pod_name> -n openshift-ovn-kubernetes -- bash
$ oc exec -it <pod_name> -n openshift-ovn-kubernetes -- bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-node
Pod 内では、ovnkube-observ -add-ovs-collector
スクリプトを実行し、OVS コレクターを使用してネットワークイベントを表示できます。以下に例を示します。/usr/bin/ovnkube-observ -add-ovs-collector
# /usr/bin/ovnkube-observ -add-ovs-collector
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -filter-src-ip
フラグと Pod の IP アドレスを指定して次のコマンドを入力すると、ソース Pod などのタイプ別にコンテンツをフィルタリングできます。以下に例を示します。/usr/bin/ovnkube-observ -add-ovs-collector -filter-src-ip <pod_ip_address>
# /usr/bin/ovnkube-observ -add-ovs-collector -filter-src-ip <pod_ip_address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /usr/bin/ovnkube-observ
で渡すことができるフラグの完全なリストについては、「OVS サンプリングフラグを持つ OVN-Kubernetes ネットワークトラフィック」を参照してください。
3.7.1. OVS サンプリングフラグを持つ OVN-Kubernetes ネットワークトラフィック リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用して OVN-Kubernetes ネットワークトラフィックを表示するには、次のフラグを使用できます。ovnkube-node
Pod 内で bash シェルを開いた後、ターミナルで次の構文にこれらのフラグを追加します。
コマンド構文
/usr/bin/ovnkube-observ <flag>
# /usr/bin/ovnkube-observ <flag>
フラグ | 説明 |
---|---|
|
|
| サンプリングを有効にするために OVS コレクターを追加します。注意して使用してください。他のユーザーが可観測性を使用していないことを確認します。 |
|
NBDB データでサンプルを補完します。デフォルトは |
| 指定された宛先 IP へのパケットのみをフィルタリングします。 |
| 指定された送信元 IP からのパケットのみをフィルタリングします。 |
| psample group_id を使用して生のサンプル Cookie を出力します。 |
| サンプルの書き込み先となる出力ファイル。 |
| 受信したパケット全体を出力します。false の場合、すべてのサンプルで送信元 IP と宛先 IP のみが出力されます。 |
第4章 ovnkube-trace を使用した Openflow のトレース リンクのコピーリンクがクリップボードにコピーされました!
OVN と OVS のトラフィックフローは、ovnkube-trace
という単一のユーティリティーでシミュレートできます。ovnkube-trace
ユーティリティーは、ovn-trace
、ovs-appctl ofproto/trace
、および ovn-detrace
を実行し、その情報を 1 つの出力に関連付けます。
専用コンテナーから ovnkube-trace
バイナリーを実行できます。OpenShift Container Platform 4.7 以降のリリースでは、バイナリーをローカルホストにコピーして、そのホストから実行することもできます。
4.1. ローカルホストへの ovnkube-trace のインストール リンクのコピーリンクがクリップボードにコピーされました!
ovnkube-trace
ツールは、OVN-Kubernetes で動作する OpenShift Container Platform クラスター内のポイント間における任意の UDP または TCP トラフィックのパケットシミュレーションをトレースします。ovnkube-trace
バイナリーをローカルホストにコピーして、クラスターに対して実行できるようにします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
次のコマンドを使用して Pod 変数を作成します。
POD=$(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-control-plane -o name | head -1 | awk -F '/' '{print $NF}')
$ POD=$(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-control-plane -o name | head -1 | awk -F '/' '{print $NF}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルホストで次のコマンドを実行して、
ovnkube-control-plane
Pod からバイナリーをコピーします。oc cp -n openshift-ovn-kubernetes $POD:/usr/bin/ovnkube-trace -c ovnkube-cluster-manager ovnkube-trace
$ oc cp -n openshift-ovn-kubernetes $POD:/usr/bin/ovnkube-trace -c ovnkube-cluster-manager ovnkube-trace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Red Hat Enterprise Linux (RHEL) 8 を使用して
ovnkube-trace
ツールを実行している場合は、/usr/lib/rhel8/ovnkube-trace
ファイルをローカルホストにコピーする必要があります。次のコマンドを実行して、
ovnkube-trace
を実行可能にします。chmod +x ovnkube-trace
$ chmod +x ovnkube-trace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ovnkube-trace
で使用可能なオプションを表示します。./ovnkube-trace -help
$ ./ovnkube-trace -help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サポートされているコマンドライン引数は、namespace、Pod、サービスなど、よく知られた Kubernetes コンストラクトであるため、MAC アドレス、宛先ノードの IP アドレス、または ICMP タイプを見つける必要はありません。
ログレベルは次のとおりです。
- 0 (最小出力)
- 2 (トレースコマンドの結果を示すより詳細な出力)
- 5 (デバッグ出力)
4.2. ovnkube-trace の実行 リンクのコピーリンクがクリップボードにコピーされました!
ovn-trace
を実行して、OVN 論理ネットワーク内のパケット転送をシミュレートします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 -
ローカルホストに
ovnkube-trace
がインストールされている。
例: デプロイされた Pod からの DNS 解決が機能することをテストする
この例は、デプロイされた Pod からクラスターで実行されるコア DNS Pod への DNS 解決をテストする方法を示しています。
手順
次のコマンドを入力して、default namespace で Web サービスを開始します。
oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-dns
namespace で実行されている Pod を一覧表示します。oc get pods -n openshift-dns
oc get pods -n openshift-dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
ovnkube-trace
コマンドを実行して、DNS 解決が機能していることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow src&dst
Pod が同じノードに配置された場合の出力例Copy to Clipboard Copied! Toggle word wrap Toggle overflow src&dst
Pod が別のノードに配置された場合の出力例Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、デプロイされた Pod から DNS ポートへの解決が成功し、その反対方向への解決も成功したことを示しています。つまり、Web Pod がコア DNS からの DNS 解決を行う場合に、UDP ポート 53 で双方向のトラフィックがサポートされていることがわかります。
たとえば、これが機能せず、ovn-trace
を取得する必要がある場合は、proto/trace
と ovn-detrace
の ovs-appctl
、およびデバッグのタイプ情報が、ログレベルを 2 に上げて、以下のようにコマンドを再度実行します。
このログレベルの出力は多すぎるため、ここにはリストできません。障害状況では、このコマンドの出力は、どのフローがそのトラフィックを破棄しているかを示します。たとえば、Egress または Ingress ネットワークポリシーが、そのトラフィックを許可しないクラスターで設定されている場合などがあります。
例: デバッグ出力を使用して設定済みのデフォルトの拒否を確認する
この例は、デバッグ出力を使用して、デフォルトの Ingress 拒否ポリシーがトラフィックをブロックしていることを特定する方法を示しています。
手順
すべての namespace におけるすべての Pod からの Ingress を拒否する
deny-by-default
ポリシーを定義する次の YAML を作成します。YAML をdeny-by-default.yaml
ファイルに保存します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ポリシーを適用します。
oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
networkpolicy.networking.k8s.io/deny-by-default created
networkpolicy.networking.k8s.io/deny-by-default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
default
namespace で Web サービスを開始します。oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=quay.io/openshifttest/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 次のコマンドを実行して、
alpine
イメージをprod
namespace にデプロイし、シェルを開始します。oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 別のターミナルセッションを開きます。
この新しいターミナルセッションで
ovn-trace
を実行して、namespaceprod
で実行されているソース Podtest-6459
とdefault
namespace で実行されている宛先 Pod 間の通信の失敗を確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
ovn-trace source pod to destination pod indicates failure from test-6459 to web
ovn-trace source pod to destination pod indicates failure from test-6459 to web
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ログレベルを 2 に上げて、失敗の理由を明らかにします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- デフォルトの拒否ポリシーが設定されているため、Ingress トラフィックがブロックされています。
ラベルが
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 次のコマンドを入力して、
ovnkube-trace
を実行し、トラフィックが許可されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手順 6 で開いたシェルで次のコマンドを実行して、nginx を Web サーバーに接続します。
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
第5章 IPv4/IPv6 デュアルスタックネットワークへの変換 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、IPv4 および IPv6 アドレスファミリーをサポートするデュアルネットワーククラスターネットワークに、IPv4 の単一スタッククラスターを変換できます。デュアルスタックネットワークに変換すると、新しい Pod と既存の Pod でデュアルスタックネットワークが有効になります。
IPv6 を必要とするデュアルスタックネットワークを使用する場合、::FFFF:198.51.100.1
などの IPv4 にマッピングされた IPv6 アドレスは使用できません。
5.1. デュアルスタッククラスターネットワークへの変換 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、単一スタッククラスターネットワークをデュアルスタッククラスターネットワークに変換できます。
デュアルスタックネットワークを使用するようにクラスターを変換した後、Pod が IPv6 アドレスを受け取るように、既存の Pod を再作成する必要があります。IPv6 アドレスは、新しい Pod にのみ割り当てられるためです。
シングルスタッククラスターネットワークをデュアルスタッククラスターネットワークに変換するには、パッチを作成し、それをクラスターのネットワークとインフラストラクチャーに適用します。installer-provisioned infrastructure または user-provisioned infrastructure のいずれかで実行されるクラスターは、デュアルスタッククラスターネットワークに変換できます。
clusterNetwork
、serviceNetwork
、apiServerInternalIPs
、および ingressIP
オブジェクトを変更する各パッチ操作は、クラスターの再起動をトリガーします。MachineNetworks
オブジェクトを変更しても、クラスターは再起動されません。
installer-provisioned infrastructure のみ、既存のデュアルスタック設定のクラスターに API および Ingress サービスの IPv6 仮想 IP (VIP) を追加する必要がある場合は、クラスターのネットワークではなく、インフラストラクチャーのみにパッチを適用する必要があります。
クラスターを OpenShift Container Platform 4.16 以降にすでにアップグレードしていて、シングルスタッククラスターネットワークをデュアルスタッククラスターネットワークに変換する必要がある場合は、YAML 設定パッチファイルで、API および Ingress サービスの install-config.yaml
ファイルから既存の IPv4 machineNetwork
ネットワーク設定を指定する必要があります。この設定により、IPv4 トラフィックがデフォルトゲートウェイと同じネットワークインターフェイスに存在させることができます。
machineNetwork
ネットワーク用に IPv4 アドレスブロックが追加された YAML 設定ファイルの例
- op: add path: /spec/platformSpec/baremetal/machineNetworks/- value: 192.168.1.0/24 # ...
- op: add
path: /spec/platformSpec/baremetal/machineNetworks/-
value: 192.168.1.0/24
# ...
- 1
- マシンが動作する
machineNetwork
ネットワークのアドレスブロックを指定していることを確認してください。マシンネットワークの API および Ingress の両方の IP アドレスを選択する必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - クラスターは OVN-Kubernetes ネットワークプラグインを使用します。
- クラスターノードに IPv6 アドレスがある。
- インフラストラクチャーに基づいて IPv6 対応ルーターを設定している。
手順
クラスターおよびサービスネットワークの IPv6 アドレスブロックを指定するには、次の例のような設定を持つ YAML 設定パッチファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CLI で次のコマンドを入力して、クラスターネットワーク設定にパッチを適用します。
oc patch network.config.openshift.io cluster \ --type='json' --patch-file <file>.yaml
$ oc patch network.config.openshift.io cluster \
1 --type='json' --patch-file <file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ここで、
file
は作成した YAML ファイルの名前を指定します。
出力例
network.config.openshift.io/cluster patched
network.config.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow API および Ingress サービス用の IPv6 仮想 IP を追加した installer-provisioned infrastructure で、次の手順を実行します。
クラスターの API および Ingress サービスに IPv6 仮想 IP を指定します。次の例と同様の設定を含む YAML 設定パッチファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CLI で次のコマンドを入力してインフラストラクチャーにパッチを適用します。
oc patch infrastructure cluster \ --type='json' --patch-file <file>.yaml
$ oc patch infrastructure cluster \ --type='json' --patch-file <file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、以下のようになります。
- <file>
作成した YAML ファイルの名前を指定します。
出力例
infrastructure/cluster patched
infrastructure/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
CLI で次のコマンドを入力して、クラスターネットワーク設定を表示します。
oc describe network
$ oc describe network
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターネットワーク設定が YAML ファイルで指定した IPv6 アドレスブロックを認識していることを確認し、ネットワーク設定へのパッチのインストールが正常に行われたことを確認します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow installer-provisioned infrastructure 上で実行されるクラスターに対して、次の追加タスクを完了します。
CLI で次のコマンドを入力して、クラスターインフラストラクチャー設定を表示します。
oc describe infrastructure
$ oc describe infrastructure
Copy to Clipboard Copied! Toggle word wrap Toggle overflow YAML ファイルで指定した IPv6 アドレスブロックがインフラストラクチャーによって認識されるかどうかを確認して、クラスターインフラストラクチャーへのパッチのインストールが正常に行われたことを確認します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2. 単一スタッククラスターネットワークへの変換 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、デュアルスタッククラスターネットワークを単一スタッククラスターネットワークに変換できます。
元々 IPv4 シングルスタッククラスターネットワークをデュアルスタッククラスターに変換していた場合は、IPv4 シングルスタッククラスターにのみ戻すことができます。IPv6 シングルスタッククラスターネットワークには戻すことができません。IPv6 シングルスタッククラスターネットワークに戻す場合も、同じ制限が適用されます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - クラスターは OVN-Kubernetes ネットワークプラグインを使用します。
- クラスターノードに IPv6 アドレスがある。
- デュアルスタックネットワークを有効にしている。
手順
以下のコマンドを実行して、
networks.config.openshift.io
カスタムリソース (CR) を編集します。oc edit networks.config.openshift.io
$ oc edit networks.config.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
「デュアルスタッククラスターネットワークへの変換」手順の実行時に
cidr
およびhostPrefix
パラメーターに追加した IPv4 または IPv6 設定を削除します。
第6章 OVN-Kubernetes 内部 IP アドレスサブネットの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、OVN-Kubernetes ネットワークプラグインが結合および転送サブネットに使用する IP アドレス範囲を変更できます。
6.1. OVN-Kubernetes 参加サブネットの設定 リンクのコピーリンクがクリップボードにコピーされました!
環境内ですでに使用されている既存のサブネットとの競合を避けるために、OVN-Kubernetes で使用される参加サブネットを変更できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。 - クラスターが OVN-Kubernetes ネットワークプラグインを使用していることを確認します。
手順
OVN-Kubernetes 参加サブネットを変更するには、次のコマンドを入力します。
oc patch network.operator.openshift.io cluster --type='merge' \ -p='{"spec":{"defaultNetwork":{"ovnKubernetesConfig":
$ oc patch network.operator.openshift.io cluster --type='merge' \ -p='{"spec":{"defaultNetwork":{"ovnKubernetesConfig": {"ipv4":{"internalJoinSubnet": "<join_subnet>"}, "ipv6":{"internalJoinSubnet": "<join_subnet>"}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<join_subnet>
-
OVN-Kubernetes が内部で使用する IP アドレスサブネットを指定します。サブネットは、クラスター内のノード数よりも大きく、クラスター内のノードごとに 1 つの IP アドレスを収容できる大きさである必要があります。このサブネットは、OpenShift Container Platform またはホスト自体で使用される他のサブネットと重複することはできません。IPv4 のデフォルト値は
100.64.0.0/16
で、IPv6 のデフォルト値はfd98::/64
です。
出力例
network.operator.openshift.io/cluster patched
network.operator.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
設定がアクティブであることを確認するには、以下のコマンドを入力します。
oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.defaultNetwork}"
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.defaultNetwork}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンド操作による変更が有効になるまでに最大 30 分かかる場合があります。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2. インストール後の操作として OVN-Kubernetes マスカレードサブネットを設定する リンクのコピーリンクがクリップボードにコピーされました!
環境内ですでに使用されている既存のサブネットとの競合を回避するために、インストール後の操作として、OVN-Kubernetes で使用されるマスカレードサブネットを変更できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
クラスターのマスカレードサブネットを変更します。
IPv6 を使用するデュアルスタッククラスターの場合は、次のコマンドを実行します。
oc patch networks.operator.openshift.io cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipv4":{"internalMasqueradeSubnet": "<ipv4_masquerade_subnet>"},"ipv6":{"internalMasqueradeSubnet": "<ipv6_masquerade_subnet>"}}}}}}'
$ oc patch networks.operator.openshift.io cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipv4":{"internalMasqueradeSubnet": "<ipv4_masquerade_subnet>"},"ipv6":{"internalMasqueradeSubnet": "<ipv6_masquerade_subnet>"}}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
ipv4_masquerade_subnet
-
IPv4 マスカレードサブネットとして使用する IP アドレスを指定します。この範囲は、OpenShift Container Platform またはホスト自体で使用される他のサブネットと重複できません。OpenShift Container Platform 4.17 より前のバージョンの場合、IPv4 のデフォルト値は
169.254.169.0/29
で、バージョン 4.17 にアップグレードされたクラスターはこの値を維持します。バージョン 4.17 以降の新しいクラスターの場合、デフォルト値は169.254.0.0/17
です。 ipv6_masquerade_subnet
-
IPv6 マスカレードサブネットとして使用する IP アドレスを指定します。この範囲は、OpenShift Container Platform またはホスト自体で使用される他のサブネットと重複できません。IPv6 のデフォルト値は
fd69::/125
です。
IPv4 を使用するクラスターの場合は、次のコマンドを実行します。
oc patch networks.operator.openshift.io cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipv4":{"internalMasqueradeSubnet": "<ipv4_masquerade_subnet>"}}}}}}'
$ oc patch networks.operator.openshift.io cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipv4":{"internalMasqueradeSubnet": "<ipv4_masquerade_subnet>"}}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
ipv4_masquerade_subnet
では、IPv4 マスカレードサブネットとして使用する IP アドレスを指定します。この範囲は、OpenShift Container Platform またはホスト自体で使用される他のサブネットと重複できません。OpenShift Container Platform 4.17 より前のバージョンの場合、IPv4 のデフォルト値は169.254.169.0/29
で、バージョン 4.17 にアップグレードされたクラスターはこの値を維持します。バージョン 4.17 以降の新しいクラスターの場合、デフォルト値は169.254.0.0/17
です。
6.3. OVN-Kubernetes 転送サブネットの設定 リンクのコピーリンクがクリップボードにコピーされました!
環境内ですでに使用されている既存のサブネットとの競合を避けるために、OVN-Kubernetes で使用されるトランジットサブネットを変更できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。 - クラスターが OVN-Kubernetes ネットワークプラグインを使用していることを確認します。
手順
OVN-Kubernetes 転送サブネットを変更するには、以下のコマンドを入力します。
oc patch network.operator.openshift.io cluster --type='merge' \ -p='{"spec":{"defaultNetwork":{"ovnKubernetesConfig":
$ oc patch network.operator.openshift.io cluster --type='merge' \ -p='{"spec":{"defaultNetwork":{"ovnKubernetesConfig": {"ipv4":{"internalTransitSwitchSubnet": "<transit_subnet>"}, "ipv6":{"internalTransitSwitchSubnet": "<transit_subnet>"}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<transit_subnet>
-
east-west トラフィックを有効にする分散トランジットスイッチの IP アドレスサブネットを指定します。このサブネットは、OVN-Kubernetes またはホスト自体で使用される他のサブネットと重複することはできません。IPv4 のデフォルト値は
100.88.0.0/16
で、IPv6 のデフォルト値はfd97::/64
です。
出力例
network.operator.openshift.io/cluster patched
network.operator.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
設定がアクティブであることを確認するには、以下のコマンドを入力します。
oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.defaultNetwork}"
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.defaultNetwork}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この変更が有効になるまで、最大 30 分かかる場合があります。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第7章 ゲートウェイモードの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、gatewayConfig
オブジェクトを設定して、外部トラフィックをクラスターからどのように送信するかを管理できます。これを行うには、routingViaHost
仕様を true
(ローカルモードの場合) または false
(共有モードの場合) に設定します。
ローカルゲートウェイモードでは、トラフィックがホストを経由してルーティングされ、その結果、ホストのルーティングテーブルに適用されます。共有ゲートウェイモードでは、トラフィックはホストを経由してルーティングされません。代わりに、Open vSwitch (OVS) がトラフィックをノード IP インターフェイスに直接出力します。
7.1. ローカルおよび共有ゲートウェイモードの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Cluster Network Operator の gatewayConfig
仕様を使用してゲートウェイモードを設定できます。次の手順を使用して、routingViaHost
フィールドを true
(ローカルモードの場合) または false
(共有モードの場合) に設定できます。
ノードのホストネットワークを、OVN-Kubernetes に関連しないトラフィックのルーターとして機能させる必要がある場合は、オプションのステップ 4 に従って、ローカルゲートウェイモードとともに IP 転送を有効にできます。たとえば、ローカルゲートウェイモードと IP 転送を組み合わせた使用例としては、次のようなものが考えられます。
- すべての Pod Egress トラフィックをノードの IP 経由で転送するように設定する
- OVN-Kubernetes CNI と外部ネットワークアドレス変換 (NAT) デバイスを統合する
- カーネルルーティングテーブルを使用するように OVN-Kubernetes CNI を設定する
前提条件
- 管理者権限を持つユーザーとしてログインしている。
手順
次のコマンドを実行して、既存のネットワーク設定をバックアップします。
oc get network.operator cluster -o yaml > network-config-backup.yaml
$ oc get network.operator cluster -o yaml > network-config-backup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルゲートウェイモードを使用するために、次のコマンドを実行して
routingViaHost
パラメーターをtrue
に設定します。oc patch networks.operator.openshift.io cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"routingViaHost": true}}}}}'
$ oc patch networks.operator.openshift.io cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"routingViaHost": true}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ローカルゲートウェイモードが設定されていることを確認します。
oc get networks.operator.openshift.io cluster -o yaml | grep -A 5 "gatewayConfig"
$ oc get networks.operator.openshift.io cluster -o yaml | grep -A 5 "gatewayConfig"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 値を
true
にするとローカルゲートウェイモードが設定され、値をfalse
にすると共有ゲートウェイモードが設定されます。ローカルゲートウェイモードでは、トラフィックがホストを経由してルーティングされます。共有ゲートウェイモードでは、トラフィックはホストを経由してルーティングされません。
オプション: 次のコマンドを実行して、IP 転送をグローバルに有効にします。
oc patch network.operator cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}'
$ oc patch network.operator cluster --type=merge -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ipForwarding
仕様がGlobal
に設定されていることを確認します。oc get networks.operator.openshift.io cluster -o yaml | grep -A 5 "gatewayConfig"
$ oc get networks.operator.openshift.io cluster -o yaml | grep -A 5 "gatewayConfig"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第8章 デフォルトネットワークに外部ゲートウェイを設定する リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、デフォルトネットワークに外部ゲートウェイを設定できます。
この機能には次の利点があります。
- namespace ごとの Egress トラフィックの詳細制御
- 静的および動的外部ゲートウェイ IP アドレスの柔軟な設定
- IPv4 と IPv6 の両方のアドレスファミリーのサポート
8.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- クラスターは OVN-Kubernetes ネットワークプラグインを使用します。
- インフラストラクチャーは、セカンダリー外部ゲートウェイからのトラフィックをルーティングするように設定されています。
8.2. OpenShift Container Platform が外部ゲートウェイ IP アドレスを決定する方法 リンクのコピーリンクがクリップボードにコピーされました!
k8s.ovn.org
API グループの AdminPolicyBasedExternalRoute
カスタムリソース (CR) を使用してセカンダリー外部ゲートウェイを設定します。この CR は、外部ゲートウェイの IP アドレスを指定するための静的アプローチと動的アプローチをサポートしています。
AdminPolicyBasedExternalRoute
CR の対象となる各 namespace は、他の AdminPolicyBasedExternalRoute
CR で選択できません。namespace には同時にセカンダリー外部ゲートウェイを含めることはできません。
ポリシーへの変更はコントローラー内で分離されます。あるポリシーの適用が失敗した場合に、他のポリシーを変更しても、他のポリシーの再試行はトリガーされません。ポリシーが再評価され、変更によって発生した可能性のある差分が適用されるのは、ポリシー自体またはポリシーに関連するオブジェクト (対象の namespace、Pod ゲートウェイ、または動的ホップからそれらをホストする namespace など) の更新が行われたときのみです。
- 静的割り当て
- IP アドレスを直接指定します。
- 動的割り当て
namespace と Pod セレクター、およびオプションのネットワーク割り当て定義を使用して、IP アドレスを間接的に指定します。
- ネットワーク割り当て定義の名前が指定されている場合は、ネットワーク割り当ての外部ゲートウェイ IP アドレスが使用されます。
-
ネットワーク割り当て定義の名前が指定されていない場合は、Pod 自体の外部ゲートウェイ IP アドレスが使用されます。ただし、このアプローチは、Pod が
hostNetwork
をtrue
に指定して設定されている場合にのみ機能します。
8.3. AdminPolicyBasedExternalRoute オブジェクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
次のプロパティーを使用して、クラスタースコープの AdminPolicyBasedExternalRoute
オブジェクトを定義できます。namespace は、一度に 1 つの AdminPolicyBasedExternalRoute
CR でのみ選択できます。
フィールド | 型 | 説明 |
---|---|---|
|
|
|
|
|
ルーティングポリシーを適用する namespace セレクターを指定します。外部トラフィックでは from: namespaceSelector: matchLabels: kubernetes.io/metadata.name: novxlan-externalgw-ecmp-4059
namespace を対象にできるのは、1 つの |
|
|
パケットの転送先を指定します。 |
フィールド | 型 | 説明 |
---|---|---|
|
| 静的 IP アドレスの配列を指定します。 |
|
| 外部ゲートウェイターゲットとして使用するネットワーク割り当て定義で設定された Pod に対応する Pod セレクターの配列を指定します。 |
フィールド | 型 | 説明 |
---|---|---|
|
| 次の宛先ホップの IPv4 アドレスまたは IPv6 アドレスを指定します。 |
|
|
オプション: ネットワークで双方向転送検出 (BFD) がサポートされているかどうかを指定します。デフォルト値は |
フィールド | 型 | 説明 |
---|---|---|
|
| [set-based](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#set-based-requirement) ラベルセレクターを指定して、このネットワークに一致する namespace 内の Pod をフィルターします設定。 |
|
|
|
|
|
オプション: ネットワークで双方向転送検出 (BFD) がサポートされているかどうかを指定します。デフォルト値は |
|
| オプション: ネットワーク接続定義の名前を指定します。名前は、Pod に関連付けられた論理ネットワークのリストと一致する必要があります。このフィールドが指定されていない場合は、Pod のホストネットワークが使用されます。ただし、ホストネットワークを使用するには、Pod をホストネットワーク Pod として設定する必要があります。 |
8.3.1. セカンダリー外部ゲートウェイ設定の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例では、AdminPolicyBasedExternalRoute
オブジェクトは、ラベルが kubernetes.io/metadata.name: novxlan-externalgw-ecmp-4059
の namespace 内にある Pod の外部ゲートウェイとして 2 つの静的 IP アドレスを設定します。
次の例では、AdminPolicyBasedExternalRoute
オブジェクトが動的外部ゲートウェイを設定します。外部ゲートウェイに使用される IP アドレスは、選択した各 Pod に関連付けられた追加のネットワーク割り当てから派生します。
次の例では、AdminPolicyBasedExternalRoute
オブジェクトは静的外部ゲートウェイと動的外部ゲートウェイの両方を設定します。
8.4. セカンダリー外部ゲートウェイの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター内の namespace のデフォルトネットワークに外部ゲートウェイを設定できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
-
AdminPolicyBasedExternalRoute
オブジェクトを含む YAML ファイルを作成します。 管理ポリシーベースの外部ルートを作成するには、次のコマンドを入力します。
oc create -f <file>.yaml
$ oc create -f <file>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<file>
- 前の手順で作成した YAML ファイルの名前を指定します。
出力例
adminpolicybasedexternalroute.k8s.ovn.org/default-route-policy created
adminpolicybasedexternalroute.k8s.ovn.org/default-route-policy created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 管理ポリシーベースの外部ルートが作成されたことを確認するには、次のコマンドを入力します。
oc describe apbexternalroute <name> | tail -n 6
$ oc describe apbexternalroute <name> | tail -n 6
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<name>
-
AdminPolicyBasedExternalRoute
オブジェクトの名前を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.5. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- 追加のネットワークアタッチメントの詳細は、複数ネットワークについて を参照してください。
第9章 Egress IP アドレスの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、1 つ以上の Egress IP アドレスを namespace に、または namespace 内の特定の pod に割り当てるように、OVN-Kubernetes の Container Network Interface (CNI) ネットワークプラグインを設定することができます。
9.1. Egress IP アドレスアーキテクチャーの設計および実装 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform の Egress IP アドレス機能を使用すると、1 つ以上の namespace の 1 つ以上の Pod からのトラフィックに、クラスターネットワーク外のサービスに対する一貫したソース IP アドレスを持たせることができます。
たとえば、クラスター外のサーバーでホストされるデータベースを定期的にクエリーする Pod がある場合があります。サーバーにアクセス要件を適用するために、パケットフィルタリングデバイスは、特定の IP アドレスからのトラフィックのみを許可するよう設定されます。この特定の Pod のみからサーバーに確実にアクセスできるようにするには、サーバーに要求を行う Pod に特定の Egress IP アドレスを設定できます。
namespace に割り当てられた Egress IP アドレスは、特定の宛先にトラフィックを送信するために使用されるスロールーターとは異なります。
一部のクラスター設定では、アプリケーション Pod と Ingress ルーター Pod が同じノードで実行されます。このシナリオでアプリケーションプロジェクトの Egress IP アドレスを設定する場合、アプリケーションプロジェクトからルートに要求を送信するときに IP アドレスは使用されません。
Egress IP アドレスは、ifcfg-eth0
などのように Linux ネットワーク設定ファイルで設定することはできません。
9.1.1. プラットフォームサポート リンクのコピーリンクがクリップボードにコピーされました!
各種のプラットフォームでの Egress IP アドレス機能のサポートについては、以下の表で説明されています。
プラットフォーム | サポート対象 |
---|---|
ベアメタル | はい |
VMware vSphere | はい |
Red Hat OpenStack Platform (RHOSP) | はい |
Amazon Web Services (AWS) | はい |
Google Cloud Platform (GCP) | はい |
Microsoft Azure | はい |
IBM Z® および IBM® LinuxONE | はい |
IBM Z® および IBM® LinuxONE for Red Hat Enterprise Linux (RHEL) KVM | はい |
IBM Power® | はい |
Nutanix | はい |
EgressIP 機能を持つコントロールプレーンノードへの Egress IP アドレスの割り当ては、Amazon Web Services (AWS) でプロビジョニングされるクラスターではサポートされません。(BZ#2039656)。
9.1.2. パブリッククラウドプラットフォームに関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
通常、パブリッククラウドプロバイダーは Egress IP に制限を設けています。つまり、パブリッククラウドインフラストラクチャー上にプロビジョニングされたクラスターでは、ノードごとに割り当て可能な IP アドレスの絶対数に制約があります。ノードごとに割り当て可能な IP アドレスの最大数、つまり IP 容量 は、次の式で表すことができます。
IP capacity = public cloud default capacity - sum(current IP assignments)
IP capacity = public cloud default capacity - sum(current IP assignments)
Egress IP 機能はノードごとの IP アドレス容量を管理しますが、デプロイメントでこの制約を計画することが重要です。たとえば、パブリッククラウドプロバイダーが IP アドレス容量をノードあたり 10 個に制限していて、ノードが 8 個ある場合、割り当て可能な IP アドレスの合計数は 80 個だけになります。IP アドレス容量を引き上げるには、追加のノードを割り当てる必要があります。たとえば、割り当て可能な IP アドレスが 150 個必要な場合は、7 つの追加のノードを割り当てる必要があります。
パブリッククラウド環境内の任意のノードの IP 容量とサブネットを確認するには、oc get node <node_name> -o yaml
コマンドを入力します。cloud.network.openshift.io/egress-ipconfig
アノテーションには、ノードの容量とサブネット情報が含まれています。
アノテーション値は、プライマリーネットワークインターフェイスに次の情報を提供するフィールドを持つ単一のオブジェクトを持つ配列です。
-
interface
: AWS と Azure のインターフェイス ID と GCP のインターフェイス名を指定します。 -
ifaddr
: 一方または両方の IP アドレスファミリーのサブネットマスクを指定します。 -
capacity
: ノードの IP アドレス容量を指定します。AWS では、IP アドレス容量は IP アドレスファミリーごとに提供されます。Azure と GCP では、IP アドレスの容量には IPv4 アドレスと IPv6 アドレスの両方が含まれます。
ノード間のトラフィックの送信 IP アドレスの自動アタッチおよびデタッチが可能です。これにより、namespace 内の多くの Pod からのトラフィックが、クラスター外の場所への一貫した送信元 IP アドレスを持つことができます。これは、OpenShift Container Platform 4.18 の Red Hat OpenShift Networking におけるデフォルトのネットワーキングプラグインである OpenShift SDN および OVN-Kubernetes もサポートします。
RHOSP Egress IP アドレス機能は、egressip-<IP address>
と呼ばれる Neutron 予約ポートを作成します。OpenShift Container Platform クラスターのインストールに使用したものと同じ RHOSP ユーザーを使用して、Floating IP アドレスをこの予約ポートに割り当て、Egress トラフィック用の予測可能な SNAT アドレスを指定できます。RHOSP ネットワーク上の Egress IP アドレスが、ノードのフェイルオーバーなどのためにあるノードから別のノードに移動されると、Neutron 予約ポートが削除され、再作成されます。これは、フローティング IP の関連付けが失われ、フローティング IP アドレスを新しい予約ポートに手動で再割り当てする必要があることを意味します。
RHOSP クラスター管理者が Floating IP を予約ポートに割り当てると、OpenShift Container Platform は予約ポートを削除できません。RHOSP クラスター管理者が予約ポートから Floating IP の割り当てを解除するまで、CloudPrivateIPConfig
オブジェクトは削除および移動操作を実行できません。
次の例は、いくつかのパブリッククラウドプロバイダーのノードからのアノテーションを示しています。アノテーションは、読みやすくするためにインデントされています。
AWS での cloud.network.openshift.io/egress-ipconfig
アノテーションの例
GCP での cloud.network.openshift.io/egress-ipconfig
アノテーションの例
次のセクションでは、容量計算で使用するためにサポートされているパブリッククラウド環境の IP アドレス容量を説明します。
9.1.2.1. Amazon Web Services (AWS) の IP アドレス容量の制限 リンクのコピーリンクがクリップボードにコピーされました!
AWS では、IP アドレスの割り当てに関する制約は、設定されているインスタンスタイプによって異なります。詳細は、IP addresses per network interface per instance type を参照してください。
9.1.2.2. Google Cloud Platform (GCP) の IP アドレス容量の制限 リンクのコピーリンクがクリップボードにコピーされました!
GCP では、ネットワークモデルは、IP アドレスの割り当てではなく、IP アドレスのエイリアス作成を介して追加のノード IP アドレスを実装します。ただし、IP アドレス容量は IP エイリアス容量に直接マッピングされます。
IP エイリアスの割り当てには、次の容量制限があります。
- ノードごとに、IPv4 と IPv6 の両方の IP エイリアスの最大数は 100 です。
- VPC ごとに、IP エイリアスの最大数は指定されていませんが、OpenShift Container Platform のスケーラビリティーテストでは、最大数が約 15,000 であることが明らかになっています。
詳細は、インスタンスごと のクォータと エイリアス IP 範囲の概要 を参照してください。
9.1.2.3. Microsoft Azure IP アドレスの容量制限 リンクのコピーリンクがクリップボードにコピーされました!
Azure では、IP アドレスの割り当てに次の容量制限があります。
- NIC ごとに、IPv4 と IPv6 の両方で割り当て可能な IP アドレスの最大数は 256 です。
- 仮想ネットワークごとに、割り当てられる IP アドレスの最大数は 65,536 を超えることはできません。
詳細は、ネットワークの制限 を参照してください。
9.1.3. 追加のネットワークインターフェイスで Egress IP を使用する場合の考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform では、Egress IP は管理者にネットワークトラフィックを制御する方法を提供します。Egress IP は、br-ex
Open vSwitch (OVS)ブリッジインターフェイスと、IP 接続が有効になっている物理インターフェイスと共に使用できます。
次のコマンドを実行して、ネットワークインターフェイスのタイプを検査できます。
ip -details link show
$ ip -details link show
プライマリーネットワークインターフェイスには、サブネットマスクも含まれるノード IP アドレスが割り当てられます。このノードの IP アドレスの情報は、k8s.ovn.org/node-primary-ifaddr
アノテーションを検査して、クラスター内の各ノードの Kubernetes ノードオブジェクトから取得できます。IPv4 クラスターでは、このアノテーションは "k8s.ovn.org/node-primary-ifaddr: {"ipv4":"192.168.111.23/24"}"
の例に似ています。
Egress IP がプライマリーネットワークインターフェイスのサブネット内にない場合は、プライマリーネットワークインターフェイスタイプではない別の Linux ネットワークインターフェイスで Egress IP を使用できます。これにより、OpenShift Container Platform 管理者は、ルーティング、アドレス指定、セグメンテーション、セキュリティーポリシーなどのネットワーク側面をより高度に制御できるようになります。この機能は、トラフィックのセグメント化や特殊な要件への対応などの目的で、ワークロードトラフィックを特定のネットワークインターフェイス経由でルーティングするオプションもユーザーに提供します。
Egress IP がプライマリーネットワークインターフェイスのサブネット内にない場合、ノード上に Egress トラフィック用の別のネットワークインターフェイスが存在すると、そのネットワークインターフェイスが選択される可能性があります。
k8s.ovn.org/host-cidrs
Kubernetes ノードのアノテーションを検査することで、他のどのネットワークインターフェイスが Egress IP をサポートしているかを判断できます。このアノテーションには、プライマリーネットワークインターフェイスで見つかったアドレスとサブネットマスクが含まれています。また、追加のネットワークインターフェイスアドレスとサブネットマスク情報も含まれます。これらのアドレスとサブネットマスクは、最長接頭辞マッチルーティング メカニズムを使用して、どのネットワークインターフェイスが Egress IP をサポートするかを決定するネットワークインターフェイスに割り当てられます。
OVN-Kubernetes は、特定の namespace および Pod からのアウトバウンドネットワークトラフィックを制御および送信するメカニズムを提供します。これにより、特定のネットワークインターフェイス経由で、特定の Egress IP アドレスを使用してクラスターからトラフィックが出ていきます。
プライマリーネットワークインターフェイスではないネットワークインターフェイスに Egress IP を割り当てる場合の要件
Egress IP とトラフィックをプライマリーネットワークインターフェイスではない特定のインターフェイス経由でルーティングすることを希望する場合は、次の条件を満たす必要があります。
- OpenShift Container Platform がベアメタルクラスターにインストールされている。この機能は、クラウドまたはハイパーバイザー環境内で無効にされています。
- OpenShift Container Platform Pod が ホストのネットワーク として設定されていない。
- ネットワークインターフェイスが削除されるか、egress IP をインターフェイスでホストできる IP アドレスおよびサブネットマスクが削除される場合、egress IP を再設定されます。そのため、egress IP が別のノードおよびインターフェイスに割り当てられる可能性がありました。
- セカンダリーネットワークインターフェイスカード(NIC)で Egress IP アドレスを使用する場合は、Node Tuning Operator を使用してセカンダリー NIC で IP 転送を有効にする必要があります。
9.1.4. Egress IP の Pod への割り当て リンクのコピーリンクがクリップボードにコピーされました!
1 つ以上の Egress IP を namespace に、または namespace の特定の Pod に割り当てるには、以下の条件を満たす必要があります。
-
クラスター内の 1 つ以上のノードに
k8s.ovn.org/egress-assignable: ""
ラベルがなければなりません。 -
EgressIP
オブジェクトが存在し、これは namespace の Pod からクラスターを離脱するトラフィックのソース IP アドレスとして使用する 1 つ以上の Egress IP アドレスを定義します。
Egress IP の割り当て用にクラスター内のノードにラベルを付ける前に EgressIP
オブジェクトを作成する場合、OpenShift Container Platform は k8s.ovn.org/egress-assignable: ""
ラベルですべての Egress IP アドレスを最初のノードに割り当てる可能性があります。
Egress IP アドレスがクラスター内のノード全体に広く分散されるようにするには、EgressIP
オブジェクトを作成する前に、Egress IP アドレスをホストする予定のノードにラベルを常に適用します。
9.1.5. Egress IP のノードへの割り当て リンクのコピーリンクがクリップボードにコピーされました!
EgressIP
オブジェクトを作成する場合、k8s.ovn.org/egress-assignable: ""
ラベルのラベルが付いたノードに以下の条件が適用されます。
- Egress IP アドレスは一度に複数のノードに割り当てられることはありません。
- Egress IP アドレスは、Egress IP アドレスをホストできる利用可能なノード間で均等に分散されます。
EgressIP
オブジェクトのspec.EgressIPs
配列が複数の IP アドレスを指定する場合は、以下の条件が適用されます。- 指定された IP アドレスを複数ホストするノードはありません。
- トラフィックは、指定された namespace の指定された IP アドレス間でほぼ均等に分散されます。
- ノードが利用不可の場合、そのノードに割り当てられる Egress IP アドレスは自動的に再割り当てされます (前述の条件が適用されます)。
Pod が複数の EgressIP
オブジェクトのセレクターに一致する場合、EgressIP
オブジェクトに指定される Egress IP アドレスのどれが Pod の Egress IP アドレスとして割り当てられるのかという保証はありません。
さらに、EgressIP
オブジェクトが複数の送信 IP アドレスを指定する場合、どの送信 IP アドレスが使用されるかは保証されません。たとえば、Pod が 10.10.20.1
と 10.10.20.2
の 2 つの Egress IP アドレスを持つ EgressIP
オブジェクトのセレクターと一致する場合、各 TCP 接続または UDP 会話にいずれかが使用される可能性があります。
9.1.6. Egress IP アドレス設定のアーキテクチャー図 リンクのコピーリンクがクリップボードにコピーされました!
以下の図は、Egress IP アドレス設定を示しています。この図では、クラスターの 3 つのノードで実行される 2 つの異なる namespace の 4 つの Pod を説明します。ノードには、ホストネットワークの 192.168.126.0/18
CIDR ブロックから IP アドレスが割り当てられます。
ノード 1 とノード 3 の両方に k8s.ovn.org/egress-assignable: ""
というラベルが付けられるため、Egress IP アドレスの割り当てに利用できます。
図の破線は、pod1、pod2、および pod3 からのトラフィックフローが Pod ネットワークを通過し、クラスターがノード 1 およびノード 3 から出る様子を示しています。外部サービスが、EgressIP
オブジェクトの例で選択した Pod からトラフィックを受信する場合、送信元 IP アドレスは 192.168.126.10
または 192.168.126.102
のいずれかになります。トラフィックはこれらの 2 つのノード間でほぼ均等に分散されます。
図にある次のリソースの詳細を以下に示します。
Namespace
オブジェクトnamespace は以下のマニフェストで定義されます。
namespace オブジェクト
Copy to Clipboard Copied! Toggle word wrap Toggle overflow EgressIP
オブジェクト以下の
EgressIP
オブジェクトは、env
ラベルがprod
に設定される namespace のすべての Pod を選択する設定を説明しています。選択された Pod の Egress IP アドレスは192.168.126.10
および192.168.126.102
です。EgressIP
オブジェクトCopy to Clipboard Copied! Toggle word wrap Toggle overflow 直前の例の設定の場合、OpenShift Container Platform は両方の Egress IP アドレスを利用可能なノードに割り当てます。
status
フィールドは、Egress IP アドレスの割り当ての有無および割り当てられる場所を反映します。
9.2. EgressIP オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
以下の YAML は、EgressIP
オブジェクトの API を説明しています。オブジェクトの範囲はクラスター全体です。これは namespace では作成されません。
以下の YAML は namespace セレクターのスタンザを説明しています。
namespace セレクタースタンザ
namespaceSelector: matchLabels: <label_name>: <label_value>
namespaceSelector:
matchLabels:
<label_name>: <label_value>
- 1
- namespace の 1 つ以上のマッチングルール。複数のマッチングルールを指定すると、一致するすべての namespace が選択されます。
以下の YAML は Pod セレクターのオプションのスタンザを説明しています。
Pod セレクタースタンザ
podSelector: matchLabels: <label_name>: <label_value>
podSelector:
matchLabels:
<label_name>: <label_value>
- 1
- オプション: 指定された
namespaceSelector
ルールに一致する、namespace の Pod の 1 つ以上のマッチングルール。これが指定されている場合、一致する Pod のみが選択されます。namespace の他の Pod は選択されていません。
以下の例では、EgressIP
オブジェクトは 192.168.126.11
および 192.168.126.102
Egress IP アドレスを、app
ラベルが web
に設定されており、env
ラベルが prod
に設定されている namespace にある Pod に関連付けます。
EgressIP
オブジェクトの例
以下の例では、EgressIP
オブジェクトは、192.168.127.30
および 192.168.127.40
Egress IP アドレスを、environment
ラベルが development
に設定されていない Pod に関連付けます。
EgressIP
オブジェクトの例
9.3. egressIPConfig オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
Egress IP の機能の 1 つとして、reachabilityTotalTimeoutSeconds
パラメーターがあります。これは、EgressIP ノードの到達可能性チェックの合計タイムアウトを秒単位で設定します。このタイムアウト内に EgressIP ノードに到達できない場合、ノードはダウンしていると宣言されます。
reachabilityTotalTimeoutSeconds
の値は、egressIPConfig
オブジェクトの設定ファイルで設定できます。大きな値を設定すると、EgressIP 実装のノードの変更に対する反応が遅くなる可能性があります。問題が発生して到達できない EgressIP ノードに対しては、実装の反応が遅くなります。
egressIPConfig
オブジェクトから reachabilityTotalTimeoutSeconds
パラメーターを省略すると、適切なデフォルト値が選択されます。ただし、この値は時間が経過すると変更される可能性があります。現在のデフォルトは 1
秒です。値が 0
の場合、EgressIP ノードの到達可能性チェックは無効になります。
次の egressIPConfig
オブジェクトでは、reachabilityTotalTimeoutSeconds
をデフォルトの 1
秒プローブから 5
秒プローブに変更するよう指定しています。
9.4. Egress IP アドレスをホストするノードのラベル付け リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform が 1 つ以上の Egress IP アドレスをノードに割り当てることができるように、k8s.ovn.org/egress-assignable=""
ラベルをクラスター内のノードに適用することができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - クラスター管理者としてクラスターにログインします。
手順
1 つ以上の Egress IP アドレスをホストできるようにノードにラベルを付けるには、以下のコマンドを入力します。
oc label nodes <node_name> k8s.ovn.org/egress-assignable=""
$ oc label nodes <node_name> k8s.ovn.org/egress-assignable=""
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ラベルを付けるノードの名前。
ヒントまたは、以下の YAML を適用してラベルをノードに追加できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
第10章 Egress IP アドレスの割り当て リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、namespace または namespace の特定の Pod からクラスターを出るトラフィックに Egress IP アドレスを割り当てることができます。
10.1. Egress IP アドレスの namespace への割り当て リンクのコピーリンクがクリップボードにコピーされました!
1 つ以上の Egress IP アドレスを namespace または namespace の特定の Pod に割り当てることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - クラスター管理者としてクラスターにログインします。
- Egress IP アドレスをホストするように 1 つ以上のノードを設定します。
手順
EgressIP
オブジェクトを作成します。-
<egressips_name>.yaml
ファイルを作成します。<egressips_name>
はオブジェクトの名前になります。 作成したファイルで、以下の例のように
EgressIP
オブジェクトを定義します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
オブジェクトを作成するには、以下のコマンドを入力します。
oc apply -f <egressips_name>.yaml
$ oc apply -f <egressips_name>.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<egressips_name>
をオブジェクトの名前に置き換えます。
出力例
egressips.k8s.ovn.org/<egressips_name> created
egressips.k8s.ovn.org/<egressips_name> created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: 後に変更できるように
<egressips_name>.yaml
ファイルを保存します。 Egress IP アドレスを必要とする namespace にラベルを追加します。手順 1 で定義した
EgressIP
オブジェクトの namespace にラベルを追加するには、以下のコマンドを実行します。oc label ns <namespace> env=qa
$ oc label ns <namespace> env=qa
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<namespace>
は、Egress IP アドレスを必要とする namespace に置き換えてください。
検証
クラスターで使用されているすべての Egress IP を表示するには、次のコマンドを入力します。
oc get egressip -o yaml
$ oc get egressip -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記oc get egressip
コマンドは、設定されている数に関係なく、1 つの Egress IP アドレスのみを返します。これはバグではなく、Kubernetes の制限です。回避策として、-o yaml
または-o json
フラグを渡して、使用中のすべての Egress IP アドレスを返すことができます。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第11章 出力サービスの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Egress サービスを使用して、ロードバランサーサービスの背後にある Pod の Egress トラフィックを設定できます。
Egress サービスはテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
EgressService
カスタムリソース (CR) を使用して、次の方法で送信トラフィックを管理できます。
ロードバランサーサービスの IP アドレスを、ロードバランサーサービスの背後にある Pod の送信トラフィックの送信元 IP アドレスとして割り当てます。
このコンテキストでは、ロードバランサーの IP アドレスを送信元 IP アドレスとして割り当てると、単一の Egress と Ingress を提供するのに役立ちます。たとえば、一部のシナリオでは、ロードバランサーサービスの背後でアプリケーションと通信する外部システムは、アプリケーションの送信元 IP アドレスと宛先 IP アドレスが同じであると想定できます。
注記ロードバランサーサービスの IP アドレスをサービスの背後にある Pod の Egress トラフィックに割り当てると、OVN-Kubernetes は Ingress ポイントと Egress ポイントを単一のノードに制限します。これにより、MetalLB が通常提供するトラフィックのロードバランシングが制限されます。
ロードバランサーの背後にある Pod の Egress トラフィックを、デフォルトノードネットワークとは異なるネットワークに割り当てます。
これは、ロードバランサーの背後にあるアプリケーションの Egress トラフィックを、デフォルトネットワークとは異なるネットワークに割り当てる場合に便利です。通常、別のネットワークは、ネットワークインターフェイスに関連付けられた VRF インスタンスを使用して実装されます。
11.1. Egress サービスのカスタムリソース リンクのコピーリンクがクリップボードにコピーされました!
EgressService
カスタムリソースで Egress サービスの設定を定義します。次の YAML は、egress サービスの設定のフィールドを説明します。
- 1
- Egress サービスの名前を指定します。
EgressService
リソースの名前は、変更するロードバランサーサービスの名前と一致する必要があります。 - 2
- Egress サービスの namespace を指定します。
EgressService
の namespace は、変更するロードバランサーサービスの namespace と一致する必要があります。Egress サービスは namespace スコープです。 - 3
- サービスの背後にある Pod の Egress トラフィックの送信元 IP アドレスを指定します。有効な値は、
LoadBalancerIP
またはNetwork
です。LoadBalancerIP
値を使用して、LoadBalancer
サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。ネットワーク
を指定して、ネットワークインターフェイス IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。 - 4
- オプション:
sourceIPBy
指定にLoadBalancerIP
値を使用する場合、単一ノードがLoadBalancer
サービストラフィックを処理します。このタスクを割り当て可能なノードを制限するには、nodeSelector
フィールドを使用します。サービストラフィックを処理するノードが選択されると、OVN-Kubernetes はそのノードにegress-service.k8s.ovn.org/<svc-namespace>-<svc-name>: ""
という形式でラベルを付けます。nodeSelector
フィールドが指定されていない場合、どのノードでもLoadBalancer
サービストラフィックを管理できます。 - 5
- オプション: Egress トラフィックのルーティングテーブル ID を指定します。必ず
NodeNetworkConfigurationPolicy
リソースで定義されているroute-table-id
ID と一致する値を指定してください。network
仕様を含めない場合、Egress サービスはデフォルトのホストネットワークを使用します。
Egress サービス仕様の例
11.2. Egress サービスのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Egress サービスをデプロイして、LoadBalancer
サービスの背後にある Pod の Egress トラフィックを管理できます。
次の例では、LoadBalancer
サービスの Ingress IP アドレスと同じ送信元 IP アドレスを持つように Egress トラフィックを設定します。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。 -
MetalLB
BGPPeer
リソースを設定している。
手順
サービスに必要な IP を使用して
IPAddressPool
CR を作成します。次の例のような内容を含むファイル (
ip-addr-pool.yaml
など) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IP アドレスプールの設定を適用します。
oc apply -f ip-addr-pool.yaml
$ oc apply -f ip-addr-pool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Service
CR およびEgressService
CR を作成します。次の例のような内容を含むファイル
(service-egress-service.yaml
など) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
LoadBalancer
サービスは、example-pool
IP アドレスプールから MetalLB によって割り当てられた IP アドレスを使用します。- 2
- この例では、
LoadBalancerIP
値を使用して、LoadBalancer
サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てます。 - 3
LoadBalancerIP
値を指定すると、単一ノードがLoadBalancer
サービスのトラフィックを処理します。この例では、トラフィックを処理する場合にworker
ラベルが割り当てられたノードのみを選択できます。ノードが選択されると、OVN-Kubernetes はそのノードにegress-service.k8s.ovn.org/<svc-namespace>-<svc-name>: ""
という形式でラベルを付けます。
注記sourceIPBy: "LoadBalancerIP"
設定を使用する場合は、BGPAdvertisement
カスタムリソース (CR) でロードバランサーノードを指定する必要があります。次のコマンドを実行して、サービスと Egress サービスの設定を適用します。
oc apply -f service-egress-service.yaml
$ oc apply -f service-egress-service.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
BGPAdvertisement
CR を作成してサービスをアドバタイズします。次の例のような内容を含むファイル
(service-bgp-advertisement.yaml
など) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この例では、
EgressService
CR は、ロードバランサーサービス IP アドレスを使用するように、Egress トラフィックの送信元 IP アドレスを設定します。したがって、Pod から発信されるトラフィックに同じリターンパスを使用するには、リターントラフィックのロードバランサーノードを指定する必要があります。
検証
次のコマンドを実行して、MetalLB サービスの背後で実行されている Pod のアプリケーションエンドポイントにアクセスできることを確認します。
curl <external_ip_address>:<port_number>
$ curl <external_ip_address>:<port_number>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- アプリケーションのエンドポイントに合わせて外部 IP アドレスとポート番号を更新します。
-
LoadBalancer
サービスの Ingress IP アドレスを Egress トラフィックの送信元 IP アドレスとして割り当てた場合は、tcpdump
などのツールを使用して外部クライアントで受信したパケットを分析し、この設定を確認します。
第12章 Egress ルーター Pod の使用に関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
12.1. Egress ルーター Pod について リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Egress ルーター Pod は、他の用途で使用されていないプライベートソース IP アドレスから指定されたリモートサーバーにトラフィックをリダイレクトします。Egress ルーター Pod により、特定の IP アドレスからのアクセスのみを許可するように設定されたサーバーにネットワークトラフィックを送信できます。
Egress ルーター Pod はすべての発信接続のために使用されることが意図されていません。多数の Egress ルーター Pod を作成することで、ネットワークハードウェアの制限を引き上げられる可能性があります。たとえば、すべてのプロジェクトまたはアプリケーションに Egress ルーター Pod を作成すると、ソフトウェアの MAC アドレスのフィルターに戻る前にネットワークインターフェイスが処理できるローカル MAC アドレス数の上限を超えてしまう可能性があります。
Egress ルーターイメージには Amazon AWS, Azure Cloud またはレイヤー 2 操作をサポートしないその他のクラウドプラットフォームとの互換性がありません。それらに macvlan トラフィックとの互換性がないためです。
12.1.1. Egress ルーターモード リンクのコピーリンクがクリップボードにコピーされました!
リダイレクトモード では、Egress ルーター Pod は、トラフィックを独自の IP アドレスから 1 つ以上の宛先 IP アドレスにリダイレクトするために iptables
ルールをセットアップします。予約された送信元 IP アドレスを使用する必要があるクライアント Pod は、宛先 IP に直接接続するのではなく、スロールーターのサービスにアクセスするように設定する必要があります。curl
コマンドを使用して、アプリケーション Pod から宛先サービスとポートにアクセスできます。以下に例を示します。
curl <router_service_IP> <port>
$ curl <router_service_IP> <port>
Egress ルーター CNI プラグインはリダイレクトモードのみをサポートします。Egress ルーター CNI プラグインは、HTTP プロキシーモードまたは DNS プロキシーモードをサポートしていません。
12.1.2. Egress ルーター Pod の実装 リンクのコピーリンクがクリップボードにコピーされました!
Egress ルーターの実装では、Egress ルーターの Container Network Interface (CNI) プラグインを使用します。プラグインはセカンダリーネットワークインターフェイスを Pod に追加します。
Egress ルーターは、2 つのネットワークインターフェイスを持つ Pod です。たとえば、Pod には、eth0
および net1
ネットワークインターフェイスを使用できます。eth0
インターフェイスはクラスターネットワークにあり、Pod は通常のクラスター関連のネットワークトラフィックにこのインターフェイスを引き続き使用します。net1
インターフェイスはセカンダリーネットワークにあり、そのネットワークの IP アドレスとゲートウェイを持ちます。OpenShift Container Platform クラスターの他の Pod は Egress ルーターサービスにアクセスでき、サービスにより Pod が外部サービスにアクセスできるようになります。Egress ルーターは、Pod と外部システム間のブリッジとして機能します。
Egress ルーターから出るトラフィックはノードで終了しますが、パケットには Egress ルーター Pod からの net1
インターフェイスの MAC アドレスがあります。
Egress ルーターのカスタムリソースを追加すると、Cluster Network Operator は以下のオブジェクトを作成します。
-
Pod の
net1
セカンダリーネットワークインターフェイス用のネットワーク接続定義。 - Egress ルーターのデプロイメント。
Egress ルーターカスタムリソースを削除する場合、Operator は Egress ルーターに関連付けられた直前のリストの 2 つのオブジェクトを削除します。
12.1.3. デプロイメントに関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
Egress ルーター Pod は追加の IP アドレスおよび MAC アドレスをノードのプライマリーネットワークインターフェイスに追加します。その結果、ハイパーバイザーまたはクラウドプロバイダーを、追加のアドレスを許可するように設定する必要がある場合があります。
- Red Hat OpenStack Platform (RHOSP)
OpenShift Container Platform を RHOSP にデプロイする場合、OpenStack 環境の Egress ルーター Pod の IP および MAC アドレスからのトラフィックを許可する必要があります。トラフィックを許可しないと、通信は失敗 します。
openstack port set --allowed-address \ ip_address=<ip_address>,mac_address=<mac_address> <neutron_port_uuid>
$ openstack port set --allowed-address \ ip_address=<ip_address>,mac_address=<mac_address> <neutron_port_uuid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - VMware vSphere
- VMware vSphere を使用している場合は、vSphere 標準スイッチのセキュリティー保護に関する VMware ドキュメント を参照してください。vSphere Web クライアントからホストの仮想スイッチを選択して、VMware vSphere デフォルト設定を表示し、変更します。
とくに、以下が有効にされていることを確認します。
12.1.4. フェイルオーバー設定 リンクのコピーリンクがクリップボードにコピーされました!
ダウンタイムを回避するにために、Cluster Network Operator は Egress ルーター Pod をデプロイメントリソースとしてデプロイします。デプロイメント名は egress-router-cni-deployment
です。デプロイメントに対応する Pod には app=egress-router-cni
のラベルがあります。
デプロイメントの新規サービスを作成するには、oc expose deployment/egress-router-cni-deployment --port <port_number>
コマンドを使用するか、以下のようにファイルを作成します。
第13章 リダイレクトモードでの Egress ルーター Pod のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、トラフィックを予約された送信元 IP アドレスから指定された宛先 IP アドレスにリダイレクトするように Egress ルーター Pod をデプロイできます。
Egress ルーターの実装では、Egress ルーターの Container Network Interface (CNI) プラグインを使用します。
13.1. Egress ルーターのカスタムリソース リンクのコピーリンクがクリップボードにコピーされました!
Egress ルーターのカスタムリソースで Egress ルーター Pod の設定を定義します。以下の YAML は、リダイレクトモードでの Egress ルーターの設定のフィールドを説明しています。
- 1
- オプション:
namespace
フィールドは、Egress ルーターを作成するための namespace を指定します。ファイルまたはコマンドラインで値を指定しない場合には、default
namespace が使用されます。 - 2
addresses
フィールドは、セカンダリーネットワークインターフェイスに設定する IP アドレスを指定します。- 3
ip
フィールドは、ノードが Egress ルーター Pod と使用する物理ネットワークからの予約済み送信元 IP アドレスとネットマスクを指定します。CIDR 表記を使用して IP アドレスとネットマスクを指定します。- 4
gateway
フィールドは、ネットワークゲートウェイの IP アドレスを指定します。- 5
- オプション:
redirectRules
フィールドは、Egress 宛先 IP アドレス、Egress ルーターポート、およびプロトコルの組み合わせを指定します。指定されたポートとプロトコルでの Egress ルーターへの着信接続は、宛先 IP アドレスにルーティングされます。 - 6
- オプション:
targetPort
フィールドは、宛先 IP アドレスのネットワークポートを指定します。このフィールドが指定されていない場合、トラフィックは到達したネットワークポートと同じネットワークポートにルーティングされます。 - 7
protocol
フィールドは TCP、UDP、または SCTP をサポートします。- 8
- オプション:
fallbackIP
フィールドは、宛先 IP アドレスを指定します。リダイレクトルールを指定しない場合、Egress ルーターはすべてのトラフィックをこのフォールバック IP アドレスに送信します。リダイレクトルールを指定する場合、ルールに定義されていないネットワークポートへの接続は、Egress ルーターによってこのフォールバック IP アドレスに送信されます。このフィールドを指定しない場合、Egress ルーターはルールで定義されていないネットワークポートへの接続を拒否します。
Egress ルーター仕様の例
13.2. リダイレクトモードでの Egress ルーターのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
Egress ルーターをデプロイして、独自の予約済み送信元 IP アドレスから 1 つ以上の宛先 IP アドレスにトラフィックをリダイレクトできます。
Egress ルーターを追加した後に、予約済み送信元 IP アドレスを使用する必要のあるクライアント Pod は、宛先 IP に直接接続するのでなく、Egress ルーターに接続するように変更される必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
- Egress ルーター定義の作成
他の Pod が Egress ルーター Pod の IP アドレスを見つられるようにするには、以下の例のように、Egress ルーターを使用するサービスを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Egress ルーターのラベルを指定します。表示されている値は Cluster Network Operator によって追加され、設定不可能です。
サービスの作成後に、Pod はサービスに接続できます。Egress ルーター Pod は、トラフィックを宛先 IP アドレスの対応するポートにリダイレクトします。接続は、予約された送信元 IP アドレスを起点とします。
検証
Cluster Network Operator が Egress ルーターを起動したことを確認するには、以下の手順を実行します。
Operator が Egress ルーター用に作成したネットワーク接続定義を表示します。
oc get network-attachment-definition egress-router-cni-nad
$ oc get network-attachment-definition egress-router-cni-nad
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワーク接続定義の名前は設定できません。
出力例
NAME AGE egress-router-cni-nad 18m
NAME AGE egress-router-cni-nad 18m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Egress ルーター Pod のデプロイメントを表示します。
oc get deployment egress-router-cni-deployment
$ oc get deployment egress-router-cni-deployment
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメントの名前は設定できません。
出力例
NAME READY UP-TO-DATE AVAILABLE AGE egress-router-cni-deployment 1/1 1 1 18m
NAME READY UP-TO-DATE AVAILABLE AGE egress-router-cni-deployment 1/1 1 1 18m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Egress ルーター Pod のステータスを表示します。
oc get pods -l app=egress-router-cni
$ oc get pods -l app=egress-router-cni
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE egress-router-cni-deployment-575465c75c-qkq6m 1/1 Running 0 18m
NAME READY STATUS RESTARTS AGE egress-router-cni-deployment-575465c75c-qkq6m 1/1 Running 0 18m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Egress ルーター Pod のログとルーティングテーブルを表示します。
Egress ルーター Pod のノード名を取得します。
POD_NODENAME=$(oc get pod -l app=egress-router-cni -o jsonpath="{.items[0].spec.nodeName}")
$ POD_NODENAME=$(oc get pod -l app=egress-router-cni -o jsonpath="{.items[0].spec.nodeName}")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターゲットノードのデバッグセッションに入ります。この手順は、
<node_name>-debug
というデバッグ Pod をインスタンス化します。oc debug node/$POD_NODENAME
$ oc debug node/$POD_NODENAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /host
をデバッグシェル内の root ディレクトリーとして設定します。デバッグ Pod は、Pod 内の/host
にホストのルートファイルシステムをマウントします。ルートディレクトリーを/host
に変更すると、ホストの実行可能パスに含まれるバイナリーを実行できます。chroot /host
# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chroot
環境コンソール内から、Egress ルーターログを表示します。cat /tmp/egress-router-log
# cat /tmp/egress-router-log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この手順で説明されているように、
EgressRouter
オブジェクトを作成して Egress ルーターを起動する場合、ロギングファイルの場所とロギングレベルは設定できません。chroot
環境コンソール内で、コンテナー ID を取得します。crictl ps --name egress-router-cni-pod | awk '{print $1}'
# crictl ps --name egress-router-cni-pod | awk '{print $1}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
CONTAINER bac9fae69ddb6
CONTAINER bac9fae69ddb6
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーのプロセス ID を判別します。この例では、コンテナー ID は
bac9fae69ddb6
です。crictl inspect -o yaml bac9fae69ddb6 | grep 'pid:' | awk '{print $2}'
# crictl inspect -o yaml bac9fae69ddb6 | grep 'pid:' | awk '{print $2}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
68857
68857
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーのネットワーク namespace を入力します。
nsenter -n -t 68857
# nsenter -n -t 68857
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルーティングテーブルを表示します。
ip route
# ip route
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の出力例では、
net1
ネットワークインターフェイスはデフォルトのルートです。クラスターネットワークのトラフィックはeth0
ネットワークインターフェイスを使用します。192.168.12.0/24
ネットワークのトラフィックは、net1
ネットワークインターフェイスを使用し、予約された送信元 IP アドレス192.168.12.99
を起点とします。Pod は他のすべてのトラフィックを IP アドレス192.168.12.1
のゲートウェイにルーティングします。サービスネットワークのルーティングは表示されません。出力例
default via 192.168.12.1 dev net1 10.128.10.0/23 dev eth0 proto kernel scope link src 10.128.10.18 192.168.12.0/24 dev net1 proto kernel scope link src 192.168.12.99 192.168.12.1 dev net1
default via 192.168.12.1 dev net1 10.128.10.0/23 dev eth0 proto kernel scope link src 10.128.10.18 192.168.12.0/24 dev net1 proto kernel scope link src 192.168.12.99 192.168.12.1 dev net1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第14章 プロジェクトのマルチキャストの有効化 リンクのコピーリンクがクリップボードにコピーされました!
14.1. マルチキャストについて リンクのコピーリンクがクリップボードにコピーされました!
IP マルチキャストを使用すると、データが多数の IP アドレスに同時に配信されます。
- 現時点で、マルチキャストは低帯域幅の調整またはサービスの検出での使用に最も適しており、高帯域幅のソリューションとしては適していません。
-
デフォルトでは、ネットワークポリシーは namespace 内のすべての接続に影響します。ただし、マルチキャストはネットワークポリシーの影響を受けません。マルチキャストがネットワークポリシーと同じ namespace で有効にされている場合、
deny-all
ネットワークポリシーがある場合でも、マルチキャストは常に許可されます。クラスター管理者は、これを有効にする前に、ネットワークポリシーからマルチキャストが除外されることの影響を考慮する必要があります。
OpenShift Container Platform の Pod 間のマルチキャストトラフィックはデフォルトで無効にされます。OVN-Kubernetes ネットワークプラグインを使用している場合は、プロジェクトごとにマルチキャストを有効にできます。
14.2. Pod 間のマルチキャストの有効化 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトの Pod でマルチキャストを有効にすることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにログインする必要があります。
手順
以下のコマンドを実行し、プロジェクトのマルチキャストを有効にします。
<namespace>
を、マルチキャストを有効にする必要のある namespace に置き換えます。oc annotate namespace <namespace> \ k8s.ovn.org/multicast-enabled=true
$ oc annotate namespace <namespace> \ k8s.ovn.org/multicast-enabled=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントまたは、以下の YAML を適用してアノテーションを追加できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
マルチキャストがプロジェクトについて有効にされていることを確認するには、以下の手順を実行します。
現在のプロジェクトを、マルチキャストを有効にしたプロジェクトに切り替えます。
<project>
をプロジェクト名に置き換えます。oc project <project>
$ oc project <project>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マルチキャストレシーバーとして機能する Pod を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マルチキャストセンダーとして機能する Pod を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいターミナルウィンドウまたはタブで、マルチキャストリスナーを起動します。
Pod の IP アドレスを取得します。
POD_IP=$(oc get pods mlistener -o jsonpath='{.status.podIP}')
$ POD_IP=$(oc get pods mlistener -o jsonpath='{.status.podIP}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、マルチキャストリスナーを起動します。
oc exec mlistener -i -t -- \ socat UDP4-RECVFROM:30102,ip-add-membership=224.1.0.1:$POD_IP,fork EXEC:hostname
$ oc exec mlistener -i -t -- \ socat UDP4-RECVFROM:30102,ip-add-membership=224.1.0.1:$POD_IP,fork EXEC:hostname
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
マルチキャストトランスミッターを開始します。
Pod ネットワーク IP アドレス範囲を取得します。
CIDR=$(oc get Network.config.openshift.io cluster \ -o jsonpath='{.status.clusterNetwork[0].cidr}')
$ CIDR=$(oc get Network.config.openshift.io cluster \ -o jsonpath='{.status.clusterNetwork[0].cidr}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マルチキャストメッセージを送信するには、以下のコマンドを入力します。
oc exec msender -i -t -- \ /bin/bash -c "echo | socat STDIO UDP4-DATAGRAM:224.1.0.1:30102,range=$CIDR,ip-multicast-ttl=64"
$ oc exec msender -i -t -- \ /bin/bash -c "echo | socat STDIO UDP4-DATAGRAM:224.1.0.1:30102,range=$CIDR,ip-multicast-ttl=64"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マルチキャストが機能している場合、直前のコマンドは以下の出力を返します。
mlistener
mlistener
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第15章 プロジェクトのマルチキャストの無効化 リンクのコピーリンクがクリップボードにコピーされました!
15.1. Pod 間のマルチキャストの無効化 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトの Pod でマルチキャストを無効にすることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにログインする必要があります。
手順
以下のコマンドを実行して、マルチキャストを無効にします。
oc annotate namespace <namespace> \ k8s.ovn.org/multicast-enabled-
$ oc annotate namespace <namespace> \
1 k8s.ovn.org/multicast-enabled-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- マルチキャストを無効にする必要のあるプロジェクトの
namespace
。
ヒントまたは、以下の YAML を適用してアノテーションを削除できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第16章 ネットワークフローの追跡 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、以下の領域をサポートする、クラスターからの Pod ネットワークフローに関する情報を収集できます。
- Pod ネットワークで Ingress および Egress トラフィックをモニターします。
- パフォーマンスに関する問題のトラブルシューティング
- 容量計画およびセキュリティー監査に関するデータを収集します。
ネットワークフローのコレクションを有効にすると、トラフィックに関するメタデータのみが収集されます。たとえば、パケットデータは収集されませんが、プロトコル、ソースアドレス、宛先アドレス、ポート番号、バイト数、その他のパケットレベルの情報を収集します。
データは、以下の 1 つ以上のレコード形式で収集されます。
- NetFlow
- sFlow
- IPFIX
1 つ以上のコレクター IP アドレスおよびポート番号を使用して Cluster Network Operator (CNO) を設定する場合、Operator は各ノードで Open vSwitch (OVS) を設定し、ネットワークフローレコードを各コレクターに送信します。
Operator を、複数のネットワークフローコレクターにレコードを送信するように設定できます。たとえば、レコードを NetFlow コレクターに送信し、レコードを sFlow コレクターに送信することもできます。
OVS がデータをコレクターに送信すると、それぞれのタイプのコレクターは同一レコードを受け取ります。たとえば、2 つの NetFlow コレクターを設定すると、ノード上の OVS は同じレコードを 2 つのコレクターに送信します。また、2 つの sFlow コレクターを設定した場合には、2 つの sFlow コレクターが同じレコードを受け取ります。ただし、各コレクタータイプには固有のレコード形式があります。
ネットワークフローデータを収集し、レコードをコレクターに送信すると、パフォーマンスに影響があります。ノードは低速でパケットを処理します。パフォーマンスへの影響が大きすぎる場合は、コレクターの宛先を削除し、ネットワークフローデータの収集を無効にしてパフォーマンスを回復できます。
ネットワークフローコレクターを有効にすると、クラスターネットワークの全体的なパフォーマンスに影響を与える可能性があります。
16.1. ネットワークフローを追跡するためのネットワークオブジェクト設定 リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) でネットワークフローコレクターを設定するフィールドを以下の表に示します。
フィールド | 型 | 説明 |
---|---|---|
|
|
CNO オブジェクトの名前。この名前は常に |
|
|
1 つ以上の |
|
| 最大 10 コレクターの IP アドレスとネットワークポートのペアのリスト。 |
|
| 最大 10 コレクターの IP アドレスとネットワークポートのペアのリスト。 |
|
| 最大 10 コレクターの IP アドレスとネットワークポートのペアのリスト。 |
以下のマニフェストを CNO に適用した後に、Operator は、192.168.1.99:2056
でリッスンする NetFlow コレクターにネットワークフローレコードを送信するようにクラスター内の各ノードで Open vSwitch (OVS) を設定します。
ネットワークフローを追跡するための設定例
16.2. ネットワークフローコレクターの宛先の追加 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者として、Cluster Network Operator (CNO) を設定して、Pod ネットワークに関するネットワークフローメタデータのネットワークフローコレクターへの送信を停止することができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - ネットワークフローコレクターがあり、リッスンする IP アドレスとポートを把握している。
手順
ネットワークフローコレクターのタイプおよびコレクターの IP アドレスとポート情報を指定するパッチファイルを作成します。
spec: exportNetworkFlows: netFlow: collectors: - 192.168.1.99:2056
spec: exportNetworkFlows: netFlow: collectors: - 192.168.1.99:2056
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークフローコレクターで CNO を設定します。
oc patch network.operator cluster --type merge -p "$(cat <file_name>.yaml)"
$ oc patch network.operator cluster --type merge -p "$(cat <file_name>.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
検証
検証は通常必須ではありません。以下のコマンドを実行して、各ノードの Open vSwitch (OVS) がネットワークフローレコードを 1 つ以上のコレクターに送信するように設定されていることを確認できます。
Operator 設定を表示して、
exportNetworkFlows
フィールドが設定されていることを確認します。oc get network.operator cluster -o jsonpath="{.spec.exportNetworkFlows}"
$ oc get network.operator cluster -o jsonpath="{.spec.exportNetworkFlows}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{"netFlow":{"collectors":["192.168.1.99:2056"]}}
{"netFlow":{"collectors":["192.168.1.99:2056"]}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各ノードから OVS のネットワークフロー設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3. ネットワークフローコレクターのすべての宛先の削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者として、Cluster Network Operator (CNO) を設定して、ネットワークフローメタデータのネットワークフローコレクターへの送信を停止することができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。
手順
すべてのネットワークフローコレクターを削除します。
oc patch network.operator cluster --type='json' \ -p='[{"op":"remove", "path":"/spec/exportNetworkFlows"}]'
$ oc patch network.operator cluster --type='json' \ -p='[{"op":"remove", "path":"/spec/exportNetworkFlows"}]'
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
第17章 ハイブリッドネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Red Hat OpenShift Networking OVN-Kubernetes ネットワークプラグインを設定して、Linux および Windows ノードがそれぞれ Linux および Windows ワークロードをホストできるようにすることができます。
17.1. OVN-Kubernetes を使用したハイブリッドネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
OVN-Kubernetes ネットワークプラグインを使用してハイブリッドネットワークを使用するようにクラスターを設定できます。これにより、異なるノードのネットワーク設定をサポートするハイブリッドクラスターが可能になります。
この設定は、同じクラスター内で Linux ノードと Windows ノードの両方を実行するために必要です。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - クラスターが OVN-Kubernetes ネットワークプラグインを使用していることを確認します。
手順
OVN-Kubernetes ハイブリッドネットワークオーバーレイを設定するには、次のコマンドを入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
cidr
- 追加のオーバーレイネットワーク上のノードに使用される CIDR 設定を指定します。この CIDR は、クラスターネットワーク CIDR と重複させることはできません。
hostPrefix
-
それぞれの個別ノードに割り当てるサブネット接頭辞の長さを指定します。たとえば、
hostPrefix
が23
に設定されている場合、各ノードに指定のcidr
から/23
サブネットが割り当てられます。これにより、510 (2^(32 - 23) - 2) Pod IP アドレスが許可されます。外部ネットワークからのノードへのアクセスを提供する必要がある場合には、ロードバランサーおよびルーターを、トラフィックを管理するように設定します。 hybridOverlayVXLANPort
-
追加のオーバーレイネットワークのカスタム VXLAN ポートを指定します。これは、vSphere にインストールされたクラスターで Windows ノードを実行するために必要であり、その他のクラウドプロバイダー用に設定することはできません。カスタムポートには、デフォルトの
4789
ポートを除くいずれかのオープンポートを使用できます。この要件の詳細は、Microsoft ドキュメントの Pod-to-pod connectivity between hosts is broken を参照してください。
出力例
network.operator.openshift.io/cluster patched
network.operator.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定がアクティブであることを確認するには、以下のコマンドを入力します。更新が適用されるまでに数分の時間がかかることがあります。
oc get network.operator.openshift.io -o jsonpath="{.items[0].spec.defaultNetwork.ovnKubernetesConfig}"
$ oc get network.operator.openshift.io -o jsonpath="{.items[0].spec.defaultNetwork.ovnKubernetesConfig}"
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.