9.3. 仮想マシンをプライマリーユーザー定義ネットワークに接続する
Red Hat OpenShift Service on AWS Web コンソールまたは CLI を使用して、仮想マシン (VM) を仮想マシンのプライマリーインターフェイス上のユーザー定義ネットワーク (UDN) に接続できます。プライマリーのユーザー定義ネットワークは、指定された namespace 内のデフォルトの Pod ネットワークを置き換えます。Pod ネットワークとは異なり、プロジェクトごとにプライマリー UDN を定義でき、各プロジェクトは特定のサブネットとトポロジーを使用できます。
OpenShift Virtualization は、namespace スコープの UserDefinedNetwork
とクラスタースコープの ClusterUserDefinedNetwork
カスタムリソース定義 (CRD) をサポートします。
クラスター管理者は、プライマリー UserDefinedNetwork
CRD を設定して、ネットワークポリシーを必要とせずにテナント名前空間を他の名前空間から分離するテナントネットワークを作成できます。さらに、クラスター管理者は ClusterUserDefinedNetwork
CRD を使用して、複数の名前空間にわたって共有 OVN ネットワークを作成できます。
ユーザー定義ネットワークで使用する namespace を作成する場合は、k8s.ovn.org/
primary-user-defined-network ラベルを追加する必要があります。
レイヤー 2 トポロジーでは、OVN-Kubernetes はノード間にオーバーレイネットワークを作成します。このオーバーレイネットワークを使用すると、追加の物理ネットワークインフラストラクチャーを設定することなく、さまざまなノード上の仮想マシンを接続できます。
レイヤー 2 トポロジーでは、ライブマイグレーション中に永続的な IP アドレスがクラスターノード間で保持されるため、ネットワークアドレス変換 (NAT) を必要とせずに仮想マシンをシームレスに移行できます。
プライマリー UDN を実装する前に、次の制限を考慮する必要があります。
-
virtctl ssh
コマンドを使用して仮想マシンへの SSH アクセスを設定できません。 -
oc port-forward
コマンドを使用してポートを仮想マシンに転送できません。 - ヘッドレスサービスを使用して仮想マシンにアクセスできません。
- 仮想マシンヘルスチェックを設定するために readiness プローブと liveness プローブを定義できません。
OpenShift Virtualization は現在、セカンダリーユーザー定義ネットワークをサポートしていません。
9.3.1. Web コンソールを使用してプライマリーユーザー定義ネットワークを作成する
Red Hat OpenShift Service on AWS Web コンソールを使用して、プライマリー名前空間スコープの UserDefinedNetwork
またはクラスタースコープの ClusterUserDefinedNetwork
CRD を作成できます。UDN は、ネットワークに関連付けられた名前空間で作成する Pod と仮想マシンのデフォルトのプライマリーネットワークとして機能します。
9.3.1.1. Web コンソールを使用してユーザー定義ネットワークの名前空間を作成する
Red Hat OpenShift Service on AWS Web コンソールを使用して、プライマリーユーザー定義ネットワーク (UDN) で使用する名前空間を作成できます。
前提条件
-
cluster-admin
権限を持つユーザーとして、Red Hat OpenShift Service on AWS Web コンソールにログインする。
手順
-
管理者の 観点から、管理
名前空間 をクリックします。 - Create Namespace をクリックします。
- 名前 フィールドに、名前空間の名前を指定します。名前は小文字の英数字または - で設定されている必要があり、先頭と末尾は英数字でなければなりません。
-
ラベル フィールドに、
k8s.ovn.org/primary-
user-defined-network ラベルを追加します。 -
オプション: 名前空間を既存のクラスタースコープ UDN で使用する場合は、
ClusterUserDefinedNetwork
カスタムリソースのspec.namespaceSelector
フィールドで定義されている適切なラベルを追加します。 - オプション: デフォルトのネットワークポリシーを指定します。
- 名前空間を作成するには、[作成] をクリックします。
9.3.1.2. Web コンソールを使用してプライマリー名前空間スコープのユーザー定義ネットワークを作成する
Red Hat OpenShift Service on AWS Web コンソールで UserDefinedNetwork
カスタムリソースを作成することにより、プロジェクト名前空間に分離されたプライマリーネットワークを作成できます。
前提条件
-
cluster-admin
権限を持つユーザーとして Red Hat OpenShift Service on AWS Web コンソールにアクセスできます。 -
namespace を作成し、
k8s.ovn.org/
primary-user-defined-network ラベルを適用しておく。詳細は、Web コンソールを使用してユーザー定義ネットワークの名前空間を作成するを参照してください。
手順
-
管理者の 観点から、Networking
UserDefinedNetworks をクリックします。 - [UserDefinedNetwork の作成] を クリックします。
- プロジェクト名 リストから、以前に作成した名前空間を選択します。
- サブネット フィールドに値を指定します。
- Create をクリックします。ユーザー定義ネットワークは、この名前空間で作成する Pod と仮想マシンのデフォルトのプライマリーネットワークとして機能します。
9.3.1.3. Web コンソールを使用してプライマリークラスタースコープのユーザー定義ネットワークを作成する
Red Hat OpenShift Service on AWS Web コンソールで ClusterUserDefinedNetwork
カスタムリソースを作成することにより、複数の名前空間を同じプライマリーユーザー定義ネットワーク (UDN) に接続できます。
前提条件
-
cluster-admin
権限を持つユーザーとして Red Hat OpenShift Service on AWS Web コンソールにアクセスできます。
手順
-
管理者の 観点から、Networking
UserDefinedNetworks をクリックします。 - [作成] リストから ClusterUserDefinedNetwork を選択します。
- [名前] フィールドに、クラスタースコープの UDN の名前を指定します。
- サブネット フィールドに値を指定します。
- プロジェクトの一致ラベル フィールドで、適切なラベルを追加して、クラスター UDN が適用される名前空間を選択します。
- Create をクリックします。クラスタースコープの UDN は、手順 5 で指定したラベルを含む名前空間にある Pod と仮想マシンのデフォルトのプライマリーネットワークとして機能します。
9.3.2. CLI を使用してプライマリーユーザー定義ネットワークを作成する
CLI を使用して、プライマリー UserDefinedNetwork
または ClusterUserDefinedNetwork
CRD を作成できます。
9.3.2.1. CLI を使用してユーザー定義ネットワークの名前空間を作成する
CLI を使用して、プライマリーユーザー定義ネットワーク (UDN) で使用する名前空間を作成できます。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
次の例のような YAML ファイルとして
Namespace
オブジェクトを作成します。apiVersion: v1 kind: Namespace metadata: name: udn_namespace labels: k8s.ovn.org/primary-user-defined-network: "" 1 # ...
- 1
- 名前空間を UDN に関連付けるには、このラベルが必要です。名前空間を既存のクラスター UDN で使用する場合は、
ClusterUserDefinedNetwork
カスタムリソースのspec.namespaceSelector
フィールドで定義されている適切なラベルも追加する必要があります。
次のコマンドを実行して、
名前空間
マニフェストを適用します。oc apply -f <filename>.yaml
9.3.2.2. CLI を使用してプライマリー名前空間スコープのユーザー定義ネットワークを作成する
CLI を使用して、プロジェクト名前空間に分離されたプライマリーネットワークを作成できます。仮想マシンライブマイグレーションのサポートを確保にするには、OVN-Kubernetes レイヤー 2 トポロジーを使用し、ユーザー定義ネットワーク (UDN) 設定で永続的な IP アドレスの割り当てを有効にする必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
namespace を作成し、
k8s.ovn.org/
primary-user-defined-network ラベルを適用しておく。
手順
カスタムネットワーク設定を指定するには、
UserDefinedNetwork
オブジェクトを作成します。UserDefinedNetwork
マニフェストの例apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: name: udn-l2-net 1 namespace: my-namespace 2 spec: topology: Layer2 3 layer2: role: Primary 4 subnets: - "10.0.0.0/24" - "2001:db8::/60" ipam: lifecycle: Persistent 5
- 1
UserDefinedNetwork
カスタムリソースの名前を指定します。- 2
- 仮想マシンが配置されている namespace を指定します。namespace には
k8s.ovn.org/primary-user-defined-network
ラベルが必要です。namespace としてdefault
、openshift-*
namespace は使用できません。また Cluster Network Operator (CNO) によって定義されたグローバル namespace と同じにすることはできません。 - 3
- ネットワークのトポロジー設定を指定します。必要な値は
Layer2
です。レイヤー 2
トポロジーは、すべてのノードで共有される論理スイッチを作成します。 - 4
- UDN がプライマリーかセカンダリーかを指定します。OpenShift Virtualization は
Primary
ロールのみをサポートします。これは、UDN が仮想マシンのプライマリーネットワークとして機能し、すべてのデフォルトトラフィックがこのネットワークを通過することを意味します。 - 5
- 仮想ワークロードが再起動および移行後も、同じ IP アドレスが使用されるように指定します。
ipam.lifecycle: Persistent
が指定されている場合は、spec.layer2.subnets
フィールドが必須です。
次のコマンドを実行して、
UserDefinedNetwork
マニフェストを適用します。$ oc apply -f --validate=true <filename>.yaml
9.3.2.3. CLI を使用してプライマリークラスタースコープのユーザー定義ネットワークを作成する
CLI を使用して、複数の名前空間を同じプライマリーユーザー定義ネットワーク (UDN) に接続し、ネイティブテナント分離を実現できます。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
カスタムネットワーク設定を指定するには、
ClusterUserDefinedNetwork
オブジェクトを作成します。ClusterUserDefinedNetwork
マニフェストの例kind: ClusterUserDefinedNetwork metadata: name: cudn-l2-net 1 spec: namespaceSelector: 2 matchExpressions: 3 - key: kubernetes.io/metadata.name operator: In 4 values: ["red-namespace", "blue-namespace"] network: topology: Layer2 5 layer2: role: Primary 6 ipam: lifecycle: Persistent subnets: - 203.203.0.0/16
- 1
ClusterUserDefinedNetwork
カスタムリソースの名前を指定します。- 2
- クラスター UDN が適用される namespace のセットを指定します。namespace セレクターは、
default
、openshift-*
namespace、または Cluster Network Operator (CNO) によって定義されたグローバル namespace を参照できません。 - 3
- セレクターのタイプを指定します。この例では、
matchExpressions
セレクターは、kubernetes.io/metadata.name
ラベルと、値がred-namespace
またはblue-namespace
のオブジェクトを選択します。 - 4
- Operator の種類を指定します。可能な値は
In
、NotIn
、Exists
です。 - 5
- ネットワークのトポロジー設定を指定します。必要な値は
Layer2
です。レイヤー 2
トポロジーは、すべてのノードで共有される論理スイッチを作成します。 - 6
- UDN がプライマリーかセカンダリーかを指定します。OpenShift Virtualization は
Primary
ロールのみをサポートします。これは、UDN が仮想マシンのプライマリーネットワークとして機能し、すべてのデフォルトトラフィックがこのネットワークを通過することを意味します。
次のコマンドを実行して、
ClusterUserDefinedNetwork
マニフェストを適用します。$ oc apply -f --validate=true <filename>.yaml
9.3.3. CLI を使用して仮想マシンをプライマリーユーザー定義ネットワークに接続する
Pod ネットワークの割り当てを要求し、インターフェイスバインディングを設定することで、仮想マシン (VM) をプライマリーユーザー定義ネットワーク (UDN) に接続できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。
手順
次の例のように、
VirtualMachine
マニフェストを編集して UDN インターフェイスの詳細を追加します。VirtualMachine
マニフェストの例apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: my-namespace 1 spec: template: spec: domain: devices: interfaces: - name: udn-l2-net 2 binding: name: l2bridge 3 # ... networks: - name: udn-l2-net 4 pod: {} # ...
次のコマンドを実行して、
VirtualMachine
マニフェストを適用します。$ oc apply -f <filename>.yaml