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 クラスター内の各ワーカーノード上の各分離ネットワークのインターフェイスを設定します。
手順
-
ワークステーションに
NodeNetworkConfigurationPolicy(nncp) CR ファイル (例:openstack-nncp.yaml) を作成します。 RHOCP クラスター内のワーカーノードの名前を取得します。
$ oc get nodes -l node-role.kubernetes.io/worker -o jsonpath="{.items[*].metadata.name}"ネットワーク設定を確認します。
$ oc get nns/<worker_node> -o yaml | more-
<worker_node>は、手順 2 で取得したワーカーノードの名前 (例:worker-1) に置き換えます。各ワーカーノードに対してこの手順を繰り返します。
-
nncpCR ファイルで、RHOCP クラスター内の各ワーカーノードの分離ネットワークそれぞれのインターフェイスを設定します。ネットワーク分離を設定する必要があるデフォルトの物理データセンターネットワークの詳細は、デフォルトの Red Hat OpenStack Services on OpenShift ネットワーク を参照してください。次の例では、
nncpCR は、ワーカーノード 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: ""クラスターに
nncpCR を作成します。$ oc apply -f openstack-nncp.yamlnncpCR が作成されたことを確認します。$ 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) を作成します。
手順
-
ワークステーションに
NetworkAttachmentDefinition(net-attach-def) CR ファイル (例:openstack-net-attach-def.yaml) を作成します。 NetworkAttachmentDefinitionCR ファイルで、各分離ネットワークのNetworkAttachmentDefinitionリソースを設定して、サービスデプロイメント Pod をネットワークに割り当てます。次の例では、次のネットワークのNetworkAttachmentDefinitionリソースを作成します。-
macvlanタイプのinternalapi、storage、ctlplane、および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":nncpCR で定義されている、ネットワークに関連付けられたノードインターフェイス名。 -
"ipam":whereaboutsCNI IPAM プラグインは、作成された Pod に.30 - .70の範囲の IP を割り当てます。 -
"range_start" - "range_end": IP アドレスプールの範囲が、MetalLBIPAddressPoolの範囲およびNetConfig allocationRangeと重複しないようにしてください。
-
クラスターに
NetworkAttachmentDefinitionCR を作成します。$ oc apply -f openstack-net-attach-def.yamlNetworkAttachmentDefinitionCR が作成されたことを確認します。$ oc get net-attach-def -n openstack
8.3.3. RHOSO ネットワーク VIPS 用の RHOCP の準備 リンクのコピーリンクがクリップボードにコピーされました!
MetalLB Operator を使用して、分離ネットワーク上の内部サービスエンドポイントを公開します。仮想 IP (VIP) のアナウンス方法を定義するには L2Advertisement リソースを作成し、VIP として使用できる IP を設定するには IPAddressPool リソースを作成する必要があります。レイヤー 2 モードでは、1 つのノードがローカルネットワークにサービスをアドバタイズする役割を担います。
手順
-
ワークステーションに
IPAddressPoolCR ファイル (例:openstack-ipaddresspools.yaml) を作成します。 IPAddressPoolCR ファイルで、分離ネットワークの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の範囲が、whereaboutsIPAM の範囲および NetConfigallocationRangeと重複しないようにしてください。
その他の
IPAddressPoolリソースパラメーターを設定する方法は、RHOCP ネットワーク ガイドの MetalLB アドレスプールの設定 を参照してください。-
クラスターに
IPAddressPoolCR を作成します。$ oc apply -f openstack-ipaddresspools.yamlIPAddressPoolCR が作成されたことを確認します。$ oc describe -n metallb-system IPAddressPool-
ワークステーションに
L2AdvertisementCR ファイル (例:openstack-l2advertisement.yaml) を作成します。 L2AdvertisementCR ファイルで、L2AdvertisementCR を設定して、どのノードがローカルネットワークにサービスをアドバタイズするかを定義します。各ネットワークに 1 つのL2Advertisementリソースを作成します。次の例の各
L2AdvertisementCR では、ネットワークアドレスプールから要求された 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 の設定 を参照してください。-
クラスターに
L2AdvertisementCR を作成します。$ oc apply -f openstack-l2advertisement.yamlL2AdvertisementCR が作成されたことを確認します。$ 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"]クラスターにネットワークバックエンドとして OVNKubernetes がある場合は、MetalLB がセカンダリーネットワークインターフェイスで動作できるように、グローバル転送を有効にする必要があります。
クラスターが使用するネットワークバックエンドを確認します。
$ oc get network.operator cluster --output=jsonpath='{.spec.defaultNetwork.type}'バックエンドが OVNKubernetes の場合は、次のコマンドを実行してグローバル IP 転送を有効にします。
$ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge