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 ポートに割り当てます。
ポートを表示します。
$ openstack port show <cluster_name>-<cluster_ID>-ingress-port
ポートを IP アドレスに接続します。
$ openstack floating ip set --port <ingress_port_ID> <apps_FIP>
*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 作成の速度と効率性を制御することができます。
手順
コマンドラインから、編集する Cluster Network Operator (CNO) CR を開きます。
$ oc edit networks.operator.openshift.io cluster
要件に合わせて設定を編集します。以下のファイルをサンプルとして紹介しています。
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
enablePortPoolsPrepopulationをtrueに設定して、Pod 専用ネットワークを使用するように設定された最初の Pod が namespace で作成されると、Kuryr が Neutron ポートを作成するようにします。この設定により、Neutron ポートのクォータが引き上げられますが、Pod の起動に必要となる時間を短縮できます。デフォルト値はfalseです。- 2
- Kuryr は、対象のプール内にある空きポートの数が
poolMinPortsの値よりも少ない場合には、プールに新規ポートを作成します。デフォルト値は1です。 - 3
poolBatchPortsは、空きポートの数がpoolMinPortsの値よりも少ない場合に作成される新規ポートの数を制御します。デフォルト値は3です。- 4
- プール内の空きポートの数が
poolMaxPortsの値よりも多い場合に、Kuryr はその値と同じ数になるまでポートを削除します。この値を0に設定すると、この上限は無効になり、プールが縮小できないようにします。デフォルト値は0です。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
実行中のクラスターでこれらのオプションを変更すると、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) インターフェイスを作成している。
手順
クラスターにある 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"
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"
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" }'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 ハードウェアオフロードネットワークをプロビジョニングしている。
手順
次のテンプレートから
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
コマンドラインから次のコマンドを入力して、ファイルを使用してクラスターにパッチを適用します。
$ 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 に接続を追加します。
手順
Cluster Network Operator (CNO) を編集するには、次のコマンドを入力します。
$ oc edit networks.operator.openshift.io cluster
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注記ステートフルアドレスモードを使用している場合は、CNI 設定に IP アドレス管理 (IPAM) を含めます。
Multus は DHCPv6 をサポートしていません。
- 変更を保存し、テキストエディターを終了して、変更をコミットします。
検証
コマンドラインで、次のコマンドを入力します。
$ 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 を作成します。
手順
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: 8080Pod を作成します。たとえば、コマンドラインで次のコマンドを入力します。
$ oc create -f <ipv6_enabled_resource>
ここでは、以下のようになります。
- <ipv6_enabled_resource>
- リソース定義を含むファイルを指定します。