第2章 プライマリーネットワーク


2.1. ユーザー定義ネットワークについて

重要

UserDefinedNetwork はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

ユーザー定義ネットワーク (UDN) が実装される前は、OpenShift Container Platform の OVN-Kubernetes CNI プラグインは、プライマリーまたは メイン ネットワーク上の Layer 3 トポロジーのみをサポートしていました。Kubernetes の設計原則により、すべての Pod はメインネットワークにアタッチされ、すべての Pod は IP アドレスを使用して相互に通信し、Pod 間のトラフィックはネットワークポリシーに基づき制限されます。

UDN では、カスタムの Layer 2 および Layer 3 ネットワークセグメントを有効にすることで、Kubernetes Pod ネットワークのデフォルトの Layer 3 トポロジーの柔軟性とセグメンテーション機能が向上します。これらのセグメントはすべてデフォルトで分離されています。これらのセグメントは、デフォルトの OVN-Kubernetes CNI プラグインを使用するコンテナー Pod および仮想マシンの、プライマリーネットワークまたはセカンダリーネットワークとして機能します。UDN を使用することで、幅広いネットワークアーキテクチャーとトポロジーが可能になり、ネットワークの柔軟性、セキュリティー、パフォーマンスが向上します。

注記

プライマリーネットワークとセカンダリーネットワーク両方での Localnet トポロジーのサポートが、OpenShift Container Platform の今後のバージョンで追加される予定です。

クラスター管理者は、ClusterUserDefinedNetwork カスタムリソース (CR) を使用することで、クラスターレベルで複数の namespace にまたがるプライマリーまたはセカンダリーのネットワークを UDN を使用して作成および定義できます。クラスター管理者またはクラスターユーザーは、UDN を使用して、namespace レベルで UserDefinedNetwork CR でセカンダリーネットワークを定義することもできます。

次の図は、4 つのクラスター namespace を示しています。各 namespace には 1 つのユーザー定義ネットワーク (UDN) が割り当てられており、各 UDN には Pod IP 割り当て用のカスタムサブネットが割り当てられています。OVN-Kubernetes は重複する UDN サブネットを処理します。Kubernetes ネットワークポリシーを使用しなくても、UDN にアタッチされた Pod はその UDN 内の他の Pod と通信できます。デフォルトでは、これらの Pod は他の UDN に配置された Pod との通信から分離されます。マイクロセグメンテーションの場合、UDN 内でネットワークポリシーを適用できます。namespace には 1 つ以上の UDN を割り当てることができますが、1 つの namespace には 1 つのプライマリー UDN を、1 つの UDN には 1 つ以上の namespace を割り当てるという制限があります。

図2.1 UserDefinedNetwork CR を使用した namespace 分離

次のセクションでは、ユーザー定義ネットワークの利点と制限、UserDefinedNetwork カスタムリソースを作成する際のベストプラクティス、カスタムリソースの作成方法、およびお客様のデプロイメントに関連する可能性のある追加設定の詳細についてさらに詳しく説明します。

2.1.1. ユーザー定義ネットワークの利点

ユーザー定義ネットワークには次のような利点があります。

  1. セキュリティーのためのネットワーク分離の強化

    • テナントの分離: Red Hat OpenStack Platform (RHOSP) でテナントが分離される方法と同様に、namespace には独自の分離されたプライマリーネットワークを設定できます。これにより、テナント間のトラフィックのリスクが軽減され、セキュリティーが向上します。
  2. ネットワークの柔軟性

    • レイヤー 2 およびレイヤー 3 のサポート: クラスター管理者は、プライマリーネットワークをレイヤー 2 またはレイヤー 3 のネットワークタイプとして設定できます。
  3. 簡素化されたネットワーク管理

    • ネットワーク設定の複雑さの軽減: ユーザー定義ネットワークでは、異なるネットワーク内のワークロードをグループ化することで分離を実現できるため、複雑なネットワークポリシーが不要になります。
  4. 高度な機能

    • 一貫性があり選択可能な IP アドレス指定: ユーザーは、異なる namespace 間とクラスター間で IP サブネットを指定して再利用できるため、一貫性のあるネットワーク環境が実現します。
    • 複数のネットワークのサポート: ユーザー定義のネットワーク機能により、管理者は複数の namespace を単一のネットワークに接続したり、異なる namespace セットごとに個別のネットワークを作成したりできます。
  5. Red Hat OpenStack Platform (RHOSP) からのアプリケーション移行の簡素化

    • ネットワークパリティー: ユーザー定義ネットワークでは、同様のネットワーク分離および設定オプションが提供されるため、OpenStack から OpenShift Container Platform へのアプリケーションの移行が簡素化されます。

開発者と管理者は、カスタムリソースを使用して、namespace スコープのユーザー定義ネットワークを作成できます。プロセスの概要は次のとおりです。

  1. 管理者は、k8s.ovn.org/primary-user-defined-network ラベルを使用して、ユーザー定義ネットワークの namespace を作成します。
  2. UserDefinedNetwork CR は、クラスター管理者またはユーザーによって作成されます。
  3. ユーザーは namespace 内に Pod を作成します。

2.1.2. 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 間のトラフィックを有効にするネットワークポリシーは効果がありません。これらのトラフィックポリシーが有効にならないのは、これらの隔離されたネットワーク間に接続性がないためです。
  • 作成および変更の制限: ClusterUserDefinedNetwork CR および UserDefinedNetwork CR は、作成後に変更することはできません。

2.1.3. レイヤー 2 およびレイヤー 3 トポロジー

フラットなレイヤー 2 トポロジーでは、クラスター内のすべてのノードに分散される仮想スイッチを作成します。仮想マシンと Pod はこの仮想スイッチに接続し、これらすべてのコンポーネントが同じサブネット内で相互通信できるようにします。フラットなレイヤー 2 トポロジーは、クラスター内に存在するノード間で仮想マシンのライブマイグレーションを実行する場合に役立ちます。次の図は、ライブマイグレーションのために仮想スイッチを使用する 2 つのノードを含むフラットなレイヤー 2 トポロジーを示しています。

図2.2 コンポーネントの通信に仮想スイッチを使用するフラットなレイヤー 2 トポロジー

レイヤー 2 サブネットを指定しない場合は、クラスター内の各 Pod の IP アドレスを手動で設定する必要があります。レイヤー 2 サブネットを指定しないと、ポートのセキュリティーがメディアアクセスコントロール (MAC) スプーフィングの防止だけに限定され、IP スプーフィングが対象外になります。レイヤー 2 トポロジーでは、単一のブロードキャストドメインが作成されます。しかし、大規模なネットワーク環境では、これにより問題が発生することがあります。ブロードキャストストームが発生して、ネットワークのパフォーマンスが低下する可能性があるためです。

ネットワークの詳細な設定オプションを利用する場合は、レイヤー 2 トポロジーをユーザー定義ネットワーク (UDN) と統合できます。次の図は、各ノードに存在する Pod を含むレイヤー 2 トポロジーで UDN を使用する 2 つのノードを示しています。各ノードには、次の 2 つのインターフェイスが含まれています。

  • ノードインターフェイス。これは、ネットワークコンポーネントをノードに接続するコンピュートノードです。
  • br-ex などの Open vSwitch (OVS) ブリッジ。これは、Pod が相互に通信してリソースを共有できるように、レイヤー 2 OVN スイッチを作成します。

これら 2 つのインターフェイスは、外部スイッチによって接続されています。ゲートウェイまたはルーターにより、外部スイッチとレイヤー 2 OVN スイッチ間のルーティングトラフィックが処理されます。ノード内の仮想マシンと Pod は UDN を使用して相互に通信できます。レイヤー 2 OVN スイッチは、UDN 経由のノードトラフィックを処理します。これにより、あるノードから別のノードへの仮想マシンのライブマイグレーションが可能になります。

図2.3 レイヤー 2 トポロジーを使用するユーザー定義ネットワーク (UDN)

レイヤー 3 トポロジーでは、クラスター内の各ノードに固有のレイヤー 2 セグメントが作成されます。レイヤー 3 ルーティングメカニズムはこれらのセグメントを相互接続し、異なるノードでホストされている仮想マシンと Pod が相互に通信できるようにします。レイヤー 3 トポロジーでは、各ドメインを特定のノードに割り当てることで大規模なブロードキャストドメインを効果的に管理できるため、ブロードキャストトラフィックの範囲は小さくなっています。レイヤー 3 トポロジーを設定するには、cidr および hostSubnet パラメーターを設定する必要があります。

2.1.4. UserDefinedNetwork のベストプラクティス

UserDefinedNetwork (UDN) リソースを設定する前に、ユーザーは次の情報を考慮する必要があります。

  • UDN を設定するために openshift-* namespace を使用しないでください。
  • ユーザー定義ネットワークには 2 つのマスカレード IP アドレスが必要です。必要な数のネットワークを保持できる大きさになるように、マスカレードサブネットを再設定する必要があります。

    重要
    • OpenShift Container Platform 4.17 以降では、クラスターはデフォルトのマスカレードサブネットとして、IPv4 の場合は 169.254.0.0/17、IPv6 の場合は fd69::/112 を使用します。ユーザーはこれらの範囲を避ける必要があります。更新されたクラスターの場合は、デフォルトのマスカレードサブネットに変更がありません。
    • プロジェクト用のユーザー定義ネットワークが設定された後は、クラスターのマスカレードサブネットの変更はサポートされません。UDN を設定した後にマスカレードサブネットを変更しようとすると、ネットワーク接続が中断され、設定の問題が発生する可能性があります。
  • テナントが NetworkAttachmentDefinition (NAD) リソースではなく UserDefinedNetwork リソースを使用していることを確認します。これにより、テナント間でセキュリティー上のリスクが生じる可能性があります。
  • ネットワークセグメンテーションを作成するときは、UDN リソースを使用してユーザー定義のネットワークセグメンテーションを完了できない場合にのみ、NAD リソースを使用する必要があります。
  • UDN のクラスターサブネットとサービス CIDR は、デフォルトのクラスターサブネット CIDR と重複できません。OVN-Kubernetes ネットワークプラグインは、デフォルトのネットワークの参加サブネットとして 100.64.0.0/16 を使用します。UDN joinSubnets フィールドを設定する際にその値を使用しないでください。クラスターのネットワークの任意の場所でデフォルトのアドレス値が使用される場合は、joinSubnets フィールドを設定して上書きする必要があります。詳細は、「UserDefinedNetworks CR の追加設定の詳細」を参照してください。
  • UDN のクラスターサブネットとサービス CIDR は、デフォルトのクラスターサブネット CIDR と重複できません。OVN-Kubernetes ネットワークプラグインは、ネットワークのデフォルトの参加サブネットとして 100.64.0.0/16 を使用します。UDN joinSubnets フィールドを設定するためにその値を使用しないでください。クラスターのネットワーク内のどこかでデフォルトのアドレス値が使用されている場合は、joinSubnets フィールドを設定してデフォルト値をオーバーライドする必要があります。詳細は、「UserDefinedNetworks CR の追加設定の詳細」を参照してください。

2.1.5. UserDefinedNetwork カスタムリソースの作成

以下の手順では、namespace のスコープのユーザー定義ネットワークを作成します。ユースケースに基づいて、Layer2 トポロジータイプの場合は my-layer-two-udn.yaml の例、Layer3 トポロジータイプの場合は my-layer-three-udn.yaml の例を使用してリクエストを作成します。

前提条件

  • cluster-admin 権限でログインしているか、ロールベースのアクセス制御 (RBAC) の view および edit 権限がある。

手順

  1. オプション: プライマリーネットワークを使用する UserDefinedNetwork CR の場合は、次のコマンドを入力して、k8s.ovn.org/primary-user-defined-network ラベルを持つ namespace を作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Namespace
    metadata:
      name: <udn_namespace_name>
      labels:
        k8s.ovn.org/primary-user-defined-network: ""
    EOF
    Copy to Clipboard Toggle word wrap
  2. Layer2 または Layer3 トポロジータイプのユーザー定義のネットワークのリクエストを作成します。

    1. 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
      Copy to Clipboard Toggle word wrap
      1
      UserDefinedNetwork リソースの名前。これは default にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。
      2
      topology フィールドはネットワーク設定を記述します。受け入れられる値は Layer2Layer3 です。Layer2 トポロジータイプを指定すると、すべてのノードで共有される 1 つの論理スイッチが作成されます。
      3
      このフィールドは、トポロジー設定を指定します。layer2 または layer3 に指定できます。
      4
      Primary ロールまたは Secondary ロールを指定します。
      5
      Layer2 トポロジータイプの場合、以下は subnet フィールドの設定を指定します。
      • subnets フィールドは任意です。
      • subnets フィールドはタイプが string で、IPv4 と IPv6 の両方の標準 CIDR 形式を受け入れます。
      • subnets フィールドには 1 つまたは 2 つの項目を入力できます。2 つのアイテムは、異なるファミリーに属している必要があります。たとえば、subnets の値は 10.100.0.0/162001:db8::/64 です。
      • Layer2 サブネットは省略できます。省略すると、ユーザーは Pod の IP アドレスを設定する必要があります。結果として、ポートセキュリティーは MAC スプーフィングのみを防止します。
      • ipamLifecycle フィールドが指定されている場合、Layer2subnets フィールドは必須です。
    2. 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
      # ...
      Copy to Clipboard Toggle word wrap
      1
      UserDefinedNetwork リソースの名前。これは default にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。
      2
      topology フィールドはネットワーク設定を記述します。受け入れられる値は Layer2Layer3 です。Layer3 トポロジータイプを指定すると、ノードごとにレイヤー 2 セグメントが作成され、それぞれに異なるサブネットが割り当てられます。レイヤー 3 ルーティングは、ノードサブネットを相互接続するために使用されます。
      3
      このフィールドは、トポロジー設定を指定します。有効な値は layer2 または layer3 です。
      4
      Primary ロールまたは Secondary ロールを指定します。
      5
      Layer3 トポロジータイプの場合、subnet フィールドの設定の詳細を次に示します。
      • subnets フィールドは必須です。
      • subnets フィールドのタイプは、cidr および hostSubnet です。

        • cidr は、クラスターの clusterNetwork 設定に相当します。CIDR 内の IP アドレスは、ユーザー定義ネットワーク内の Pod に配布されます。このパラメーターは文字列値を受け入れます。
        • hostSubnet は、ノードごとのサブネット接頭辞を定義します。
        • IPv6 の場合、hostSubnet では /64 の長さのみがサポートされます。
  3. 次のコマンドを実行してリクエストを適用します。

    $ oc apply -f <my_layer_two_udn.yaml>
    Copy to Clipboard Toggle word wrap

    ここでは、<my_layer_two_udn.yaml> は、Layer2 または Layer3 設定ファイルの名前です。

  4. 次のコマンドを実行して、リクエストが成功したことを確認します。

    $ oc get userdefinednetworks udn-1 -n <some_custom_namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    ここでは、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
    Copy to Clipboard Toggle word wrap

2.1.5.1. UserDefinedNetworks CR の追加設定の詳細

次の表では、UDN のオプションの追加設定を説明します。OVN-Kubernetes ネットワークトポロジーに対する明示的な要件がなく、理解していない場合は、これらのフィールドを設定することは推奨しません。

  1. ユーザー定義ネットワークのオプション設定
Expand

CUDN のフィールド

UDN のフィールド

タイプ

説明

spec.network.<topology>.joinSubnets

spec.<topology>.joinSubnets

object

省略すると、プラットフォームは joinSubnets フィールドのデフォルト値を IPv4 の場合は 100.65.0.0/16、IPv6 の場合は fd99::/64 に設定します。クラスターのネットワーク内のどこかでデフォルトのアドレス値が使用されている場合は、joinSubnets フィールドを設定して上書きする必要があります。このフィールドを設定する場合は、クラスターサブネット、default ネットワーククラスターサブネット、マスカレードサブネットなど、クラスター内の他のサブネットと競合しないことを確認してください。

joinSubnets フィールドは、ユーザー定義ネットワーク内の異なるセグメント間のルーティングを設定します。デュアルスタッククラスターでは、IP ファミリーごとに 1 つずつ、合計 2 つのサブネットを設定できます。それ以外の場合は、1 つのサブネットのみが許可されます。このフィールドは Primary ネットワークに対してのみ許可されます。

spec.network.<topology>.ipam.lifecycle

spec.<topology>.ipam.lifecycle

object

spec.ipam.lifecycle フィールドは、IP アドレス管理システム (IPAM) を設定します。永続的な IP アドレスを確保するために、仮想ワークロードにこのフィールドを使用する場合があります。許可される値は Persistent のみであり、これにより、再起動後や移行後も仮想ワークロードの IP アドレスが永続的になります。Container Network Interface (CNI) によって割り当てられ、OVN-Kubernetes によって Pod の IP アドレスをプログラムするために使用されます。Pod アノテーションの場合はこれを変更しないでください。

Persistent の値は、ipam.mode パラメーターが Enabled に設定されている場合にのみ設定できます。

spec.network.<topology>.ipam.mode

spec.network.<topology>.ipam.mode

object

mode パラメーターは、OVN-Kubernetes が IP 設定を管理する範囲を制御します。以下のオプションが利用できます。

Enabled:
有効な場合、OVN-Kubernetes は IP 設定を SDN インフラストラクチャーに適用し、選択したサブネットの IP アドレスを個々の Pod に割り当てます。これはデフォルト設定です。Enabled に設定する場合は、subnets フィールドを定義する必要があります。Enabled はデフォルトの設定です。

Disabled:
無効な場合、OVN-Kubernetes は MAC アドレスのみを割り当て、レイヤー 2 通信を提供します。これにより、ユーザーは IP アドレスを設定できます。Disabled は、レイヤー 2 (セカンダリー) ネットワークでのみ使用できます。IPAM を無効にすると、ネットワークポリシーやサービスなど、IP での Pod 選択に依存する機能が動作しなくなります。さらに、このネットワークに接続されているインターフェイスでは IP ポートセキュリティーも無効になります。spec.ipam.modeDisabled. に設定されている場合、subnets フィールドは空でなければなりません。

spec.network.<topology>.mtu

spec.<topology>.mtu

integer

最大転送単位 (MTU)。デフォルト値は 1400 です。IPv4 の境界は 576 で、IPv6 の境界は 1280 です。

ここでは、以下のようになります。

<topology>
layer2 または layer3 のいずれかです。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat