OpenShift 仮想化のための仮想ネットワーク・インターフェイスの管理
仮想プライベートクラウド 4.20 その後 ベアメタルワーカーノードのみ RHCOSのみ OVN- Kubernetes CNIが必要
Virtual Network Interfaces (VNI) を使用すると、 OpenShift Virtualization で Red Hat OpenShift on IBM Cloud クラスタ上で動作する仮想マシン (VM) の高度なネットワーク接続を有効にできます。
仮想ネットワークインターフェースを理解する
仮想ネットワーク・インターフェイス(VNI)は、 IBM Cloud VPCの抽象化で、個々のネットワーク接続を表します。 VNIは、IPアドレス、MACアドレス、所属するVPCサブネットなど、ネットワーク接続のプロパティを埋め込む。
VNIは、ベアメタルワーカーノードを持つクラスタでのみ利用可能です。
Red Hat OpenShift on IBM Cloud は、VNIベースのネットワーク・アタッチメントを使用して、クラスタ上で実行されているワークロードとクラスタ外のワークロードとの柔軟な接続を可能にします。 VNI は、 Localnet のトポロジーで OVN User Defined Networks (UDN) を使用することで、 OpenShift Virtualization ベースの仮想マシン(VM)を VPC ネットワークに直接ネットワーク接続できるようにします。
ベアメタルワーカーノードに接続されたVNIでは、VMのライブマイグレーションがネットワーク接続を維持することができます。VNIは、同じゾーン内のベアメタルワーカーインスタンス間で、 VM ワークロードを暗黙的にフローティングし、フォローすることができるからです。
主な機能
- ワーカーノードごとの静的VNI
- IBM Cloud VPC でベアメタルベースの Red Hat OpenShift on IBM Cloud クラスタまたは新しいワーカープールを作成すると、2 つの VNI が自動的に作成され、各ベアメタルワーカーノードに静的にアタッチされます。 1つのVNIが通常のワーカートラフィック(ポッドネットワーク、オーバーレイUDN、マスター通信)を処理する。 2番目のVNIは、あなたが管理するダイナミックVNIアタッチメントのキャリアとして機能する。
- ダイナミックVNIアタッチメント
- クラスタ作成後にオンデマンドでVNIを作成および管理できます。 ダイナミックVNIは特定のワーカーにアタッチすることも、ライブマイグレーション中に VM、同じゾーン内のワーカー間でフローティングするように設定することもできる。
- ライブ移行サポート
- ベアメタルワーカーノードに接続されたVNIにより、 OpenShift 仮想化ベースのVMのライブマイグレーションは、ネットワーク接続を維持することができます。 VNIは、同一ゾーン内のベアメタルワーカーインスタンス間のワークロードを暗黙的にフローティングし、追従する。
VNIに関する重要な制限と考慮事項については、「 制限と考慮事項 」を参照のこと。
アカウント間アタッチメント
Red Hat OpenShift on IBM Cloud では、ワーカーノードはアカウントプロビジョニングされないため、VNI のライフサイクル管理はスタンドアロン VPC ベアメタルインスタンスとは若干異なります。 VNI はワークロードにアタッチされているため、 Red Hat OpenShift on IBM Cloud クラスタ管理者はアカウント VNI のアタッチメントに対する可視性が異なります。 VNI管理の違いについては、このドキュメントで取り上げている。
スタンドアロンVPCベアメタルインスタンス上のVNIの詳細については、 仮想ネットワークインターフェースについてを 参照してください。
制限と考慮事項
- スタティックVNIの修正
- 各ワーカーノードに自動的に作成される静的VNIを変更しないでください。 これらのVNIはVPC アカウント表示されますが、設定の変更はサポートされていません。 これには、 フローティングIPアタッチ、セキュリティ・グループの変更、その他のVNIプロパティの変更が含まれる。 静的VNIを変更すると、クラスタ接続の問題が発生することがあります。
- フローティング・アタッチメントのVNI修正制限
- フローティング(クラスタ・スコープ)ダイナミック・アタッチメントのVNIプロパティは変更できません。 これには、VNI名、 フローティングIP アドレス、インフラストラクチャNAT設定、およびセキュリティ・グループ割り当ての変更が含まれます。 これらの設定を更新するには、まずVNIを切り離して変更を加え、クラスタに再接続する必要があります。 この制限は一時的なものである。
- ゾーンの制約
- VNIは特定のVPCサブネットにアタッチされ、ゾーン間をフローティングすることはできません。 マルチゾーン Red Hat OpenShift on IBM Cloud クラスタでは、VNI は VNI がプロビジョニングされた同じゾーン内のクラスタワーカー上で実行されているワークロードのトラフィックのみを処理できます。 これはまた、特定の VM がローカルネットUDN上のVNIを使用している場合、 OpenShift 仮想化 VM ゾーン間のライブマイグレーションを避けなければならないことを意味する。
- ベアメタル要件
- VNIはベアメタルワーカーノードでのみサポートされます。 仮想サーバーインスタンス(VSI)ワーカーノードはVNIをサポートしていません。
- RHCOSの要件
- ワーカーノードは、 Red Hat CoreOS (RHCOS)オペレーティングシステムを実行する必要があります。
- OVN- Kubernetes CNI
- クラスタは OVN- Kubernetes Container Network Interface (CNI) プラグインを使用する必要があります。
- バージョン要件
- VNIのサポートには OpenShift 4.20 以降が必要。
- ローカルネットUDNの制限
- ローカルネットUDNは、OVN側でIPアドレス管理(IPAM)が無効になっているため、OVNからポッドへの静的IPアドレスの割り当ては行われない。 この構成は、DHCPを使用するか、ゲスト・オペレーティング・システム内で静的IPを設定する VM ワークロード用に設計されている。 通常のポッドはローカルネットUDNにアタッチできない。
前提条件
作業を開始する前に、以下のリソースと権限が確保されていることを確認してください。
- Red Hat OpenShift on IBM Cloud クラスタ、バージョン 4.20 以降、ベアメタルワーカーノード
- VNIを作成したVPCインフラストラクチャ
- ワーカーノードのRHCOSオペレーティングシステム
- OpenShift 仮想化オペレータのインストール
- OpenShift 仮想化用に構成されたストレージ
- の Operator プラットフォームアクセスロールは Kubernetes ServiceIBM Cloud IAM
- IBM Cloud IAMのVPCインフラストラクチャ・サービスの編集者または管理者プラットフォーム・アクセス・ロール
- VNI機能のためのアカウントアクセスを許可する
- OVN- Kubernetes CNI ( 4.20 +のVNIサポートに必要)
マルチネットワーク構成に関する一般的な情報については、 Red Hat OpenShift マルチネットワークドキュメントを参照してください。
PodとVM用のオーバーレイUDNの作成
ポッドまたは VM ワークロードで使用するオーバーレイユーザー定義ネットワークを作成できます。 ユーザー定義ネットワーク用の OpenShift コンソール UI エクスペリエンスは、最近のリリースで変更される可能性があります。 このドキュメントの例では、再利用性のためにYAML定義を使っています。
プライマリUDNの作成
プライマリユーザー定義ネットワークをポッドまたは VM ワークロードに使用するには、まず UDN 自体を作成します。
ネームスペース間で使用できるクラスタ・ユーザ定義ネットワークの例:
apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
name: primary
spec:
namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: green
network:
layer2:
ipam:
lifecycle: Persistent
role: Primary
subnets:
- 10.0.0.0/24
topology: Layer2
次に、それを使用するネームスペースを作成します。 名前空間は、プライマリUDNを使用するために、作成時に特定のラベル( k8s.ovn.org/primary-user-defined-network )が含まれていなければならない。
次に例を示します。
kind: Namespace
apiVersion: v1
metadata:
name: green
labels:
k8s.ovn.org/primary-user-defined-network: ''
(C)UDNと名前空間が配置されると、この名前空間で作成されたワークロードはすべて、デフォルトのルートでUDNにアクセスする。
セカンダリUDNの作成
セカンダリーUDNの構成はプライマリーUDNと似ているが、役割は Secondary に設定されている。 詳細については、 Red Hat OpenShift 複数ネットワークのドキュメントを参照してください。
VPCロードバランサーによるVMの公開
VPCアプリケーション・ロード・バランサーを使用することで、UDNやローカルネットVNIを使用せずにVMを公開することができます。 ロードバランサーの設定については、 VPCロードバランサーについてを 参照してください。
localnetユーザー定義ネットワークの設定
ローカルネットのUDNには、 Red Hat OpenShift on IBM Cloud クラスタのOVNネットワークの準備が必要です。 ベアメタル・クラスター・ノードでは、2つの静的ネットワーク・インターフェースはホスト・オペレーティング・システム上で予測可能な名前を持っています。 ダイナミック・アタッチド VNI トラフィックを伝送する専用のネットワーク・インターフェイスは eth1 と呼ばれる。 Localnetを活用するには、 eth1 の上に、ベアメタル・クラスター・ノード専用のOVSブリッジを作成する必要があります。 VNIをアタッチするために使用するVLAN IDを用意する。 CUDNのリソースでも参照される。
NMStateオペレータのインストール
OpenShift 仮想化サービス クラスタには、NMStateオペレーターがプリインストールされており、 openshift-virtualization アドオンによって管理されています。 Virtualization Service を使用している場合は、この手順をスキップしてください。
-
Red Hat OpenShift on IBM Cloud コンソールの OperatorHub から、または CLI を使用して、NMState Operator を展開します。
-
デフォルトの構成でNMStateインスタンスを作成します。
apiVersion: nmstate.io/v1 kind: NMState metadata: name: nmstate spec: probeConfiguration: dns: host: root-servers.net
OVSブリッジの作成
OpenShift 仮想化サービス クラスタには、必要なNNCPリソースが事前に設定されています。 これらのリソースを手動で作成する必要があるのは、 OpenShift 仮想化機能を手動でインストールした標準的な OpenShift クラスターの場合のみです。
-
以下のNMStateカスタムリソースをデプロイして、
eth1、専用のOVSブリッジを作成する。apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: "br-eth1" spec: desiredState: interfaces: - name: "br-eth1" description: A dedicated OVS bridge with a NIC as a port type: ovs-bridge state: up bridge: allow-extra-patch-ports: true options: stp: false port: - name: "eth1" -
カスタム・リソースのステータスを確認し、該当するすべてのクラスタ・ノードがブリッジ作成要求を照合するまで待ちます。
-
以下のNMStateカスタムリソースを作成して、新しいOVSブリッジをデフォルトのものにパッチする。
vpc-vlansをご希望のネットワーク名に置き換えてください。apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: "vpc-vlans" spec: desiredState: ovn: bridge-mappings: - localnet: "vpc-vlans" bridge: "br-eth1" state: present -
カスタム・リソースのステータスを確認し、該当するすべてのクラスタ・ノードがブリッジ・マッピング要求を照合するまで待ちます。
localnetユーザー定義ネットワークの作成
選択したVLANを使用して、VNIからのトラフィックを利用可能にするUDNまたは ClusterUserDefinedNetwork (CUDN)を作成します。
apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
name: "vlan250"
spec:
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: In
values:
- "default"
network:
topology: Localnet
localnet:
role: "Secondary"
physicalNetworkName: "vpc-vlans"
ipam:
mode: Disabled
vlan:
mode: Access
access:
id: 250
以下の値を置き換えます。
vlan250:あなたのCUDNの名前default:CUDNを使用したい名前空間vpc-vlans:ブリッジマッピングで定義した物理ネットワーク名250:希望のVLAN ID(範囲:1~500)
これで特定のVLANのネットワーク配管は終了です。 ブリッジマッピングを再利用しながら、異なるVLAN IDを使用して複数のCUDNを定義できます。
localnet UDNのセットアップが完了したら、 IBM Cloud コンソールまたは IBM Cloud CLI ks vni コマンドを使用してクラスタにVNIをアタッチできます。 以下のセクションの例を参照のこと。
クラスタにVNIをアタッチする
localnet UDNを設定したら、 IBM Cloud コンソールまたはCLIを使用してクラスタにVNIをアタッチできます。
開始前に
-
適切なサブネットとIPアドレス構成で VPC内にVNIを作成 します。
-
クラスタとVNIの両方を管理するために必要な権限を持っていることを確認してください。
コンソールからVNIをアタッチする
VNIは特定のワーカーノード(フローティングではない)またはクラスタ(フローティング)にアタッチできます。 フローティングVNIは、同じゾーン内のワーカー間のワークロードをフォローできる。
VNI、サブネット、ワーカーノードはゾーンリソースです。 VNIコンピュートゾーンは、選択されたワーカーゾーンと一致しなければならない。 フローティングアタッチメントの場合、VNIのゾーンが想定され、フローティングアタッチメントもゾーン制約を持つ。 VNIは任意のサブネットからアタッチできますが、クラスタと同じVPC内からしかアタッチできません。
-
Red Hat OpenShift on IBM Cloud クラスター・コンソールから、クラスターを選択します。
-
ナビゲーション・メニューで、 Networking > VNI attachmentsをクリックする。
-
VNIのアタッチ] をクリックする。
-
Attach VNIs パネルで、以下の設定を行う:
- サブネット :VNIが配置されているサブネットを選択します。 ワーカーノードと同じゾーンのサブネットのみが利用可能です。
- ワーカーノード :VNIをアタッチする特定のワーカーノードを選択するか、「 すべてのワーカーノード 」を選択して、同じゾーン内のワーカー間でワークロードを追跡できるフローティングVNIアタッチメントを作成します。
- VNI :選択したサブネットで利用可能なVNIからアタッチするVNIを選択します。
- VLAN ID :ローカルネットのUDN設定に一致するVLAN ID(範囲:1~500)を入力します。
- 自動削除 :オプション。 このオプションを選択すると、VNIがクラスタから削除されたときに自動的に削除されます。
-
**「アタッチ」**をクリックします。
CLIからVNIをアタッチする
VNIは特定のワーカーノード(フローティングではない)またはクラスタ(フローティング)にアタッチできます。 フローティングVNIは、同じゾーン内のワーカー間のワークロードをフォローできる。
VNI、サブネット、ワーカーノードはゾーンリソースです。 VNIコンピュートゾーンは、選択されたワーカーゾーンと一致しなければならない。 フローティングアタッチメントの場合、VNIのゾーンが想定され、フローティングアタッチメントもゾーン制約を持つ。 VNIは任意のサブネットからアタッチできますが、クラスタと同じVPC内からしかアタッチできません。
特定のワーカーノードにVNIをアタッチするには、以下のコマンドを実行する。
ibmcloud ks vni attach baremetal --worker WORKER_ID --vni VNI_ID --vlan VLAN_ID [--auto-delete]
フローティングVNIをクラスタにアタッチするには、以下のコマンドを実行する。
ibmcloud ks vni attach baremetal --cluster-id CLUSTER_ID --vni VNI_ID --vlan VLAN_ID [--auto-delete]
--worker WORKER_ID- ワーカーノードのID。 ワーカーIDを一覧表示するには、
ibmcloud ks workers --cluster CLUSTERを実行します。 --cluster-id CLUSTER_ID- クラスタのID。 クラスター ID をリストするには、
ibmcloud ks clustersを実行します。 --vni VNI_ID- アタッチするVNIのID。
--vlan VLAN_ID- アタッチメントのVLAN ID(範囲:1~500)。 これはCUDNコンフィギュレーションのVLAN IDと一致しなければならない。
--auto-delete- オプション:VNIがクラスタから削除されると自動的に削除されます。
例
ibmcloud ks vni attach baremetal --vni 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba --worker kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123 --vlan 251
出力例
OK
Successfully attached VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba to worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123.
Worker Node ID VNI ID VLAN ID
kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba 251
VNI添付ファイルの表示
VNIの添付ファイルは、 IBM Cloud コンソールまたはCLIを使用して表示できます。
コンソールからのVNI添付ファイルの表示
-
Red Hat OpenShift on IBM Cloud クラスター・コンソールから、クラスターを選択します。
-
ナビゲーション・メニューで、 Networking > VNI attachmentsをクリックする。
-
Virtual network interface attachments(仮想ネットワーク・インタフェースのアタッチメント )」ページには、アタッチされたVNIごとに以下の情報を含む表が表示されます:
- VNI名 :仮想ネットワーク・インターフェースの名前
- ワーカーノード名 :VNIがアタッチされているワーカーノード、またはフローティングアタッチメントの場合はそれを示す
- サブネット :VNIに関連するVPCサブネット
- VLAN ID :アタッチメントに使用されるVLAN ID
- プライマリIP :VNIのプライマリIPアドレス
-
オプション:ページ上部のフィルタを使用して、サブネットまたはワーカーノードでVNIをフィルタリングします。
CLIからのVNIアタッチメントの表示
クラスタに接続されているすべてのVNIを一覧表示するには、次のコマンドを実行します。
ibmcloud ks vni ls --cluster-id CLUSTER_ID
特定のワーカーにアタッチされた VNI をリストアップするには、以下のコマンドを実行します。
ibmcloud ks vni ls --worker WORKER_ID
出力例
ibmcloud ks vni ls --cluster-id c9pqfcmw0tq431jdnrrg
OK
VNI ID Worker Node IP Address MAC Address VLAN Floating Auto-delete
0716-d97d3626-acb2-476b-8b12-bcafa1dec5bb kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000456 10.240.1.5 02:00:02:00:73:A5 250 - false
0716-aac49630-f3b4-4ef6-9a3a-5145481697ba kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123 10.240.1.4 02:00:01:00:73:A5 251 - false
VNIの切り離し
VNIのデタッチは、 IBM Cloud コンソールから、またはCLIを使用して行うことができます。
コンソールからVNIを切り離す
-
Red Hat OpenShift on IBM Cloud クラスター・コンソールから、クラスターを選択します。
-
ナビゲーション・メニューで、 Networking > VNI attachmentsをクリックする。
-
Virtual network interface attachments テーブルで、切り離したいVNIを見つけます。
-
VNIのアクションメニューアイコン(⋯)をクリックし、" **Detach **" を選択します。
-
確認ダイアログで、 Detachをクリックしてアクションを確定する。
CLIからVNIを切り離す
ワーカーノードからVNIをデタッチするには、VNI IDとワーカーIDの両方を指定する必要があります。
ibmcloud ks vni detach --worker WORKER_ID --vni VNI_ID
フローティングVNIの場合、まずVNIをリストアップして現在のワーカーIDを見つけ、そのワーカーIDを使ってデタッチする。
例
ibmcloud ks vni detach --vni 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba --worker kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123
Detach VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba from worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123? This action cannot be undone. [y/N]> y
OK
Successfully detached VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba from worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123.
OpenShift 仮想化と VNI の使用
VNI をアタッチし、ローカルネット UDN を設定すると、 OpenShift 仮想化 VM で使用できるようになります。
-
OpenShift VirtualizationでVMを作成し、セカンダリネットワークとしてCUDNを追加する。 ローカルネットのアタッチメントはプライマリ・ネットワークとして使用できない。 OpenShift コンソールを使用して添付ファイルを追加できます。
-
VM オペレーティングシステムがDHCPを使用してIPアドレスを取得できるように、アタッチメントのMACアドレスを指定します。 あるいは、 VM で、VNI IP アドレスをそれぞれのネットワーク・インターフェイスに静的に割り当てることもできます。
VMの作成と管理の詳細については、以下の Red Hat :
VNIのトラブルシューティング
なぜ通常のポッドをローカルネットのUDNにアタッチできないのですか?
ローカルネットUDNは、OVN側でIPアドレス管理(IPAM)が無効になっているため、OVNからポッドへの静的IPアドレスの割り当ては行われない。 この構成は、DHCPを使用するか、ゲスト・オペレーティング・システム内で静的IPを設定する VM ワークロード用に設計されている。 これらのオプションは、ポッドワークロードでは利用できない。
なぜワーカープール間でライブマイグレーションが保留されているのか?
異なるワーカープールには、世代も能力も異なるCPUを搭載した異なるワーカーフレーバーがあるかもしれない。 CPUの全機能セットが VM ワークロードに透過的に見える場合、 VM、CPUの全機能をサポートしていない別のワーカーにライブマイグレーションすることはできません。 Worker のフレーバー間の互換性を高めるために、ゲスト OS の目に見える CPU 機能を最初に制限することができます。
ダイナミック・アタッチドVNIが機能しないのはなぜですか?
以下の項目を確認してください。
- CUDNのVLAN IDがVNIアタッチメントのVLAN IDと一致していることを確認する。 VPCのDHCPは、VLANが不一致の場合でも、それ以上のトラフィックが発生せずに動作する可能性があります。
- フローティングが有効になっていない場合は、VNI がアタッチされているワーカー上でワークロードがスケジュールされていることを確認してください。
- 専用 OVS ブリッジとマッピングがワーカーに存在することを確認する。 NodeNetworkConfigurationPolicy リソースのステータスをチェックする。