5.3. 在 RHOSO 上为 BGP 网络准备 RHOCP
Red Hat OpenStack Services on OpenShift (RHOSO)服务作为 Red Hat OpenShift Container Platform (RHOCP)工作负载运行。您可以使用 NMState Operator 将 worker 节点连接到所需的隔离网络。您可以使用 MetalLB Operator 在隔离的网络上公开内部服务端点。默认情况下,公共服务端点作为 RHOCP 路由公开。
以下流程中的示例使用 IPv4 地址。您可以使用 IPv6 地址而不是 IPv4 地址。双堆栈 IPv4/6 不可用。有关如何配置 IPv6 地址的详情,请参考 RHOCP 网络指南中的以下资源 :
5.3.1. 在 RHOCP 节点的 BGP 接口上禁用 rcp_filter 复制链接链接已复制到粘贴板!
要让 Red Hat OpenShift Container Platform (RHOCP) worker 节点根据它们接收的 BGP 公告转发流量,您必须在运行 RHOSO 服务的 RHOCP worker 节点上禁用反向路径过滤器。
流程
创建名为
tuned.yaml的清单文件,其内容类似如下:apiVersion: tuned.openshift.io/v1 kind: Tuned metadata: name: default namespace: openshift-cluster-node-tuning-operator spec: profile: - data: | [main] summary=Optimize systems running OpenShift (provider specific parent profile) include=-provider-${f:exec:cat:/var/lib/ocp-tuned/provider},openshift [sysctl] net.ipv4.conf.enp8s0.rp_filter=0 net.ipv4.conf.enp9s0.rp_filter=0 name: openshift recommend: - match: - label: kubernetes.io/hostname value: worker-0 - label: kubernetes.io/hostname value: worker-1 - label: kubernetes.io/hostname value: worker-2 - label: node-role.kubernetes.io/master operand: tunedConfig: reapply_sysctl: false priority: 15 profile: openshift-no-reapply-sysctl status: {}保存文件并创建
Tuned资源:$ oc create -f tuned.yaml
5.3.2. 使用 BGP 的隔离网络接口准备 RHOCP 复制链接链接已复制到粘贴板!
创建一个 NodeNetworkConfigurationPolicy (nncp)自定义资源(CR),以便在 Red Hat OpenShift Container Platform (RHOCP)集群中的每个 worker 节点上为每个隔离网络配置接口。
流程
-
在工作站上创建一个
NodeNetworkConfigurationPolicy(nncp) CR 文件,例如openstack-nncp-bgp.yaml。 检索 RHOCP 集群中 worker 节点的名称:
$ 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 节点的名称,如worker-1。为每个 worker 节点重复此步骤。
-
将
在
nncpCR 文件中,在 RHOCP 集群中每个 worker 节点上为每个隔离网络配置接口。有关必须配置网络隔离的默认物理数据中心网络的信息,请参阅 OpenShift 网络上的默认 Red Hat OpenStack Services for BGP。在以下示例中,
nncpCR 配置用于映射 Red Hat OpenStack Services on OpenShift (RHOSO)网络的多个未连接的网桥。您可以使用 BGP 接口与网络光纤对等,并建立连接。环回接口配置了 BGP 网络源地址99.99.0.x。您可以选择将 NIC 专用于ctlplane网络。apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: labels: osp/nncm-config-type: standard name: worker-0 namespace: openstack spec: desiredState: dns-resolver: config: search: [] server: - 192.168.122.1 interfaces: - description: internalapi bridge mtu: 1500 name: internalapi state: up type: linux-bridge - description: storage bridge mtu: 1500 name: storage state: up type: linux-bridge - description: tenant bridge mtu: 1500 name: tenant state: up type: linux-bridge - description: ctlplane bridge mtu: 1500 name: ospbr state: up type: linux-bridge - description: BGP interface 1 ipv4: address: - ip: 100.64.0.14 prefix-length: "30" dhcp: false enabled: true ipv6: enabled: false mtu: 1500 name: enp8s0 state: up type: ethernet - description: BGP interface 2 ipv4: address: - ip: 100.65.0.14 prefix-length: "30" dhcp: false enabled: true ipv6: enabled: false mtu: 1500 name: enp9s0 state: up type: ethernet - description: loopback interface ipv4: address: - ip: 99.99.0.3 prefix-length: "32" dhcp: false enabled: true mtu: 65536 name: lo state: up route-rules: config: [] routes: config: - destination: 99.99.0.0/16 next-hop-address: 100.64.0.13 next-hop-interface: enp8s0 - destination: 99.99.0.0/16 next-hop-address: 100.65.0.13 next-hop-interface: enp9s0 nodeSelector: kubernetes.io/hostname: worker-0 node-role.kubernetes.io/worker: ""在集群中创建
nncpCR:$ oc apply -f openstack-nncp-bgp.yaml验证
nncpCR 是否已创建:$ 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
5.3.3. 将服务 pod 附加到 BGP 的隔离网络 复制链接链接已复制到粘贴板!
为每个隔离网络创建一个 NetworkAttachmentDefinition (net-attach-def)自定义资源(CR),以将服务 pod 附加到网络。
流程
-
在工作站上创建一个
NetworkAttachmentDefinition(net-attach-def) CR 文件,如openstack-net-attach-def.yaml。 在
NetworkAttachmentDefinitionCR 文件中,为每个隔离网络配置NetworkAttachmentDefinition资源,以将服务部署 pod 附加到网络。以下示例创建一个NetworkAttachmentDefinition资源,它使用带有特定网关配置和其他选项的类型网桥接口:apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: labels: osp/net: internalapi osp/net-attach-def-type: standard name: internalapi namespace: openstack1 spec: config: | { "cniVersion": "0.3.1", "name": "internalapi",2 "type": "bridge", "isDefaultGateway": true, "isGateway": true, "forceAddress": false, "ipMasq": true, "hairpinMode": true, "bridge": "internalapi", "ipam": {3 "type": "whereabouts", "range": "172.17.0.0/24", "range_start": "172.17.0.30",4 "range_end": "172.17.0.70", "gateway": "172.17.0.1" } }在集群中创建
NetworkAttachmentDefinitionCR:$ oc apply -f openstack-net-attach-def.yaml验证
NetworkAttachmentDefinitionCR 是否已创建:$ oc get net-attach-def -n openstack
5.3.4. 为 BGP 为 RHOSO 网络 VIPS 准备 RHOCP 复制链接链接已复制到粘贴板!
您必须创建 BGPPeer 自定义资源(CR)对,以定义哪个叶交换机连接到每个节点上的 eth2 和 eth3 接口。例如,worker-0 有两个 BGPPeer CR,一个用于 leaf-0,一个用于 leaf-1。有关 BGP 对等点的详情,请参考 link:https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/ingress_and_load_balancing/load-balancing-with-metallb#nw-metallb-configure-bgppeer_configure-metallb-bgp-peers [配置 BGP peer]。
您还必须创建 IPAddressPool CR 来定义要公告的网络范围,以及一个 BGPAdvertisement CR,用于定义如何声明 BGPPeer CR,并将 IPAddressPool CR 链接到接收广告的 BGPPeer CR。
流程
-
在工作站上创建一个
BGPPeerCR 文件,如bgppeers.yaml。 将每个节点的
BGPPeerCR 对配置为 peer。以下示例为worker-0节点配置两个BGPPeerCR,一个用于 leaf-0,一个用于 leaf-1 :apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: bgp-peer-node-0-0 namespace: metallb-system spec: myASN: 64999 nodeSelectors: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - worker-0 password: r3dh4t1234 peerASN: 64999 peerAddress: 100.64.0.13 --- apiVersion: metallb.io/v1beta2 kind: BGPPeer metadata: name: bgp-peer-node-0-1 namespace: metallb-system spec: myASN: 64999 nodeSelectors: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - worker-0 password: r3dh4t1234 peerASN: 64999 peerAddress: 100.65.0.13创建 BGPPeer CR:
$ oc create -f bgppeers.yaml-
在工作站上创建一个
IPAddressPoolCR 文件,例如ipaddresspools-bgp.yaml。 在
IPAddressPoolCR 文件中,在每个隔离网络上配置IPAddressPool资源,以指定 MetalLB 具有授权的 IP 地址范围:apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: ctlplane namespace: metallb-system spec: addresses: - 192.168.125.80-192.168.125.901 --- apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: internalapi namespace: metallb-system spec: addresses: - 172.17.0.80-172.17.0.90- 1
IPAddressPool范围不得与whereaboutsIPAM 范围和 NetConfigallocationRange重叠。
有关如何配置其他
IPAddressPool资源参数的详情,请参考 RHOCP 网络概述 中配置 MetalLB BGP 对等点。在集群中创建
IPAddressPoolCR:$ oc apply -f ipaddresspools-bgp.yaml验证
IPAddressPoolCR 是否已创建:$ oc describe -n metallb-system IPAddressPool在工作站上创建一个
BGPAdvertisementCR 文件,如bgpadvert.yaml。apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement namespace: metallb-system spec: ipAddressPools: - ctlplane - internalapi - storage - tenant peers:1 - bgp-peer-node-0-0 - bgp-peer-node-0-1 - bgp-peer-node-1-0 - bgp-peer-node-1-1 - bgp-peer-node-2-0 - bgp-peer-node-2-1 ...- 1
- 列出您为每个 RHOCP 节点需要与之通信的对等 IP 地址定义的所有
BGPPeerCR。
在集群中创建
BGPAdvertisementCR:$ oc apply -f bgpadvert.yaml如果您的集群将 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