23.2. OVN-Kubernetes のアーキテクチャー
23.2.1. OVN-Kubernetes のアーキテクチャーの紹介 リンクのコピーリンクがクリップボードにコピーされました!
次の図は、OVN-Kubernetes のアーキテクチャーを示しています。
図23.1 OVK-Kubernetes のアーキテクチャー
主なコンポーネントは次のとおりです。
- Cloud Management System (CMS) - OVN 統合用の CMS 固有のプラグインを提供する OVN 用のプラットフォーム固有のクライアント。このプラグインは、CMS 固有の形式で CMS 設定データベースに格納されているクラウド管理システムの論理ネットワーク設定の概念を、OVN が理解できる中間表現に変換します。
-
OVN ノースバウンドデータベース (
nbdb
) - CMS プラグインによって渡された論理ネットワーク設定を格納します。 -
OVN サウスバウンドデータベース (
sbdb
) - 各ノードの OpenVswitch (OVS) システムの物理および論理ネットワーク設定状態を、それらをバインドするテーブルを含めて格納します。 -
ovn-northd - これは
nbdb
とsbdb
の間の仲介クライアントです。これは、論理ネットワーク設定を、nbdb
から取得した従来のネットワーク概念の観点から、その下のsbdb
の論理データパスフローに変換します。コンテナー名はnorthd
で、ovnkube-master
Pod で実行されます。 -
ovn-controller - sbdb に必要な情報または更新のために、OVS およびハイパーバイザーと対話する
OVN
エージェントです。ovn-controller
はsbdb
から論理フローを読み取り、それらをOpenFlow
フローに変換して、ノードの OVS デーモンに送信します。コンテナー名はovn-controller
で、ovnkube-node
Pod で実行されます。
OVN ノースバウンドデータベースには、クラウド管理システム (CMS) によって渡された論理ネットワーク設定があります。OVN ノースバウンドデータベースには、ネットワークの現在の望ましい状態が含まれており、論理ポート、論理スイッチ、論理ルーターなどのコレクションとして提示されます。ovn-northd
(northd
コンテナー) は、OVN ノースバウンドデータベースと OVN サウスバウンドデータベースに接続します。これは、論理ネットワーク設定を、OVN ノースバウンドデータベースから取得した従来のネットワーク概念の観点から、OVN サウスバウンドデータベースの論理データパスフローに変換します。
OVN サウスバウンドデータベースには、ネットワークの物理的および論理的表現と、それらをリンクするバインディングテーブルがあります。クラスター内のすべてのノードはサウスバウンドデータベースで表され、管理者はノードに接続されているポートを確認できます。また、サウスバウンドデータベースには、すべてのロジックフローが含まれています。ロジックフローは各ノードで実行される ovn-controller
プロセスと共有され、ovn-controller
はそれらを OpenvSwitch
をプログラムする OpenFlow
ルールに変換します。
Kubernetes コントロールプレーンノードにはそれぞれ、OVN のノースバウンドおよびサウスバウンドデータベースのコンテナーをホストする ovnkube-master
Pod が含まれています。すべての OVN ノースバウンドデータベースは Raft
クラスターを形成し、すべてのサウスバウンドデータベースは別個の Raft
クラスターを形成します。常に 1 つの ovnkube-master
Pod がリーダーとなり、他の ovnkube-master
Pod がフォロワーとなります。
23.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 コントロールプレーンノードで実行される 3 つの
ovnkube-masters
と、ovnkube-master
およびovnkube-node
Pod をデプロイするために使用される 2 つのデーモンセットがあります。クラスター内の各ノードには、1 つのovnkube-node
Pod があります。この例では 5 つあり、クラスター内のノードごとに 1 つのovnkube-node
があるため、クラスター内には 5 つのノードがあります。ovnkube-config
ConfigMap
には、オンラインマスターおよびovnkube-node
によって起動された OpenShift Container Platform OVN-Kubernetes 設定があります。ovn-kubernetes-master
ConfigMap
には、現在のオンラインマスターリーダーの情報があります。次のコマンドを実行して、
ovnkube-master
Pod 内のすべてのコンテナーを一覧表示します。oc get pods ovnkube-master-9g7zt \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
$ oc get pods ovnkube-master-9g7zt \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
northd nbdb kube-rbac-proxy sbdb ovnkube-master ovn-dbchecker
northd nbdb kube-rbac-proxy sbdb ovnkube-master ovn-dbchecker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-master
Pod は、複数のコンテナーで構成されています。ノースバウンドデータベース (nbdb
コンテナー)、サウスバウンドデータベース (sbdb
コンテナー) をホストし、Pod、egressIP、namespace、サービス、エンドポイント、egress ファイアウォール、およびネットワークポリシーのクラスターイベントを監視し、それらをノースバウンドデータベース (ovnkube-master
Pod) に書き込みます。また、ノードへの Pod サブネット割り当てを管理します。次のコマンドを実行して、
ovnkube-node
Pod 内のすべてのコンテナーを一覧表示します。oc get pods ovnkube-node-jg52r \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
$ oc get pods ovnkube-node-jg52r \ -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 kube-rbac-proxy-ovn-metrics ovnkube-node
ovn-controller ovn-acl-logging kube-rbac-proxy kube-rbac-proxy-ovn-metrics ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-node
Pod には、各 OpenShift Container Platform ノードに常駐するコンテナー (ovn-controller
) があります。各ノードのovn-controller
は、OVN ノースバウンドを OVN サウスバウンドデータベースに接続して、OVN 設定を把握します。ovn-controller
は、サウスバウンドを OpenFlow コントローラーとしてovs-vswitchd
に接続し、ネットワークトラフィックを制御します。また、サウスバウンドをローカルのovsdb-server
に接続して、Open vSwitch 設定を監視および制御できるようにします。
23.2.3. OVN-Kubernetes ノースバウンドデータベースの内容の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
ロジックフロールールを理解するには、ノースバウンドデータベースを調べて、そこにあるオブジェクトを理解して、それらがロジックフロールールにどのように変換されるかを確認する必要があります。最新の情報は OVN Raft リーダーに存在します。この手順では、Raft リーダーを検索し、続いてクエリーを実行して OVN ノースバウンドデータベースの内容を一覧表示する方法について説明します。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
ノースバウンドデータベースの OVN Raft リーダーを見つけます。
注記Raft リーダーは最新の情報を保存します。
次のコマンドを実行して、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 の 1 つをランダムに選択し、次のコマンドを実行します。
oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnnb_db.ctl \ --timeout=3 cluster/status OVN_Northbound
$ oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnnb_db.ctl \ --timeout=3 cluster/status OVN_Northbound
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、IP アドレス
10.0.242.240
で実行されているovnkube-master
Pod を見つけます。oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.242.240 | grep -v ovnkube-node
$ oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.242.240 | grep -v ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
ovnkube-master-gt4ms 6/6 Running 1 (143m ago) 150m 10.0.242.240 ip-10-0-242-240.ec2.internal <none> <none>
ovnkube-master-gt4ms 6/6 Running 1 (143m ago) 150m 10.0.242.240 ip-10-0-242-240.ec2.internal <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-master-gt4ms
Pod は、IP アドレス 10.0.242.240 で実行されています。
次のコマンドを実行して、ノースバウンドデータベース内のすべてのオブジェクトを表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl show
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は長すぎてここにリストできません。リストには、NAT ルール、論理スイッチ、ロードバランサーなどが含まれます。
次のコマンドを実行して、コマンド
ovn-nbctl
で使用可能なオプションを表示します。oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd ovn-nbctl --help
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd ovn-nbctl --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドのいくつかを使用すると、特定のコンポーネントに絞り込むことができます。
次のコマンドを実行して、論理ルーターのリストを表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lr-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lr-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この出力から、各ノードにルーターと
ovn_cluster_router
があることがわかります。次のコマンドを実行して、論理スイッチのリストを表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl ls-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl ls-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この出力から、各ノードの ext スイッチに加えて、ノード名自体を持つスイッチと結合スイッチがあることがわかります。
次のコマンドを実行して、ロードバランサーのリストを表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lb-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- 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 のロードバランサーはサービスの表現です。
23.2.4. ノースバウンドデータベースの内容を調べるための ovn-nbctl のコマンドライン引数 リンクのコピーリンクがクリップボードにコピーされました!
次の表に、ノースバウンドデータベースの内容を調べるために ovn-nbctl
で使用できるコマンドライン引数を示します。
引数 | 説明 |
---|---|
| ノースバウンドデータベースの内容の概要。 |
| 指定されたスイッチまたはルーターに関連付けられた詳細を表示します。 |
| 論理ルーターを表示します。 |
|
|
| 指定されたルーターのネットワークアドレス変換の詳細を表示します。 |
| 論理スイッチを表示します。 |
|
|
| 論理ポートのタイプを取得します。 |
| ロードバランサーを表示します。 |
23.2.5. OVN-Kubernetes サウスバウンドデータベースの内容の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
ロジックフロールールは、インフラストラクチャーの表現であるサウスバウンドデータベースに格納されます。最新の情報は OVN Raft リーダーに存在します。この手順では、Raft リーダーを検索し、クエリーを実行して OVN サウスバウンドデータベースの内容を一覧表示する方法について説明します。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
サウスバウンドデータベースの OVN Raft リーダーを見つけます。
注記Raft リーダーは最新の情報を保存します。
次のコマンドを実行して、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 の 1 つをランダムに選択し、次のコマンドを実行して OVN サウスバウンド Raft リーダーを見つけます。
oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnsb_db.ctl \ --timeout=3 cluster/status OVN_Southbound
$ oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnsb_db.ctl \ --timeout=3 cluster/status OVN_Southbound
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、IP アドレス
10.0.163.212
で実行されているovnkube-master
Pod を見つけます。oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.163.212 | grep -v ovnkube-node
$ oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.163.212 | grep -v ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
ovnkube-master-mk6p6 6/6 Running 0 136m 10.0.163.212 ip-10-0-163-212.ec2.internal <none> <none>
ovnkube-master-mk6p6 6/6 Running 0 136m 10.0.163.212 ip-10-0-163-212.ec2.internal <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-master-mk6p6
Pod は、IP アドレス 10.0.163.212 で実行されています。
次のコマンドを実行して、サウスバウンドデータベースに保存されているすべての情報を表示します。
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- ovn-sbctl show
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- 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-master-mk6p6 \ -c northd -- ovn-sbctl --help
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- ovn-sbctl --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.2.6. サウスバウンドデータベースの内容を調べるための ovn-sbctl のコマンドライン引数 リンクのコピーリンクがクリップボードにコピーされました!
次の表に、サウスバウンドデータベースの内容を調べるために ovn-sbctl
で使用できるコマンドライン引数を示します。
引数 | 説明 |
---|---|
| サウスバウンドデータベースの内容の概要。 |
| 指定されたポートのサウスバウンドデータベースの内容を一覧表示します。 |
| 論理フローを一覧表示します。 |
23.2.7. OVN-Kubernetes の論理アーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
OVN はネットワーク仮想化ソリューションです。OVN は論理スイッチとルーターを作成します。これらのスイッチとルーターは相互接続され、任意のネットワークトポロジーを作成します。ログレベルを 2 または 5 に設定して ovnkube-trace
を実行すると、OVN-Kubernetes 論理コンポーネントが公開されます。以下の図は、ルーターとスイッチが OpenShift Container Platform でどのように接続されているかを示しています。
図23.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 つだけです。
23.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
23.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 出力例
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