18.2. プライマリーネットワーク


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

重要

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

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

OVN-Kubernetes CNI プラグインは、ユーザー定義ネットワーク (UDN) が実装される前は、すべての Pod が割り当てられるプライマリーまたはメインネットワーク上のレイヤー 3 トポロジーのみをサポートしていました。これにより、クラスター内のすべての Pod が同じグローバルレイヤー 3 ネットワークの一部となるネットワークモデルが可能になっていました。しかし、プライマリーネットワーク設定をカスタマイズする機能は制限されていました。

ユーザー定義ネットワークは、クラスターの管理者とユーザーに、プライマリーネットワークタイプとセカンダリーネットワークタイプ両方の高度にカスタマイズ可能なネットワーク設定オプションを提供します。管理者は、UDN を使用して、強化された分離機能、ワークロードの IP アドレス管理機能、および高度なネットワーク機能を備えた、カスタマイズしたネットワークトポロジーを作成できます。UDN は、レイヤー 2 とレイヤー 3 の両方のトポロジータイプをサポートしています。これにより、幅広いネットワークアーキテクチャーとトポロジーが可能になり、ネットワークの柔軟性、セキュリティー、パフォーマンスが向上します。

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

namespace スコープのみの NAD とは異なり、UDN は ClusterUserDefinedNetwork カスタムリソース (CR) を活用して、クラスターレベルで複数の namespace にまたがる追加のネットワークを作成および定義する機能を管理者に提供します。UDN は、管理者とユーザーの両方に、UserDefinedNetwork CR を使用して namespace レベルで追加のネットワークを定義する機能も提供します。

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

18.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 スコープのユーザー定義ネットワークを作成できます。主なプロセスは、namespace の作成、カスタムリソースの作成および設定、namespace での Pod の作成です。

18.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 間のトラフィックを有効にするネットワークポリシーは効果がありません。これらのトラフィックポリシーが有効にならないのは、これらの隔離されたネットワーク間に接続性がないためです。

18.2.1.3. 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 の追加設定の詳細」を参照してください。

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

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

手順

  1. 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
      1
      UserDefinedNetwork リソースの名前。これは default にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。
      2
      topology フィールドはネットワーク設定を記述します。受け入れられる値は Layer2Layer3 です。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/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
      1
      UserDefinedNetwork リソースの名前。これは default にすべきではありません。また、Cluster Network Operator (CNO) によって作成されたグローバル namespace と重複してはなりません。
      2
      topology フィールドはネットワーク設定を記述します。受け入れられる値は Layer2Layer3 です。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 の長さのみがサポートされます。
  2. 次のコマンドを実行してリクエストを適用します。

    $ oc apply -f <my_layer_two_udn.yaml>

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

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

    $ 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.1.4.1. UserDefinedNetworks CR の追加設定の詳細

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

表18.1 UserDefinedNetworks のオプションの設定
フィールド説明

spec.joinSubnets

object

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

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

spec.IPAMLifecycle

object

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

spec.layer2.mtu および spec.layer3.mtu

integer

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

18.2.2. NetworkAttachmentDefinition を使用したプライマリーネットワークの作成

次のセクションでは、NetworkAttachmentDefinition (NAD) リソースを使用して追加のプライマリーネットワークを作成および管理する方法について説明します。

18.2.2.1. 追加のネットワークを管理するためのアプローチ

NAD によって作成された追加ネットワークのライフサイクルは、次のどちらかの方法で管理できます。

  • Cluster Network Operator (CNO) 設定を変更します。この方法を使用すると、CNO によって NetworkAttachmentDefinition オブジェクトが自動的に作成および管理されます。CNO は、オブジェクトのライフサイクルを管理するだけでなく、DHCP によって割り当てられる IP アドレスを使用する追加のネットワークで DHCP が利用可能であることを確認します。
  • YAML マニフェストを適用します。この方法を使用すると、NetworkAttachmentDefinition オブジェクトを作成して追加のネットワークを直接管理できます。この方法では、Pod に追加のネットワークインターフェイスを割り当てるために複数の CNI プラグインを呼び出すことができます。

各アプローチは同時に使用できず、追加のネットワークを管理する場合に 1 つのアプローチしか使用できません。どちらのアプローチでも、追加のネットワークは、お客様が設定した Container Network Interface (CNI) プラグインによって管理されます。

注記

OVN SDN を使用して、Red Hat OpenStack Platform (RHOSP) に複数のネットワークインターフェイスを持つ OpenShift Container Platform ノードをデプロイすると、セカンダリーインターフェイスの DNS 設定がプライマリーインターフェイスの DNS 設定よりも優先される場合があります。その場合は、次のコマンドを実行して、セカンダリーインターフェイスに割り当てられているサブネット ID の DNS ネームサーバーを削除します。

$ openstack subnet set --dns-nameserver 0.0.0.0 <subnet_id>

18.2.2.2. Cluster Network Operator による追加ネットワーク割り当ての作成

Cluster Network Operator (CNO) は追加ネットワークの定義を管理します。作成する追加のネットワークを指定すると、CNO によって NetworkAttachmentDefinition CRD が自動的に作成されます。

重要

Cluster Network Operator によって管理される NetworkAttachmentDefinition CRD は編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. オプション: 追加のネットワークの namespace を作成します。

    $ oc create namespace <namespace_name>
  2. CNO 設定を編集するには、以下のコマンドを入力します。

    $ oc edit networks.operator.openshift.io cluster
  3. 以下のサンプル CR のように、作成される追加ネットワークの設定を追加して、作成している CR を変更します。

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      # ...
      additionalNetworks:
      - name: tertiary-net
        namespace: namespace2
        type: Raw
        rawCNIConfig: |-
          {
            "cniVersion": "0.3.1",
            "name": "tertiary-net",
            "type": "ipvlan",
            "master": "eth1",
            "mode": "l2",
            "ipam": {
              "type": "static",
              "addresses": [
                {
                  "address": "192.168.1.23/24"
                }
              ]
            }
          }
  4. 変更を保存し、テキストエディターを終了して、変更をコミットします。

検証

  • 次のコマンドを実行して、CNO が NetworkAttachmentDefinition CRD を作成したことを確認します。CNO が CRD を作成するまでに遅延が発生する可能性があります。

    $ oc get network-attachment-definitions -n <namespace>

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

    <namespace>
    CNO の設定に追加したネットワーク割り当ての namespace を指定します。

    出力例

    NAME                 AGE
    test-network-1       14m

18.2.2.2.1. ネットワーク追加割り当ての設定

追加のネットワークは、k8s.cni.cncf.io API グループの NetworkAttachmentDefinition API を使用して設定されます。

API の設定は、以下の表で説明されています。

表18.2 NetworkAttachmentDefinition API フィールド
フィールド説明

metadata.name

string

追加のネットワークの名前です。

metadata.namespace

string

オブジェクトが関連付けられる namespace。

spec.config

string

JSON 形式の CNI プラグイン設定。

18.2.2.3. YAML マニフェストを適用した追加のネットワーク割り当ての作成

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. 以下の例のように、追加のネットワーク設定を含む YAML ファイルを作成します。

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: next-net
    spec:
      config: |-
        {
          "cniVersion": "0.3.1",
          "name": "work-network",
          "type": "host-device",
          "device": "eth1",
          "ipam": {
            "type": "dhcp"
          }
        }
  2. 追加のネットワークを作成するには、次のコマンドを入力します。

    $ oc apply -f <file>.yaml

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

    <file>
    YAML マニフェストを含むファイルの名前を指定します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.