8.3. RHOSO ネットワーク用の RHOCP の準備


Red Hat OpenStack Services on OpenShift (RHOSO) サービスは、Red Hat OpenShift Container Platform (RHOCP) のワークロードとして実行されます。RHOSO 環境では、分離されたネットワークを使用してさまざまな種類のネットワークトラフィックを分けて、セキュリティー、パフォーマンス、管理を向上させます。RHOCP ワーカーノードを分離されたネットワークに接続し、分離されたネットワーク上の内部サービスエンドポイントを公開する必要があります。パブリックエンドポイントではルートのみがサポートされているため、パブリックサービスエンドポイントはデフォルトで RHOCP ルートとして公開されます。

重要

ネットワークマニフェストはコントロールプレーンインターフェイス名を直接参照するため、コントロールプレーンインターフェイス名はすべてのノード間で一貫している必要があります。コントロールプレーンインターフェイス名が一致していない場合、RHOSO 環境のデプロイは失敗します。ノード上で物理インターフェイス名が一貫していない場合は、他のネットワークマニフェストから参照できる物理インターフェイスの一貫した代替名を設定する Linux ボンディングを作成する必要があります。

注記

次の手順の例では、IPv4 アドレスを使用します。IPv4 アドレスの代わりに IPv6 アドレスを使用できます。デュアルスタック (IPv4 と IPv6) は、プロジェクト (テナント) ネットワークでのみ利用できます。IPv6 アドレスの設定方法は、RHOCP ネットワーク ガイドの次のリソースを参照してください。

8.3.1. 分離されたネットワークインターフェイスを備えた RHOCP の準備

NMState Operator を使用して、RHOCP ワーカーノードを分離されたネットワークに接続します。NodeNetworkConfigurationPolicy (nncp) CR を作成して、RHOCP クラスター内の各ワーカーノード上の各分離ネットワークのインターフェイスを設定します。

手順

  1. ワークステーションに NodeNetworkConfigurationPolicy (nncp) CR ファイル (例: openstack-nncp.yaml) を作成します。
  2. RHOCP クラスター内のワーカーノードの名前を取得します。

    $ oc get nodes -l node-role.kubernetes.io/worker -o jsonpath="{.items[*].metadata.name}"
  3. ネットワーク設定を確認します。

    $ oc get nns/<worker_node> -o yaml | more
    • <worker_node> は、手順 2 で取得したワーカーノードの名前 (例: worker-1) に置き換えます。各ワーカーノードに対してこの手順を繰り返します。
  4. nncp CR ファイルで、RHOCP クラスター内の各ワーカーノードの分離ネットワークそれぞれのインターフェイスを設定します。ネットワーク分離を設定する必要があるデフォルトの物理データセンターネットワークの詳細は、デフォルトの Red Hat OpenStack Services on OpenShift ネットワーク を参照してください。

    次の例では、nncp CR は、ワーカーノード 1 (osp-enp6s0-worker-1) の enp6s0 インターフェイスを設定して、ネットワーク分離のために IPv4 アドレスを持つ VLAN インターフェイスを使用します。

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: osp-enp6s0-worker-1
    spec:
      desiredState:
        interfaces:
        - description: internalapi vlan interface
          ipv4:
            address:
            - ip: 172.17.0.10
              prefix-length: 24
            enabled: true
            dhcp: false
          ipv6:
            enabled: false
          name: internalapi
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 20
            reorder-headers: true
        - description: storage vlan interface
          ipv4:
            address:
            - ip: 172.18.0.10
              prefix-length: 24
            enabled: true
            dhcp: false
          ipv6:
            enabled: false
          name: storage
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 21
            reorder-headers: true
        - description: tenant vlan interface
          ipv4:
            address:
            - ip: 172.19.0.10
              prefix-length: 24
            enabled: true
            dhcp: false
          ipv6:
            enabled: false
          name: tenant
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 22
            reorder-headers: true
        - description: Configuring enp6s0
          ipv4:
            address:
            - ip: 192.168.122.10
              prefix-length: 24
            enabled: true
            dhcp: false
          ipv6:
            enabled: false
          mtu: 1500
          name: enp6s0
          state: up
          type: ethernet
        - description: octavia vlan interface
          name: octavia
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 24
            reorder-headers: true
        - bridge:
            options:
              stp:
                enabled: false
            port:
            - name: enp6s0.24
          description: Configuring bridge octbr
          mtu: 1500
          name: octbr
          state: up
          type: linux-bridge
        - description: designate vlan interface
          ipv4:
            address:
            - ip: 172.26.0.10
              prefix-length: "24"
            dhcp: false
            enabled: true
          ipv6:
            enabled: false
          mtu: 1500
          name: designate
          state: up
          type: vlan
          vlan:
            base-iface: enp7s0
            id: "25"
            reorder-headers: true
        - description: designate external vlan interface
          ipv4:
            address:
            - ip: 172.34.0.10
              prefix-length: "24"
            dhcp: false
            enabled: true
          ipv6:
            enabled: false
          mtu: 1500
          name: designateext
          state: up
          type: vlan
          vlan:
            base-iface: enp7s0
            id: "26"
            reorder-headers: true
      nodeSelector:
        kubernetes.io/hostname: worker-1
        node-role.kubernetes.io/worker: ""
  5. クラスターに nncp CR を作成します。

    $ oc apply -f openstack-nncp.yaml
  6. nncp CR が作成されたことを確認します。

    $ oc get nncp -w
    NAME                        STATUS        REASON
    osp-enp6s0-worker-1   Progressing   ConfigurationProgressing
    osp-enp6s0-worker-1   Progressing   ConfigurationProgressing
    osp-enp6s0-worker-1   Available     SuccessfullyConfigured

8.3.2. 分離されたネットワークにサービス Pod を接続する

サービス Pod をネットワークに接続するために、分離されたネットワークごとに NetworkAttachmentDefinition (net-attach-def) カスタムリソース (CR) を作成します。

手順

  1. ワークステーションに NetworkAttachmentDefinition (net-attach-def) CR ファイル (例: openstack-net-attach-def.yaml) を作成します。
  2. NetworkAttachmentDefinition CR ファイルで、各分離ネットワークの NetworkAttachmentDefinition リソースを設定して、サービスデプロイメント Pod をネットワークに割り当てます。次の例では、次のネットワークの NetworkAttachmentDefinition リソースを作成します。

    • macvlan タイプの internalapistoragectlplane、および tenant ネットワーク。
    • bridge タイプの負荷分散管理ネットワークである octaviaこのネットワークアタッチメントは、ロードバランサー仮想マシン (amphorae) を管理する Pod と、OVN Operator によって管理される Open vSwitch Pod を接続します。
    • DNS サービス (designate) が、DNS サーバーを管理するために内部で使用する designate ネットワーク
    • designateext ネットワークは、DNS サービスリゾルバーと DNS サーバーへの外部アクセスを提供するために使用されます。
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: internalapi
      namespace: openstack
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "internalapi",
          "type": "macvlan",
          "master": "internalapi",
          "ipam": {
            "type": "whereabouts",
            "range": "172.17.0.0/24",
            "range_start": "172.17.0.30",
            "range_end": "172.17.0.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: ctlplane
      namespace: openstack
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "ctlplane",
          "type": "macvlan",
          "master": "enp6s0",
          "ipam": {
            "type": "whereabouts",
            "range": "192.168.122.0/24",
            "range_start": "192.168.122.30",
            "range_end": "192.168.122.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: storage
      namespace: openstack
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "storage",
          "type": "macvlan",
          "master": "storage",
          "ipam": {
            "type": "whereabouts",
            "range": "172.18.0.0/24",
            "range_start": "172.18.0.30",
            "range_end": "172.18.0.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: tenant
      namespace: openstack
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "tenant",
          "type": "macvlan",
          "master": "tenant",
          "ipam": {
            "type": "whereabouts",
            "range": "172.19.0.0/24",
            "range_start": "172.19.0.30",
            "range_end": "172.19.0.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      labels:
        osp/net: octavia
      name: octavia
      namespace: openstack
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "octavia",
          "type": "bridge",
          "bridge": "octbr",
          "ipam": {
            "type": "whereabouts",
            "range": "172.23.0.0/24",
            "range_start": "172.23.0.30",
            "range_end": "172.23.0.70",
            "routes": [
               {
                 "dst": "172.24.0.0/16",
                 "gw" : "172.23.0.150"
               }
             ]
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: designate
      namespace: openstack
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "designate",
          "type": "macvlan",
          "master": "designate",
          "ipam": {
            "type": "whereabouts",
            "range": "172.26.0.0/16",
            "range_start": "172.26.0.30",
            "range_end": "172.26.0.70",
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: designateext
      namespace: openstack
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "designateext",
          "type": "macvlan",
          "master": "designateext",
          "ipam": {
            "type": "whereabouts",
            "range": "172.34.0.0/16",
            "range_start": "172.34.0.30",
            "range_end": "172.34.0.70",
          }
        }
    • metadata.namespace: サービスがデプロイされる namespace。
    • "master": nncp CR で定義されている、ネットワークに関連付けられたノードインターフェイス名。
    • "ipam": whereabouts CNI IPAM プラグインは、作成された Pod に .30 - .70 の範囲の IP を割り当てます。
    • "range_start" - "range_end": IP アドレスプールの範囲が、MetalLB IPAddressPool の範囲および NetConfig allocationRange と重複しないようにしてください。
  3. クラスターに NetworkAttachmentDefinition CR を作成します。

    $ oc apply -f openstack-net-attach-def.yaml
  4. NetworkAttachmentDefinition CR が作成されたことを確認します。

    $ oc get net-attach-def -n openstack

8.3.3. RHOSO ネットワーク VIPS 用の RHOCP の準備

MetalLB Operator を使用して、分離ネットワーク上の内部サービスエンドポイントを公開します。仮想 IP (VIP) のアナウンス方法を定義するには L2Advertisement リソースを作成し、VIP として使用できる IP を設定するには IPAddressPool リソースを作成する必要があります。レイヤー 2 モードでは、1 つのノードがローカルネットワークにサービスをアドバタイズする役割を担います。

手順

  1. ワークステーションに IPAddressPool CR ファイル (例: openstack-ipaddresspools.yaml) を作成します。
  2. IPAddressPool CR ファイルで、分離ネットワークの IPAddressPool リソースを設定して、MetalLB に権限を与える IP アドレスの範囲を指定します。

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: ctlplane
    spec:
      addresses:
        - 192.168.122.80-192.168.122.90
      autoAssign: true
      avoidBuggyIPs: false
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: internalapi
      namespace: metallb-system
    spec:
      addresses:
        - 172.17.0.80-172.17.0.90
      autoAssign: true
      avoidBuggyIPs: false
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: storage
    spec:
      addresses:
        - 172.18.0.80-172.18.0.90
      autoAssign: true
      avoidBuggyIPs: false
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: tenant
    spec:
      addresses:
        - 172.19.0.80-172.19.0.90
      autoAssign: true
      avoidBuggyIPs: false
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: designateext
    spec:
      addresses:
        - 172.34.0.80-172.34.0.120
      autoAssign: true
      avoidBuggyIPs: false
    ---
    • spec.addresses: IPAddressPool の範囲が、whereabouts IPAM の範囲および NetConfig allocationRange と重複しないようにしてください。

    その他の IPAddressPool リソースパラメーターを設定する方法は、RHOCP ネットワーク ガイドの MetalLB アドレスプールの設定 を参照してください。

  3. クラスターに IPAddressPool CR を作成します。

    $ oc apply -f openstack-ipaddresspools.yaml
  4. IPAddressPool CR が作成されたことを確認します。

    $ oc describe -n metallb-system IPAddressPool
  5. ワークステーションに L2Advertisement CR ファイル (例: openstack-l2advertisement.yaml) を作成します。
  6. L2Advertisement CR ファイルで、L2Advertisement CR を設定して、どのノードがローカルネットワークにサービスをアドバタイズするかを定義します。各ネットワークに 1 つの L2Advertisement リソースを作成します。

    次の例の各 L2Advertisement CR では、ネットワークアドレスプールから要求された VIP が VLAN に割り当てられているインターフェイスで通知されるように指定しています。

    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: ctlplane
      namespace: metallb-system
    spec:
      ipAddressPools:
      - ctlplane
      interfaces:
      - enp6s0
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: internalapi
      namespace: metallb-system
    spec:
      ipAddressPools:
      - internalapi
      interfaces:
      - internalapi
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: storage
      namespace: metallb-system
    spec:
      ipAddressPools:
      - storage
      interfaces:
      - storage
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: tenant
      namespace: metallb-system
    spec:
      ipAddressPools:
      - tenant
      interfaces:
      - tenant
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: designateext
      namespace: metallb-system
    spec:
      ipAddressPools:
      - designateext
      interfaces:
      - designateext
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    • spec.interfaces: VLAN アドレスプールから要求された VIP が通知されるインターフェイス。

    その他の L2Advertisement リソースパラメーターを設定する方法は、RHOCP ネットワーク ガイドの L2 アドバタイズメントとラベルを使用した MetalLB の設定 を参照してください。

  7. クラスターに L2Advertisement CR を作成します。

    $ oc apply -f openstack-l2advertisement.yaml
  8. L2Advertisement CR が作成されたことを確認します。

    $ oc get -n metallb-system L2Advertisement
    NAME          IPADDRESSPOOLS    IPADDRESSPOOL SELECTORS   INTERFACES
    ctlplane      ["ctlplane"]                                ["enp6s0"]
    designateext  ["designateext"]                            ["designateext"]
    internalapi   ["internalapi"]                             ["internalapi"]
    storage       ["storage"]                                 ["storage"]
    tenant        ["tenant"]                                  ["tenant"]
  9. クラスターにネットワークバックエンドとして OVNKubernetes がある場合は、MetalLB がセカンダリーネットワークインターフェイスで動作できるように、グローバル転送を有効にする必要があります。

    1. クラスターが使用するネットワークバックエンドを確認します。

      $ oc get network.operator cluster --output=jsonpath='{.spec.defaultNetwork.type}'
    2. バックエンドが OVNKubernetes の場合は、次のコマンドを実行してグローバル IP 転送を有効にします。

      $ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る