4.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 网络指南中的以下资源

4.3.1. 在 RHOCP 节点的 BGP 接口上禁用 rcp_filter

要让 Red Hat OpenShift Container Platform (RHOCP) worker 节点根据它们接收的 BGP 公告转发流量,您必须在运行 RHOSO 服务的 RHOCP worker 节点上禁用反向路径过滤器。

流程

  1. 创建名为 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: {}
    Copy to Clipboard Toggle word wrap
  2. 保存文件并创建 Tuned 资源:

    $ oc create -f tuned.yaml
    Copy to Clipboard Toggle word wrap

4.3.2. 使用 BGP 的隔离网络接口准备 RHOCP

创建一个 NodeNetworkConfigurationPolicy (nncp)自定义资源(CR),以便在 Red Hat OpenShift Container Platform (RHOCP)集群中的每个 worker 节点上为每个隔离网络配置接口。

流程

  1. 在工作站上创建一个 NodeNetworkConfigurationPolicy (nncp) CR 文件,例如 openstack-nncp-bgp.yaml
  2. 检索 RHOCP 集群中 worker 节点的名称:

    $ oc get nodes -l node-role.kubernetes.io/worker -o jsonpath="{.items[*].metadata.name}"
    Copy to Clipboard Toggle word wrap
  3. 发现网络配置:

    $ oc get nns/<worker_node> -o yaml | more
    Copy to Clipboard Toggle word wrap
    • <worker_node > 替换为在第 2 步中获取的 worker 节点的名称,如 worker-1。为每个 worker 节点重复此步骤。
  4. nncp CR 文件中,在 RHOCP 集群中每个 worker 节点上为每个隔离网络配置接口。有关必须配置网络隔离的默认物理数据中心网络的信息,请参阅 OpenShift 网络上的默认 Red Hat OpenStack Services for BGP

    在以下示例中,nncp CR 配置用于映射 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: ""
    Copy to Clipboard Toggle word wrap
  5. 在集群中创建 nncp CR:

    $ oc apply -f openstack-nncp-bgp.yaml
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

4.3.3. 将服务 pod 附加到 BGP 的隔离网络

为每个隔离网络创建一个 NetworkAttachmentDefinition (net-attach-def)自定义资源(CR),以将服务 pod 附加到网络。

流程

  1. 在工作站上创建一个 NetworkAttachmentDefinition (net-attach-def) CR 文件,如 openstack-net-attach-def.yaml
  2. NetworkAttachmentDefinition CR 文件中,为每个隔离网络配置 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: openstack 
    1
    
    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"
        }
      }
    Copy to Clipboard Toggle word wrap
    1
    部署服务的命名空间。
    2
    与网络关联的节点接口名称,如 nncp CR 中定义的。
    3
    将 IP 分配给从范围 .30 - .70 中创建的 pod 的 whereabouts CNI IPAM 插件。
    4
    IP 地址池范围不得与 MetalLB IPAddressPool 范围和 NetConfig allocationRange 重叠。
  3. 在集群中创建 NetworkAttachmentDefinition CR:

    $ oc apply -f openstack-net-attach-def.yaml
    Copy to Clipboard Toggle word wrap
  4. 验证 NetworkAttachmentDefinition CR 是否已创建:

    $ oc get net-attach-def -n openstack
    Copy to Clipboard Toggle word wrap

4.3.4. 为 BGP 为 RHOSO 网络 VIPS 准备 RHOCP

您必须创建 BGPPeer 自定义资源(CR)对,以定义哪个叶交换机连接到每个节点上的 eth2eth3 接口。例如,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。

流程

  1. 在工作站上创建一个 BGPPeer CR 文件,如 bgppeers.yaml
  2. 将每个节点的 BGPPeer CR 对配置为 peer。以下示例为 worker-0 节点配置两个 BGPPeer CR,一个用于 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
    Copy to Clipboard Toggle word wrap
  3. 创建 BGPPeer CR:

    $ oc create -f bgppeers.yaml
    Copy to Clipboard Toggle word wrap
  4. 在工作站上创建一个 IPAddressPool CR 文件,例如 ipaddresspools-bgp.yaml
  5. IPAddressPool CR 文件中,在每个隔离网络上配置 IPAddressPool 资源,以指定 MetalLB 具有授权的 IP 地址范围:

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: ctlplane
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.125.80-192.168.125.90 
    1
    
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: internalapi
      namespace: metallb-system
    spec:
      addresses:
      - 172.17.0.80-172.17.0.90
    Copy to Clipboard Toggle word wrap
    1
    IPAddressPool 范围不得与 whereabouts IPAM 范围和 NetConfig allocationRange 重叠。

    有关如何配置其他 IPAddressPool 资源参数的详情,请参考 RHOCP 网络概述 中配置 MetalLB BGP 对等点

  6. 在集群中创建 IPAddressPool CR:

    $ oc apply -f ipaddresspools-bgp.yaml
    Copy to Clipboard Toggle word wrap
  7. 验证 IPAddressPool CR 是否已创建:

    $ oc describe -n metallb-system IPAddressPool
    Copy to Clipboard Toggle word wrap
  8. 在工作站上创建一个 BGPAdvertisement CR 文件,如 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
      ...
    Copy to Clipboard Toggle word wrap
    1
    列出您为每个 RHOCP 节点需要与之通信的对等 IP 地址定义的所有 BGPPeer CR。
  9. 在集群中创建 BGPAdvertisement CR:

    $ oc apply -f bgpadvert.yaml
    Copy to Clipboard Toggle word wrap
  10. 如果您的集群将 OVNKubernetes 用作网络后端,则必须启用全局转发,以便 MetalLB 可以在二级网络接口中工作。

    1. 检查集群使用的网络后端:

      $ oc get network.operator cluster --output=jsonpath='{.spec.defaultNetwork.type}'
      Copy to Clipboard Toggle word wrap
    2. 如果后端是 OVNKubernetes,则运行以下命令来启用全局 IP 转发:

      $ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat