5.4. 使用未置备节点创建数据平面


要创建带有未置备的节点的数据平面,您必须执行以下任务:

  1. 为每个裸机数据平面节点创建一个 BareMetalHost 自定义资源(CR)。
  2. 为数据平面中的每个未置备的节点的逻辑分组定义 OpenStackDataPlaneNodeSet CR,例如,按硬件、位置或网络分组的节点。

5.4.1. 先决条件

5.4.2. 为未置备的节点创建 BareMetalHost CR

您必须为每个裸机数据平面节点创建一个 BareMetalHost 自定义资源(CR)。您至少需要提供在网络上添加裸机数据平面节点所需的数据,以便剩余的安装步骤可以访问该节点并执行配置。

注意

如果您使用 ctlplane 接口进行置备,且内核上配置了 rp_filter 来启用 Reverse Path Forwarding (RPF),则反向路径过滤逻辑会丢弃流量。有关如何防止因为 RPF 过滤器丢弃流量的详情,请参考 如何防止非对称路由

流程

  1. Bare Metal Operator (BMO)默认管理 openshift-machine-api 命名空间中的 BareMetalHost 自定义资源(CR)。更新 Provisioning CR 以监视所有命名空间:

    $ oc patch provisioning provisioning-configuration --type merge -p '{"spec":{"watchAllNamespaces": true }}'
  2. 如果您将虚拟介质引导用于裸机数据平面节点,且节点没有连接到 provisioning 网络,您必须更新 Provisioning CR 以启用 virtualMediaViaExternalNetwork,这样可通过外部网络启用裸机连接:

    $ oc patch provisioning provisioning-configuration --type merge -p '{"spec":{"virtualMediaViaExternalNetwork": true }}'
  3. 在工作站上创建一个文件,用用于访问节点集中每个裸机数据平面节点的 Baseboard Management Controller (BMC)凭证定义 Secret CR:

    apiVersion: v1
    kind: Secret
    metadata:
      name: edpm-compute-0-bmc-secret
      namespace: openstack
    type: Opaque
    data:
      username: <base64_username>
      password: <base64_password>
    • <base64_username& gt ; 和 <base64_password > 替换为 base64 编码的字符串。您可以使用以下命令生成 base64 编码的字符串:

      $ echo -n <string> | base64
      提示

      如果您不想对用户名和密码进行 base64encode,您可以使用 stringData 字段而不是 data 字段来设置用户名和密码。

  4. 在工作站上创建一个名为 bmh_nodes.yaml 的文件,该文件为每个裸机数据平面节点定义 BareMetalHost CR。以下示例使用 provisioning 方法 Redfish 虚拟介质创建一个 BareMetalHost CR:

    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: edpm-compute-0
      namespace: openstack
      labels:
        app: openstack
        workload: compute
    spec:
      bmc:
        address: redfish-virtualmedia+http://192.168.111.1:8000/redfish/v1/Systems/e8efd888-f844-4fe0-9e2e-498f4ab7806d
        credentialsName: edpm-compute-0-bmc-secret
      bootMACAddress: 00:c7:e4:a7:e7:f3
      bootMode: UEFI
      online: false
     [preprovisioningNetworkDataName: <network_config_secret_name>]
    • metadata.labels :键值对,如 appworkloadnodeName,它们为标记节点提供不同的粒度级别。在创建 OpenStackDataPlaneNodeSet CR 时,您可以使用这些标签来描述要置备的裸机节点的配置,或者在节点集中定义节点。
    • spec.bmc.address :与节点的 BMC 控制器通信的 URL。有关其他置备方法的 BMC 寻址的详情,请参考 在裸机上安装 RHOCP 中的 BMC 寻址
    • spec.bmc.credentialsName :您在上一步中创建的 Secret CR 的名称,用于访问节点的 BMC。
    • preprovisioningNetworkDataName: 可选字段,用于指定本地命名空间中的网络配置 secret 的名称,以传递给预置备镜像。网络配置必须采用 nmstate 格式。

    有关如何创建 BareMetalHost CR 的更多信息,请参阅 RHOCP 安装中的 BareMetalHost 资源

  5. 创建 BareMetalHost 资源:

    $ oc create -f bmh_nodes.yaml
  6. 验证 BareMetalHost 资源是否已创建并处于 Available 状态:

    $ oc wait --for=jsonpath='{.status.provisioning.state}'=available bmh/edpm-compute-baremetal-00 --timeout=<timeout_value>
    • 将 < timeout_value > 替换为您希望命令等待任务完成的值。例如,如果您希望命令等待 60 分钟,您可以使用值 60m。使用适合部署大小的值。给大型部署时间留出更多时间来完成部署任务。

您可以为数据平面中的每个未置备的节点的逻辑分组定义 OpenStackDataPlaneNodeSet 自定义资源(CR),例如,按硬件、位置或网络分组的节点。您可以根据部署需要定义多个节点设置。每个节点只能包含在一个 OpenStackDataPlaneNodeSet CR 中。

每个节点集只能连接到一个 Compute 单元。默认情况下,节点集连接到 cell1。如果自定义 control plane 使其包含额外的 Compute 单元,您必须指定节点集连接的单元。有关添加计算单元的更多信息,请参阅 自定义 Red Hat OpenStack Services on OpenShift 部署指南中的将 OpenStack DataPlaneNodeSet CR 连接到计算单元

您可以使用 nodeTemplate 字段配置通用属性,以应用到 OpenStackDataPlaneNodeSet CR 中的所有节点,以及节点特定属性的 nodes 字段。特定于节点的配置覆盖来自 nodeTemplate 的继承值。

注意

要在置备过程中为 data plane 节点设置 root 密码,请使用 OpenStackDataPlaneNodeSet CR 中的 passwordSecret 字段。如需更多信息,请参阅如何在 OpenShift 上的 Red Hat OpenStack Services 上为 Dataplane 节点设置 root 密码

提示

有关从未置备的 Compute 节点创建节点的 OpenStackDataPlaneNodeSet CR 示例,请参阅未置备的节点的 OpenStackDataPlaneNodeSet CR 示例。

先决条件

流程

  1. 在工作站上创建一个名为 openstack_unprovisioned_node_set.yaml 的文件,以定义 OpenStackDataPlaneNodeSet CR:

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneNodeSet
    metadata:
      name: openstack-data-plane
      namespace: openstack
    spec:
      tlsEnabled: true
      env:
        - name: ANSIBLE_FORCE_COLOR
          value: "True"
    • metadata.name: OpenStackDataPlaneNodeSet CR 名称必须是唯一的,仅包含小写字母数字字符和 - (hyphens)或 . (句点),以字母数字字符开头和结尾,且最大长度为 53 个字符。将本例中的名称更新为反映集合中节点的名称。
    • spec.env :传递给 pod 的可选环境变量列表。
  2. 将数据平面连接到 control plane 网络:

    spec:
      ...
      networkAttachments:
        - ctlplane
  3. 指定此集合中的节点是未置备的,必须在创建资源时被置备:

      preProvisioned: false
  4. 定义 baremetalSetTemplate 字段,以描述创建资源时必须置备的裸机节点的配置:

      baremetalSetTemplate:
        deploymentSSHSecret: dataplane-ansible-ssh-private-key-secret
        bmhNamespace: <bmh_namespace>
        cloudUserName: <ansible_ssh_user>
        bmhLabelSelector:
          app: <bmh_label>
        ctlplaneInterface: <interface>
    • <bmh_namespace > 替换为节点对应的 BareMetalHost CR 中定义的命名空间,例如 openstack
    • <ansible_ssh_user > 替换为 Ansible SSH 用户的用户名,如 cloud-admin
    • <bmh_label > 替换为节点对应的 BareMetalHost CR 中定义的 metadata 标签,例如 openstack。元数据标签,如 appworkloadnodeName,是用于标记节点的键值对。将 bmhLabelSelector 字段设置为根据与对应 BareMetalHost CR 中的标签匹配的一个或多个标签选择 data plane 节点。
    • <interface > 替换为节点连接的 control plane 接口,如 enp6s0
  5. 如果创建了自定义 OpenStackProvisionServer CR,请将其添加到 baremetalSetTemplate 定义中:

      baremetalSetTemplate:
        ...
        provisionServerName: my-os-provision-server
  6. 添加您创建的 SSH 密钥 secret,以便 Ansible 连接到 data plane 节点:

      nodeTemplate:
        ansibleSSHPrivateKeySecret: <secret-key>
    • <secret-key > 替换为您在 创建 data plane secret 中创建的 SSH 密钥 Secret CR 名称,如 dataplane-ansible-ssh-private-key-secret
  7. 在 Red Hat OpenShift Container Platform (RHOCP)集群上的 openstack 命名空间中创建持久性卷声明(PVC)以存储日志。将 volumeMode 设置为 Filesystem,将 accessModes 设置为 ReadWriteOnce。不要为使用 NFS 卷插件的 PersistentVolume (PV)的日志请求存储。NFS 与 FIFO 不兼容,ansible-runner 创建一个 FIFO 文件来存储日志。有关 PVC 的详情,请参考 RHOCP Storage 指南中的 了解持久性存储规划部署 中的 Red Hat OpenShift Container Platform 集群要求
  8. 为 data plane 节点启用持久性日志记录:

      nodeTemplate:
        ...
        extraMounts:
          - extraVolType: Logs
            volumes:
            - name: ansible-logs
              persistentVolumeClaim:
                claimName: <pvc_name>
            mounts:
            - name: ansible-logs
              mountPath: "/runner/artifacts"
    • <pvc_name > 替换为 RHOCP 集群中的 PVC 存储名称。
  9. 指定管理网络:

      nodeTemplate:
        ...
        managementNetwork: ctlplane
  10. 指定用于提供用户名和密码的 Secret CR,以注册节点的操作系统并启用存储库。以下示例演示了如何将节点注册到 Red Hat Content Delivery Network (CDN)。有关如何在 Red Hat Satellite 6.13 中注册节点的详情,请参阅管理主机

      nodeTemplate:
        ansible:
          ansibleUser: cloud-admin
          ansiblePort: 22
          ansibleVarsFrom:
            - secretRef:
                name: subscription-manager
            - secretRef:
                name: redhat-registry
          ansibleVars:
            rhc_release: 9.4
            rhc_repositories:
                - {name: "*", state: disabled}
                - {name: "rhel-9-for-x86_64-baseos-eus-rpms", state: enabled}
                - {name: "rhel-9-for-x86_64-appstream-eus-rpms", state: enabled}
                - {name: "rhel-9-for-x86_64-highavailability-eus-rpms", state: enabled}
                - {name: "fast-datapath-for-rhel-9-x86_64-rpms", state: enabled}
                - {name: "rhoso-18.0-for-rhel-9-x86_64-rpms", state: enabled}
                - {name: "rhceph-7-tools-for-rhel-9-x86_64-rpms", state: enabled}
            edpm_bootstrap_release_version_package: []
  11. 添加网络配置模板以应用到您的数据平面节点。以下示例将单个 NIC VLAN 网络配置应用到 data plane 节点:

      nodeTemplate:
        ...
        ansible:
          ...
          ansibleVars:
            ...
            edpm_network_config_os_net_config_mappings:
              edpm-compute-0:
                nic1: 52:54:04:60:55:22
              edpm-compute-1:
                nic1: 52:54:04:60:55:22
            neutron_physical_bridge_name: br-ex
            neutron_public_interface_name: eth0
            edpm_network_config_nmstate: true
            edpm_network_config_update: false
            edpm_network_config_template: |
              ---
              {% set mtu_list = [ctlplane_mtu] %}
              {% for network in nodeset_networks %}
              {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
              {%- endfor %}
              {% set min_viable_mtu = mtu_list | max %}
              network_config:
              - type: ovs_bridge
                name: {{ neutron_physical_bridge_name }}
                mtu: {{ min_viable_mtu }}
                use_dhcp: false
                dns_servers: {{ ctlplane_dns_nameservers }}
                domain: {{ dns_search_domains }}
                addresses:
                - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
                routes: {{ ctlplane_host_routes }}
                members:
                - type: interface
                  name: nic1
                  mtu: {{ min_viable_mtu }}
                  # force the MAC address of the bridge to this interface
                  primary: true
              {% for network in nodeset_networks %}
                - type: vlan
                  mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
                  vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
                  addresses:
                  - ip_netmask:
                      {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
                  routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
              {% endfor %}
    • nic1 :分配给 NIC 的 MAC 地址,用于 Compute 节点上的网络配置。
    • edpm_network_config_nmstate :将 os-net-config 供应商设置为 nmstate。默认值为 true。只有在 nmstate 供应商的特定限制需要您现在使用 ifcfg 供应商时,才会将其更改为 false。在以后的 nmstate 限制后,ifcfg 供应商将被弃用并删除。在此 RHOSO 发行版本中,不支持使用带有 nmstate 供应商的 RHOSP 17.1 部署。有关 RHOSO nmstate 支持的限制和其他限制,请参阅 https://issues.redhat.com/browse/OSPRH-11309
    • edpm_network_config_update :在第一次部署节点时,将 edpm_network_config_update 变量设置为 false。更新或使用节点集时,将 edpm_network_config_update 设置为 true

      重要

      在更新或采用后,您必须将 edpm_network_config_update 重置为 false。否则,节点可能会丢失网络访问。每当 edpm_network_config_updatetrue 时,每次创建 OpenStackDataPlaneDeployment CR 时,都会重新应用更新的网络配置,其中包括作为 servicesOverride 列表成员的 configure-network 服务。

    • dns_servers :从 IPAM 和 DNS 自动生成,不需要用户输入。
    • :从 IPAM 和 DNS 自动生成,不需要用户输入。
    • 路由 :从 IPAM 和 DNS 自动生成,不需要用户输入。
  12. nodeTemplate 部分下,添加此组中节点集合的通用配置。此 OpenStackDataPlaneNodeSet 中的每个节点都会继承此配置。有关可用于配置通用节点属性的属性的信息,请参阅 OpenStackDataPlaneNodeSet CR 属性
  13. 在此节点集中定义每个节点:

      nodes:
        edpm-compute-0:
          hostName: edpm-compute-0
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.100
          - name: internalapi
            subnetName: subnet1
          - name: storage
            subnetName: subnet1
          - name: tenant
            subnetName: subnet1
          networkData:
            name: edpm-compute-0-network-data
            namespace: openstack
          userData:
            name: edpm-compute-0-user-data
            namespace: openstack
          ansible:
            ansibleHost: 192.168.122.100
            ansibleUser: cloud-admin
            ansibleVars:
              fqdn_internal_api: edpm-compute-0.example.com
          bmhLabelSelector:
            nodeName: edpm-compute-0
        edpm-compute-1:
          hostName: edpm-compute-1
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.101
          - name: internalapi
            subnetName: subnet1
          - name: storage
            subnetName: subnet1
          - name: tenant
            subnetName: subnet1
          networkData:
            name: edpm-compute-1-network-data
            namespace: openstack
          userData:
            name: edpm-compute-1-user-data
            namespace: openstack
          ansible:
            ansibleHost: 192.168.122.101
            ansibleUser: cloud-admin
            ansibleVars:
              fqdn_internal_api: edpm-compute-1.example.com
          bmhLabelSelector:
            nodeName: edpm-compute-1
    • edpm-compute-0 :节点定义参考,如 edpm-compute-0。节点集中的每个节点都必须有一个节点定义。
    • 网络 :定义节点的 IPAM 和 DNS 记录。
    • fixedIP: 指定网络的可预测 IP 地址,该地址必须在 NetConfig CR 中为网络定义的分配范围内。
    • networkData :包含特定于节点的网络配置的 Secret
    • userData.name :包含特定于节点的用户数据的 Secret
    • ansibleHost:覆盖 Ansible 用于连接到节点的主机名或 IP 地址。默认值是为节点或节点定义引用设置的值,如 edpm-compute-0
    • ansibleVars :用于自定义节点的特定于节点的 Ansible 变量。
    • bmhLabelSelector: 元数据标签,如 appworkloadnodeName 是用于标记节点的键值对。将 bmhLabelSelector 字段设置为根据与对应 BareMetalHost CR 中的标签匹配的一个或多个标签选择 data plane 节点。

      注意
      • nodes 部分中定义的节点可以配置 nodeTemplate 部分中配置的同一 Ansible 变量。其中,为特定节点和 nodeTemplate 部分配置了 Ansible 变量,则特定于节点的值会覆盖 nodeTemplate 部分中的值。
      • 您不需要为节点复制所有 nodeTemplate Ansible 变量,以覆盖默认值并设置一些特定于节点的值。您只需要配置您要为节点覆盖的 Ansible 变量。
      • 许多 ansibleVars 在名称中包含 edpm,它代表 "External Data Plane Management"。

        有关可用于配置节点属性的属性的信息,请参阅 OpenStackDataPlaneNodeSet CR 属性

  14. 保存 openstack_unprovisioned_node_set.yaml 定义文件。
  15. 创建 data plane 资源:

    $ oc create --save-config -f openstack_unprovisioned_node_set.yaml -n openstack

验证

  1. 通过确认状态为 SetupReady 来验证 data plane 资源是否已创建:

    $ oc wait openstackdataplanenodeset openstack-data-plane --for condition=SetupReady --timeout=10m

    当状态为 SetupReady 时,命令会返回一个 condition met 信息,否则会返回超时错误。

    有关 data plane 条件和状态的详情,请参考 Data plane 条件和状态

  2. 验证是否为节点集合创建了 Secret 资源:

    $ oc get secret -n openstack | grep openstack-data-plane
    dataplanenodeset-openstack-data-plane Opaque 1 3m50s
  3. 验证节点是否已转换为 置备状态

    $ oc get bmh
    NAME            STATE         CONSUMER               ONLINE   ERROR   AGE
    edpm-compute-0  provisioned   openstack-data-plane   true             3d21h
  4. 验证是否已创建服务:

    $ oc get openstackdataplaneservice -n openstack
    NAME                    AGE
    bootstrap               8m40s
    ceph-client             8m40s
    ceph-hci-pre            8m40s
    configure-network       8m40s
    configure-os            8m40s
    ...

以下示例 OpenStackDataPlaneNodeSet CR 使用一些特定于节点的配置从未置备的 Compute 节点创建一个节点集。创建节点集合时,会置备未置备的 Compute 节点。这个示例包括可选字段。查看示例,并将可选字段更新为您的环境的正确值,或者在使用 OpenShift (RHOSO)部署中的 Red Hat OpenStack Services (RHOSO)部署中的示例之前删除它们。

将本示例中的 OpenStackDataPlaneNodeSet CR 的名称更新为反映集合中节点的名称。OpenStackDataPlaneNodeSet CR 名称必须是唯一的,仅包含小写字母数字字符和 - (hyphens)或 . (periods),以字母数字字符开头和结尾,且最大长度为 53 个字符。

注意

以下变量从 IPAM 和 DNS 自动生成,不是由用户提供的:

  • ctlplane_dns_nameservers
  • dns_search_domains
  • ctlplane_host_routes
apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneNodeSet
metadata:
  name: openstack-data-plane
  namespace: openstack
spec:
  env:
    - name: ANSIBLE_FORCE_COLOR
      value: "True"
  networkAttachments:
    - ctlplane
  preProvisioned: false
  baremetalSetTemplate:
    deploymentSSHSecret: dataplane-ansible-ssh-private-key-secret
    bmhNamespace: openstack
    cloudUserName: cloud-admin
    bmhLabelSelector:
      app: openstack
    ctlplaneInterface: enp1s0
  nodeTemplate:
    ansibleSSHPrivateKeySecret: dataplane-ansible-ssh-private-key-secret
    extraMounts:
      - extraVolType: Logs
        volumes:
        - name: ansible-logs
          persistentVolumeClaim:
            claimName: <pvc_name>
        mounts:
        - name: ansible-logs
          mountPath: "/runner/artifacts"
    managementNetwork: ctlplane
    ansible:
      ansibleUser: cloud-admin
      ansiblePort: 22
      ansibleVarsFrom:
        - secretRef:
            name: subscription-manager
        - secretRef:
            name: redhat-registry
      ansibleVars:
        rhc_release: 9.4
        rhc_repositories:
            - {name: "*", state: disabled}
            - {name: "rhel-9-for-x86_64-baseos-eus-rpms", state: enabled}
            - {name: "rhel-9-for-x86_64-appstream-eus-rpms", state: enabled}
            - {name: "rhel-9-for-x86_64-highavailability-eus-rpms", state: enabled}
            - {name: "fast-datapath-for-rhel-9-x86_64-rpms", state: enabled}
            - {name: "rhoso-18.0-for-rhel-9-x86_64-rpms", state: enabled}
            - {name: "rhceph-7-tools-for-rhel-9-x86_64-rpms", state: enabled}
        edpm_bootstrap_release_version_package: []
        edpm_network_config_os_net_config_mappings:
          edpm-compute-0:
            nic1: 52:54:04:60:55:22
          edpm-compute-1:
            nic1: 52:54:04:60:55:22
        neutron_physical_bridge_name: br-ex
        neutron_public_interface_name: eth0
        edpm_network_config_template: |
          ---
          {% set mtu_list = [ctlplane_mtu] %}
          {% for network in nodeset_networks %}
          {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
          {%- endfor %}
          {% set min_viable_mtu = mtu_list | max %}
          network_config:
          - type: ovs_bridge
            name: {{ neutron_physical_bridge_name }}
            mtu: {{ min_viable_mtu }}
            use_dhcp: false
            dns_servers: {{ ctlplane_dns_nameservers }}
            domain: {{ dns_search_domains }}
            addresses:
            - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
            routes: {{ ctlplane_host_routes }}
            members:
            - type: interface
              name: nic1
              mtu: {{ min_viable_mtu }}
              # force the MAC address of the bridge to this interface
              primary: true
          {% for network in nodeset_networks %}
            - type: vlan
              mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
              vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
              addresses:
              - ip_netmask:
                  {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
              routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
          {% endfor %}
  nodes:
    edpm-compute-0:
      hostName: edpm-compute-0
      networks:
      - name: ctlplane
        subnetName: subnet1
        defaultRoute: true
        fixedIP: 192.168.122.100
      - name: internalapi
        subnetName: subnet1
      - name: storage
        subnetName: subnet1
      - name: tenant
        subnetName: subnet1
      ansible:
        ansibleHost: 192.168.122.100
        ansibleUser: cloud-admin
        ansibleVars:
          fqdn_internal_api: edpm-compute-0.example.com
      bmhLabelSelector:
        nodeName: edpm-compute-0
    edpm-compute-1:
      hostName: edpm-compute-1
      networks:
      - name: ctlplane
        subnetName: subnet1
        defaultRoute: true
        fixedIP: 192.168.122.101
      - name: internalapi
        subnetName: subnet1
      - name: storage
        subnetName: subnet1
      - name: tenant
        subnetName: subnet1
      ansible:
        ansibleHost: 192.168.122.101
        ansibleUser: cloud-admin
        ansibleVars:
          fqdn_internal_api: edpm-compute-1.example.com
      bmhLabelSelector:
        nodeName: edpm-compute-1

5.4.5. 如何防止非对称路由

如果 Red Hat OpenShift Container Platform (RHOCP)集群节点在置备时具有 IP 地址与节点使用的 IP 地址相同的接口,则会导致非对称流量。因此,如果您使用 ctlplane 接口进行置备,且内核上配置了 rp_filter 来启用反向路径转发(RPF),则反向路径过滤逻辑会丢弃流量。实施以下任一方法,以防止因为 RPF 过滤器而丢弃流量:

  • 在 RHOCP 绑定调配服务(即 RHOCP 计算机网络或专用 RHOCP 调配网络)的网络上使用专用 NIC。
  • 在 RHOCP 主节点上通过路由访问网络上的专用 NIC。有关如何向 RHOCP 网络添加路由的信息,请参阅 OpenShift 部署上自定义 Red Hat OpenStack Services 中的 向 RHOCP 网络 添加路由
  • 使用共享 NIC 进行调配和 RHOSO ctlplane 接口。您可以使用以下方法之一配置共享 NIC:

    • 将您的网络配置为在路由器接口上配置两个 IP 地址范围来支持两个 IP 范围:一个在路由器接口上用于 ctlplane 网络,另一个用于置备地址范围。
    • 配置 DHCP 服务器,以分配与 ctlplane 地址范围不同的调配的地址范围。
    • 如果 DHCP 服务器不可用,请在 BareMetalHost CR 上配置 preprovisioningNetworkData 字段。有关如何配置 preprovisioningNetworkData 字段的详情,请参考在 BareMetalHost CR 上配置 preprovisioningNetworkData
  • 如果您的环境有 RHOCP master 和 worker 节点,它们没有连接到 EDPM 节点使用的网络,您可以在 OpenStackProvisionServer CR 中设置 nodeSelector 字段,将其放在没有 IP 地址的接口与置备时节点使用的相同 IP 子网中。

如果您使用 ctlplane 接口进行置备,且内核上配置了 rp_filter 来启用 Reverse Path Forwarding (RPF),则反向路径过滤逻辑会丢弃流量。要防止因为 RPF 过滤器而丢弃流量,您可以在 BareMetalHost CR 上配置 preprovisioningNetworkData 字段。

流程

  1. 为每个 BareMetalHost CR 创建一个带有 nmstate 格式的 preprovisioningNetworkDataSecret CR:

    apiVersion: v1
    kind: Secret
    metadata:
      name: leaf0-0-preprovision-network-data
      namespace: openstack
    stringData:
      nmstate: |
        interfaces:
          - name: enp5s0
            type: ethernet
            state: up
            ipv4:
              enabled: true
              address:
                - ip: 192.168.130.100
                  prefix-length: 24
        dns-resolver:
          config:
            server:
              - 192.168.122.1
        routes:
          config:
            - destination: 0.0.0.0/0
              next-hop-address: 192.168.130.1
              next-hop-interface: enp5s0
    type: Opaque
  2. 创建 Secret 资源:

    $ oc create -f secret_leaf0-0.yaml
  3. 打开 BareMetalHost CR 文件,如 bmh_nodes.yaml
  4. preprovisioningNetworkDataName 字段添加到 bmh_nodes.yaml 文件中的每个节点定义的每个 BareMetalHost CR 中:

    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      annotations:
        inspect.metal3.io: disabled
      labels:
        app: openstack
        nodeset: leaf0
      name: leaf0-0
      namespace: openstack
    spec:
      architecture: x86_64
      automatedCleaningMode: metadata
      bmc:
        address: redfish-virtualmedia+http://sushy.utility:8000/redfish/v1/Systems/df2bf92f-3e2c-47e1-b1fa-0d2e06bd1b1d
        credentialsName: bmc-secret
      bootMACAddress: 52:54:04:15:a8:d9
      bootMode: UEFI
      online: false
      preprovisioningNetworkDataName: leaf0-0-preprovision-network-data
      rootDeviceHints:
        deviceName: /dev/sda
  5. 更新 BareMetalHost CR:

    $ oc apply -f bmh_nodes.yaml
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部