9.10. インストール後の RHOSP ネットワーク設定

インストール後に、OpenShift Container Platform の一部を Red Hat OpenStack Platform (RHOSP) クラスターに設定することができます。

9.10.1. Floating IP アドレスを使用したアプリケーションアクセスの設定

OpenShift Container Platform をインストールした後に、アプリケーションネットワークトラフィックを許可するように Red Hat OpenStack Platform (RHOSP) を設定します。

注記

インストール中に、install-config.yaml ファイルの platform.openstack.apiFloatingIP および platform.openstack.ingressFloatingIP に値を指定した場合、または inventory.yaml Playbook の os_api_fip および os_ingress_fip に値を指定した場合は、この手順を実行する必要はありません。Floating IP アドレスはすでに設定されています。

前提条件

  • OpenShift Container Platform クラスターがインストールされている必要があります。
  • OpenShift Container Platform の RHOSP へのインストールに関するドキュメントで説明されているように、Floating IP アドレスが有効にされます。

手順

OpenShift Container Platform クラスターをインストールした後に、Floating IP アドレスを Ingress ポートに割り当てます。

  1. ポートを表示します。

    $ openstack port show <cluster_name>-<cluster_ID>-ingress-port
  2. ポートを IP アドレスに接続します。

    $ openstack floating ip set --port <ingress_port_ID> <apps_FIP>
  3. *apps. のワイルドカード A レコードを DNS ファイルに追加します。

    *.apps.<cluster_name>.<base_domain>  IN  A  <apps_FIP>
注記

DNS サーバーを制御せず、非実稼働環境でアプリケーションアクセスを有効にする必要がある場合は、これらのホスト名を /etc/hosts に追加できます。

<apps_FIP> console-openshift-console.apps.<cluster name>.<base domain>
<apps_FIP> integrated-oauth-server-openshift-authentication.apps.<cluster name>.<base domain>
<apps_FIP> oauth-openshift.apps.<cluster name>.<base domain>
<apps_FIP> prometheus-k8s-openshift-monitoring.apps.<cluster name>.<base domain>
<apps_FIP> <app name>.apps.<cluster name>.<base domain>

9.10.2. Kuryr ポートプール

Kuryr ポートプールでは、Pod 作成のスタンバイ状態の多数のポートを維持します。

ポートをスタンバイ状態に維持すると、Pod の作成時間が必要最小限に抑えることができます。ポートプールを使用しない場合には、Kuryr は Pod が作成または削除されるたびにポートの作成または削除を明示的に要求する必要があります。

Kuryr が使用する Neutron ポートは、namespace に関連付けられるサブネットに作成されます。これらの Pod ポートは、OpenShift Container Platform クラスターノードのプライマリーポートにサブポートとして追加されます。

Kuryr は namespace をそれぞれ、別のサブネットに保存するため、namespace-worker ペアごとに別個のポートプールが維持されます。

クラスターをインストールする前に、cluster-network-03-config.yml マニフェストファイルに以下のパラメーターを設定して、ポートプールの動作を設定できます。

  • enablePortPoolsPrepopulation パラメーターは、プールの事前入力を制御します。これにより、Pod 専用ネットワークを使用するように設定された最初の Pod が namespace に作成されたときに、Kuryr が Neutron ポートをプールに追加します。デフォルト値は false です。
  • poolMinPorts パラメーターは、プールに保持する空きポートの最小数です。デフォルト値は 1 です。
  • poolMaxPorts パラメーターは、プールに保持する空きポートの最大数です。値が 0 の場合は、上限が無効になります。これはデフォルト設定です。

    OpenStack ポートのクォータが低い場合や、Pod ネットワークで IP アドレスの数が限定されている場合には、このオプションを設定して、不要なポートが削除されるようにします。

  • poolBatchPorts パラメーターは、一度に作成可能な Neutron ポートの最大数を定義します。デフォルト値は 3 です。

9.10.3. RHOSP でのアクティブなデプロイメントでの Kuryr ポートプール設定の調整

カスタムリソース (CR) を使用して、Kuryr が Red Hat OpenStack Platform (RHOSP) Neutron ポートをどのように管理するかを設定し、デプロイされたクラスターでの Pod 作成の速度と効率性を制御することができます。

手順

  1. コマンドラインから、編集する Cluster Network Operator (CNO) CR を開きます。

    $ oc edit networks.operator.openshift.io cluster
  2. 要件に合わせて設定を編集します。以下のファイルをサンプルとして紹介しています。

    apiVersion: operator.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      clusterNetwork:
      - cidr: 10.128.0.0/14
        hostPrefix: 23
      serviceNetwork:
      - 172.30.0.0/16
      defaultNetwork:
        type: Kuryr
        kuryrConfig:
          enablePortPoolsPrepopulation: false 1
          poolMinPorts: 1 2
          poolBatchPorts: 3 3
          poolMaxPorts: 5 4
    1
    enablePortPoolsPrepopulationtrue に設定して、Pod 専用ネットワークを使用するように設定された最初の Pod が namespace で作成されると、Kuryr が Neutron ポートを作成するようにします。この設定により、Neutron ポートのクォータが引き上げられますが、Pod の起動に必要となる時間を短縮できます。デフォルト値は false です。
    2
    Kuryr は、対象のプール内にある空きポートの数が poolMinPorts の値よりも少ない場合には、プールに新規ポートを作成します。デフォルト値は 1 です。
    3
    poolBatchPorts は、空きポートの数が poolMinPorts の値よりも少ない場合に作成される新規ポートの数を制御します。デフォルト値は 3 です。
    4
    プール内の空きポートの数が poolMaxPorts の値よりも多い場合に、Kuryr はその値と同じ数になるまでポートを削除します。この値を 0 に設定すると、この上限は無効になり、プールが縮小できないようにします。デフォルト値は 0 です。
  3. 変更を保存し、テキストエディターを終了して、変更をコミットします。
重要

実行中のクラスターでこれらのオプションを変更すると、kuryr-controller および kuryr-cni Pod が再起動を強制的に実行します。その結果、新規 Pod およびサービスの作成が遅延します。

9.10.4. OVS ハードウェアオフロードの有効化

Red Hat OpenStack Platform (RHOSP) で実行されるクラスターの場合、Open vSwitch(OVS) ハードウェアオフロードを有効にすることができます。

OVS は、大規模なマルチサーバーネットワークの仮想化を可能にするマルチレイヤー仮想スイッチです。

前提条件

  • Single-root Input/Output Virtualization (SR-IOV) 用に設定された RHOSP にクラスターをインストールしている。
  • SR-IOV Network Operator がクラスターにインストールされている。
  • クラスターに 2 つの hw-offload タイプの Virtual Function (VF) インターフェイスを作成している。

手順

  1. クラスターにある 2 つの hw-offload タイプの VF インターフェイスの SriovNetworkNodePolicy ポリシーを作成します。

    2 番目の Virtual Function インターフェイス

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy 1
    metadata:
      name: "hwoffload9"
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      isRdma: true
      nicSelector:
        pfNames: 2
        - ens6
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: 'true'
      numVfs: 1
      priority: 99
      resourceName: "hwoffload9"

    1
    SriovNetworkNodePolicy の値をここに挿入します。
    2
    どちらのインターフェイスにも Physical Function (PF) 名が含まれている必要があります。

    2 番目の Virtual Function インターフェイス

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy 1
    metadata:
      name: "hwoffload10"
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      isRdma: true
      nicSelector:
        pfNames: 2
        - ens5
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: 'true'
      numVfs: 1
      priority: 99
      resourceName: "hwoffload10"

    1
    SriovNetworkNodePolicy の値をここに挿入します。
    2
    どちらのインターフェイスにも Physical Function (PF) 名が含まれている必要があります。
  2. 2 つのインターフェイス用に NetworkAttachmentDefinition リソースを作成します。

    1 番目のインターフェイス用NetworkAttachmentDefinition リソース

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload9
      name: hwoffload9
      namespace: default
    spec:
        config: '{ "cniVersion":"0.3.1", "name":"hwoffload9","type":"host-device","device":"ens6"
        }'

    2 番目のインターフェイス用NetworkAttachmentDefinition リソース

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      annotations:
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload10
      name: hwoffload10
      namespace: default
    spec:
        config: '{ "cniVersion":"0.3.1", "name":"hwoffload10","type":"host-device","device":"ens5"
        }'

  3. Pod で作成したインターフェイスを使用します。以下に例を示します。

    2 つの OVS オフロードインターフェイスを使用する Pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: dpdk-testpmd
      namespace: default
      annotations:
        irq-load-balancing.crio.io: disable
        cpu-quota.crio.io: disable
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload9
        k8s.v1.cni.cncf.io/resourceName: openshift.io/hwoffload10
    spec:
      restartPolicy: Never
      containers:
      - name: dpdk-testpmd
        image: quay.io/krister/centos8_nfv-container-dpdk-testpmd:latest

9.10.5. OVS ハードウェアオフロードネットワークの接続

Open vSwitch (OVS) ハードウェアオフロードネットワークをクラスターに接続できます。

前提条件

  • クラスターがインストールされ、実行されている。
  • クラスターで使用するために、Red Hat OpenStack Platform (RHOSP) で OVS ハードウェアオフロードネットワークをプロビジョニングしている。

手順

  1. 次のテンプレートから network.yaml という名前のファイルを作成します。

    spec:
      additionalNetworks:
      - name: hwoffload1
        namespace: cnf
        rawCNIConfig: '{ "cniVersion": "0.3.1", "name": "hwoffload1", "type": "host-device","pciBusId": "0000:00:05.0", "ipam": {}}' 1
        type: Raw

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

    pciBusId

    オフロードネットワークに接続されているデバイスを指定します。この値がわからない場合は、次のコマンドを実行してこの値を見つけることができます。

    $ oc describe SriovNetworkNodeState -n openshift-sriov-network-operator
  2. コマンドラインから次のコマンドを入力して、ファイルを使用してクラスターにパッチを適用します。

    $ oc apply -f network.yaml

9.10.6. RHOSP で Pod への IPv6 接続を有効にする

異なるノード上にある追加のネットワークを持つ Pod 間の IPv6 接続を有効にするには、サーバーの IPv6 ポートのポートセキュリティーを無効にします。ポートセキュリティーを無効にすると、Pod に割り当てられた IPv6 アドレスごとに許可されたアドレスペアを作成する必要がなくなり、セキュリティーグループのトラフィックが有効になります。

重要

次の IPv6 追加ネットワーク設定のみがサポートされています。

  • SLAAC とホストデバイス
  • SLAAC と MACVLAN
  • DHCP ステートレスおよびホストデバイス
  • DHCP ステートレスおよび MACVLAN

手順

  • コマンドラインで、次のコマンドを入力します。

    $ openstack port set --no-security-group --disable-port-security <compute_ipv6_port>
    重要

    このコマンドは、ポートからセキュリティーグループを削除し、ポートセキュリティーを無効にします。トラフィックの制限は、ポートから完全に削除されます。

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

<compute_ipv6_port>
コンピュートサーバーの IPv6 ポートを指定します。

9.10.7. RHOSP 上の Pod への IPv6 接続の追加

Pod で IPv6 接続を有効にしたら、Container Network Interface (CNI) 設定を使用して Pod に接続を追加します。

手順

  1. Cluster Network Operator (CNO) を編集するには、次のコマンドを入力します。

    $ oc edit networks.operator.openshift.io cluster
  2. spec フィールドで CNI 設定を指定します。たとえば、次の設定では、MACVLAN で SLAAC アドレスモードを使用します。

    ...
    spec:
      additionalNetworks:
      - name: ipv6
        namespace: ipv6 1
        rawCNIConfig: '{ "cniVersion": "0.3.1", "name": "ipv6", "type": "macvlan", "master": "ens4"}' 2
        type: Raw
    1 1
    同じnamespaceに Pod を作成してください。
    2
    より多くのネットワークが設定されている場合、または別のカーネルドライバーが使用されている場合、ネットワークアタッチメントの "master" フィールドのインターフェイスは "ens4" とは異なる場合があります。
    注記

    ステートフルアドレスモードを使用している場合は、CNI 設定に IP アドレス管理 (IPAM) を含めます。

    Multus は DHCPv6 をサポートしていません。

  3. 変更を保存し、テキストエディターを終了して、変更をコミットします。

検証

  • コマンドラインで、次のコマンドを入力します。

    $ oc get network-attachment-definitions -A

    出力例

    NAMESPACE       NAME            AGE
    ipv6            ipv6            21h

セカンダリー IPv6 接続を持つ Pod を作成できるようになりました。

9.10.8. RHOSP で IPv6 接続を持つ Pod の作成

Pod の IPv6 接続を有効にして Pod に追加したら、セカンダリー IPv6 接続を持つ Pod を作成します。

手順

  1. IPv6 namespaceとアノテーション k8s.v1.cni.cncf.io/networks: <additional_network_name> を使用する Pod を定義します。ここで、<additional_network_name は追加のネットワークの名前になります。たとえば、Deployment オブジェクトの一環として、以下を行います。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-openshift
      namespace: ipv6
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
             - labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - hello-openshift
      replicas: 2
      selector:
        matchLabels:
          app: hello-openshift
      template:
        metadata:
          labels:
            app: hello-openshift
          annotations:
            k8s.v1.cni.cncf.io/networks: ipv6
        spec:
          securityContext:
            runAsNonRoot: true
            seccompProfile:
              type: RuntimeDefault
          containers:
          - name: hello-openshift
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                - ALL
            image: quay.io/openshift/origin-hello-openshift
            ports:
            - containerPort: 8080
  2. Pod を作成します。たとえば、コマンドラインで次のコマンドを入力します。

    $ oc create -f <ipv6_enabled_resource>

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

<ipv6_enabled_resource>
リソース定義を含むファイルを指定します。