18.2. ユーザー定義ネットワークの理解
UserDefinedNetwork
はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OVN-Kubernetes CNI プラグインは、セカンダリー Pod ネットワークの layer2
、layer3
、および localnet
トポロジーをサポートします。ただし、プライマリーネットワーク、つまりすべての Pod が接続されているメインネットワークでは、layer3
トポロジーのみがサポートされます。これにより、クラスター内のすべての Pod が同じグローバル layer3
ネットワークの一部であるネットワークモデルが可能になりますが、プライマリーネットワーク設定をカスタマイズする機能は制限されます。
ユーザー定義ネットワークを使用すると、クラスター管理者とユーザーには、独自のネットワークトポロジーを定義し、ネットワークの分離を確保し、ワークロードの IP アドレスを管理し、高度なネットワーク機能を活用することができる、高度にカスタマイズ可能なネットワーク設定オプションが提供されます。ユーザー定義ネットワークは、ネットワークの柔軟性、セキュリティー、パフォーマンスの向上に役立ちます。
ユーザー定義ネットワークには次のような利点があります。
強化されたネットワーク分離
- テナントの分離: Red Hat OpenStack Platform (RHOSP) でテナントが分離される方法と同様に、namespace には独自の分離されたプライマリーネットワークを設定できます。これにより、テナント間のトラフィックのリスクが軽減され、セキュリティーが向上します。
ネットワークの柔軟性
- レイヤー 2 およびレイヤー 3 のサポート: クラスター管理者は、プライマリーネットワークをレイヤー 2 またはレイヤー 3 のネットワークタイプとして設定できます。これにより、プライマリーネットワークにセカンダリーネットワークの柔軟性が提供されます。
簡素化されたネットワーク管理
- ネットワーク設定の複雑さの軽減: ユーザー定義ネットワークでは、異なるネットワーク内のワークロードをグループ化することで分離を実現できるため、複雑なネットワークポリシーが不要になります。
高度な機能
- 一貫性があり選択可能な IP アドレス指定: ユーザーは、異なる namespace 間とクラスター間で IP サブネットを指定して再利用できるため、一貫性のあるネットワーク環境が実現します。
- 複数のネットワークのサポート: ユーザー定義のネットワーク機能により、管理者は複数の namespace を単一のネットワークに接続したり、異なる namespace セットごとに個別のネットワークを作成したりできます。
Red Hat OpenStack Platform (RHOSP) からのアプリケーション移行の簡素化
- ネットワークパリティー: ユーザー定義ネットワークでは、同様のネットワーク分離および設定オプションが提供されるため、OpenStack から OpenShift Container Platform へのアプリケーションの移行が簡素化されます。
18.2.1. UserDefinedNetwork カスタムリソースの制限
ユーザー定義ネットワーク (UDN) は高度にカスタマイズ可能なネットワーク設定オプションを提供しますが、クラスター管理者と開発者がこれらのネットワークを実装および管理する際に認識しておくべき制限があります。ユーザー定義ネットワークを実装する前に、次の制限を考慮してください。
DNS の制限:
- Pod の DNS ルックアップは、クラスターのデフォルトネットワーク上の Pod の IP アドレスに解決されます。Pod がユーザー定義ネットワークの一部である場合でも、DNS ルックアップではそのユーザー定義ネットワーク上の Pod の IP アドレスは解決されません。ただし、サービスおよび外部エンティティーの DNS ルックアップは期待どおりに機能します。
- Pod がプライマリー UDN に割り当てられると、その Pod はクラスターのデフォルトネットワーク上の Kubernetes API (KAPI) および DNS サービスにアクセスできるようになります。
- 初期ネットワーク割り当て: Pod を作成する前に、namespace とネットワークを作成する必要があります。Pod を含む namespace を新しいネットワークに割り当てたり、既存の namespace に UDN を作成したりすることは、OVN-Kubernetes では受け入れられません。
- ヘルスチェックの制限: Kubelet ヘルスチェックはクラスターのデフォルトネットワークによって実行されますが、Pod 上のプライマリーインターフェイスのネットワーク接続は確認されません。したがって、デフォルトネットワークでは Pod が正常に見えるものの、プライマリーインターフェイスで接続が切断されるというシナリオが、ユーザー定義ネットワークでは発生する可能性があります。
- ネットワークポリシーの制限: ユーザー定義の異なるプライマリネットワークに接続された namespace 間のトラフィックを有効にするネットワークポリシーは効果がありません。これらのトラフィックポリシーが有効にならないのは、これらの隔離されたネットワーク間に接続性がないためです。
18.2.2. UserDefinedNetwork のベストプラクティス
UserDefinedNetwork
(UDN) リソースを設定する前に、ユーザーは次の情報を考慮する必要があります。
-
UDN を設定するために
openshift-*
namespace を使用しないでください。 ユーザー定義ネットワークには 2 つのマスカレード IP アドレスが必要です。必要な数のネットワークを保持できる大きさになるように、マスカレードサブネットを再設定する必要があります。
重要-
OpenShift Container Platform 4.17 以降では、クラスターはデフォルトのマスカレードサブネットとして、IPv4 の場合は
169.254.0.0/17
、IPv6 の場合はfd69::/112
を使用します。ユーザーはこれらの範囲を避ける必要があります。更新されたクラスターの場合は、デフォルトのマスカレードサブネットに変更がありません。 - プロジェクト用のユーザー定義ネットワークが設定された後は、クラスターのマスカレードサブネットの変更はサポートされません。UDN を設定した後にマスカレードサブネットを変更しようとすると、ネットワーク接続が中断され、設定の問題が発生する可能性があります。
-
OpenShift Container Platform 4.17 以降では、クラスターはデフォルトのマスカレードサブネットとして、IPv4 の場合は
-
テナントが
NetworkAttachmentDefinition
(NAD) リソースではなくUserDefinedNetwork
リソースを使用していることを確認します。これにより、テナント間でセキュリティー上のリスクが生じる可能性があります。 - ネットワークセグメンテーションを作成するときは、UDN リソースを使用してユーザー定義のネットワークセグメンテーションを完了できない場合にのみ、NAD リソースを使用する必要があります。
-
UDN のクラスターサブネットとサービス CIDR は、デフォルトのクラスターサブネット CIDR と重複できません。OVN-Kubernetes ネットワークプラグインは、デフォルトのネットワークの参加サブネットとして
100.64.0.0/16
を使用します。UDNjoinSubnets
フィールドを設定する際にその値を使用しないでください。クラスターのネットワーク内のどこかでデフォルトのアドレス値が使用されている場合は、joinSubnets
フィールドを設定して上書きする必要があります。詳細は、「UserDefinedNetworks CR の追加設定の詳細」を参照してください。
18.2.3. UserDefinedNetwork カスタムリソースの作成
以下の手順では、namespace のスコープのユーザー定義ネットワークを作成します。ユースケースに基づいて、Layer2
トポロジータイプの場合は my-layer-two-udn.yaml
の例、Layer3
トポロジータイプの場合は my-layer-three-udn.yaml
の例を使用してリクエストを作成します。
手順
Layer2
またはLayer3
トポロジータイプのユーザー定義のネットワークの要求を作成します。次の例のように、
Layer2
トポロジーの要求を定義するには、my-layer-two-udn.yaml
などの YAML ファイルを作成します。apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: name: udn-1 1 namespace: <some_custom_namespace> spec: topology: Layer2 2 layer2: 3 role: Primary 4 subnets: - "10.0.0.0/24" - "2001:db8::/60" 5
- 1
UserDefinedNetwork
リソースの名前。これはdefault
にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。- 2
topology
フィールドはネットワーク設定を記述します。受け入れられる値はLayer2
とLayer3
です。Layer2
トポロジータイプを指定すると、すべてのノードで共有される 1 つの論理スイッチが作成されます。- 3
- このフィールドは、トポロジー設定を指定します。
layer2
またはlayer3
に指定できます。 - 4
Primary
またはSecondary
を指定します。4.17 でサポートされるrole
仕様はPrimary
のみです。- 5
Layer2
トポロジータイプの場合、以下はsubnet
フィールドの設定を指定します。- subnets フィールドは任意です。
-
subnets フィールドはタイプが
string
で、IPv4 と IPv6 の両方の標準 CIDR 形式を受け入れます。 -
subnets フィールドには 1 つまたは 2 つの項目を入力できます。2 つのアイテムは、異なるファミリーに属している必要があります。たとえば、subnets の値は
10.100.0.0/16
と2001:db8::/64
です。 -
Layer2
サブネットは省略できます。省略すると、ユーザーは Pod の IP アドレスを設定する必要があります。結果として、ポートセキュリティーは MAC スプーフィングのみを防止します。 -
ipamLifecycle
フィールドが指定されている場合、Layer2
subnets
フィールドは必須です。
次の例のように、
Layer3
トポロジーの要求を定義するには、my-layer-three-udn.yaml
などの YAML ファイルを作成します。apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: name: udn-2-primary 1 namespace: <some_custom_namespace> spec: topology: Layer3 2 layer3: 3 role: Primary 4 subnets: 5 - cidr: 10.150.0.0/16 hostSubnet: 24 - cidr: 2001:db8::/60 hostSubnet: 64
- 1
UserDefinedNetwork
リソースの名前。これはdefault
にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。- 2
topology
フィールドはネットワーク設定を記述します。受け入れられる値はLayer2
とLayer3
です。Layer3
トポロジータイプを指定すると、ノードごとにレイヤー 2 セグメントが作成され、それぞれに異なるサブネットが割り当てられます。レイヤー 3 ルーティングは、ノードサブネットを相互接続するために使用されます。- 3
- このフィールドは、トポロジー設定を指定します。有効な値は
layer2
またはlayer3
です。 - 4
Primary
ロールまたはSecondary
ロールを指定します。4.17 でサポートされるrole
仕様はPrimary
のみです。- 5
Layer3
トポロジータイプの場合、subnet
フィールドの設定の詳細を次に示します。-
subnets
フィールドは必須です。 subnets
フィールドのタイプは、cidr
およびhostSubnet
です。-
cidr
はクラスターのサブネットであり、文字列値を受け入れます。 -
hostSubnet
は、クラスターサブネットが分割されるノードサブネット接頭辞を指定します。 -
IPv6 の場合、
hostSubnet
では/64
の長さのみがサポートされます。
-
-
次のコマンドを実行してリクエストを適用します。
$ oc apply -f <my_layer_two_udn.yaml>
ここでは、
<my_layer_two_udn.yaml>
は、Layer2
またはLayer3
設定ファイルの名前です。次のコマンドを実行して、リクエストが成功したことを確認します。
$ oc get userdefinednetworks udn-1 -n <some_custom_namespace> -o yaml
ここでは、
some_custom_namespace
は、ユーザー定義ネットワーク用に作成した namespace です。出力例
apiVersion: k8s.ovn.org/v1 kind: UserDefinedNetwork metadata: creationTimestamp: "2024-08-28T17:18:47Z" finalizers: - k8s.ovn.org/user-defined-network-protection generation: 1 name: udn-1 namespace: some-custom-namespace resourceVersion: "53313" uid: f483626d-6846-48a1-b88e-6bbeb8bcde8c spec: layer2: role: Primary subnets: - 10.0.0.0/24 - 2001:db8::/60 topology: Layer2 status: conditions: - lastTransitionTime: "2024-08-28T17:18:47Z" message: NetworkAttachmentDefinition has been created reason: NetworkAttachmentDefinitionReady status: "True" type: NetworkReady
18.2.3.1. UserDefinedNetworks CR の追加設定の詳細
次の表では、UDN のオプションの追加設定を説明します。OVN-Kubernetes ネットワークトポロジーに対する明示的な要件がなく、理解していない場合は、これらのフィールドを設定することは推奨しません。
フィールド | 型 | 説明 |
---|---|---|
| object |
省略すると、プラットフォームは
|
| object |
|
| integer |
最大転送単位 (MTU)。デフォルト値は |