3.6. 为集群启用 OVS balance-slb 模式


您可以启用 Open vSwitch (OVS) balance-slb 模式,以便两个或多个物理接口共享其网络流量。balance-slb 模式接口可以为运行虚拟化工作负载的集群提供源负载均衡(SLB)功能,而无需与网络交换机协商。

目前,源负载均衡在绑定接口上运行,该接口连接到辅助网桥,如 br-phy。源负载均衡仅在不同的 Media Access Control (MAC)地址和虚拟局域网(VLAN)组合之间平衡。请注意,所有 OVN-Kubernetes pod 流量都使用相同的 MAC 地址和 VLAN,因此此流量无法在多个物理接口负载平衡。

下图显示了简单集群基础架构布局上的 balance-slb 模式。虚拟机(VM)连接到特定的 localnet NetworkAttachmentDefinition (NAD)自定义资源定义(CRD)、NAD 0NAD 1。每个 NAD 均为虚拟机提供对底层物理网络的访问,支持 VLAN 标记或未标记的流量。br-ex OVS 网桥从虚拟机接收流量,并将流量传递到下一个 OVS 网桥 br-phybr-phy 网桥作为 SLB 绑定的控制器。SLB 绑定通过物理接口链接(如 eno0eno1)平衡来自不同虚拟机端口的流量。此外,来自一个物理接口的入口流量可以通过一组 OVS 网桥来访问虚拟机。

图 3.1. OVS balance-slb 模式在带有两个 NAD CRD 的 localnet 上运行

您可以使用 OVS 绑定将 balance-slb 模式接口集成到主或二级网络类型中。注意关于 OVS 绑定的以下点:

  • 支持 OVN-Kubernetes CNI 插件,并轻松与插件集成。
  • 原生支持 balance-slb 模式。

先决条件

  • 将多个物理接口附加到主网络,并在 MachineConfig 文件中定义接口。
  • 您创建了清单对象,并在对象配置文件中定义了自定义 br-ex 网桥。
  • 您附加了多个物理接口,并在 NAD CRD 文件中定义接口。

流程

  1. 对于集群中的每个裸机主机,在 install-config.yaml 文件中为集群定义一个 networkConfig 部分,如下例所示:

    apiVersion: v1
    kind: InstallConfig
    metadata:
      name: <cluster-name>
    # ...
    networkConfig:
      interfaces:
        - name: enp1s0 
    1
    
          type: ethernet
          state: up
          ipv4:
            dhcp: true
            enabled: true
          ipv6:
            enabled: false
        - name: enp2s0 
    2
    
          type: ethernet
          state: up
          mtu: 1500 
    3
    
          ipv4:
            dhcp: true
            enabled: true
          ipv6:
            dhcp: true
            enabled: true
        - name: enp3s0 
    4
    
          type: ethernet
          state: up
          mtu: 1500
          ipv4:
            enabled: false
          ipv6:
            enabled: false
    # ...
    Copy to Clipboard Toggle word wrap
    1
    置备的网络接口控制器(NIC)的接口。
    2
    在绑定接口的 Ignition 配置文件中拉取的第一个绑定接口。
    3
    在绑定端口上手动设置 br-ex 最大传输单元(MTU)。
    4
    第二个绑定接口是在集群安装过程中拉取 ignition 的最小配置的一部分。
  2. 在 NMState 配置文件中定义每个网络接口:

    定义许多网络接口的 NMState 配置文件示例

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
    # ...
    ovn:
      bridge-mappings:
        - localnet: localnet-network
          bridge: br-ex
          state: present
    interfaces:
      - name: br-ex
        type: ovs-bridge
        state: up
        bridge:
          allow-extra-patch-ports: true
          port:
            - name: br-ex
            - name: patch-ex-to-phy
        ovs-db:
          external_ids:
            bridge-uplink: "patch-ex-to-phy"
      - name: br-ex
        type: ovs-interface
        state: up
        mtu: 1500 
    1
    
        ipv4:
          enabled: true
          dhcp: true
          auto-route-metric: 48
        ipv6:
          enabled: false
          dhcp: false
          auto-route-metric: 48
      - name: br-phy
        type: ovs-bridge
        state: up
        bridge:
          allow-extra-patch-ports: true
          port:
            - name: patch-phy-to-ex
            - name: ovs-bond
              link-aggregation:
                mode: balance-slb
                port:
                  - name: enp2s0
                  - name: enp3s0
      - name: patch-ex-to-phy
        type: ovs-interface
        state: up
        patch:
          peer: patch-phy-to-ex
      - name: patch-phy-to-ex
        type: ovs-interface
        state: up
        patch:
          peer: patch-ex-to-phy
      - name: enp1s0
        type: ethernet
        state: up
        ipv4:
          dhcp: true
          enabled: true
        ipv6:
          enabled: false
      - name: enp2s0
        type: ethernet
        state: up
        mtu: 1500
        ipv4:
          enabled: false
        ipv6:
          enabled: false
      - name: enp3s0
        type: ethernet
        state: up
        mtu: 1500
        ipv4:
          enabled: false
        ipv6:
          enabled: false
    # ...
    Copy to Clipboard Toggle word wrap

    1
    在绑定端口上手动设置 br-ex MTU。
  3. 使用 base64 命令对 NMState 配置文件的接口内容进行编码:

    $ base64 -w0  <nmstate_configuration>.yml 
    1
    Copy to Clipboard Toggle word wrap
    1
    其中 -w0 选项可防止在 base64 编码操作中换行。
  4. master 角色和 worker 角色创建 MachineConfig 清单文件。确保将之前命令中的 base64 编码的字符串嵌入到每个 MachineConfig 清单文件中。以下示例清单文件为集群中存在的所有节点配置 master 角色。您还可以为特定于节点的 masterworker 角色创建清单文件。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 10-br-ex-master 
    1
    
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,<base64_encoded_nmstate_configuration> 
    2
    
            mode: 0644
            overwrite: true
            path: /etc/nmstate/openshift/cluster.yml 
    3
    Copy to Clipboard Toggle word wrap
    1
    策略的名称。
    2
    将编码的 base64 信息写入指定路径。
    3
    指定 cluster.yml 文件的路径。对于集群中的每个节点,您可以指定节点的短主机名路径,如 <node_short_hostname>.yml。
  5. 将每个 MachineConfig 清单文件保存到 ./& lt;installation_directory>/manifests 目录,其中 &lt ;installation_directory > 是安装程序在其中创建文件的目录。

    Machine Config Operator (MCO)从每个清单文件中获取内容,并在滚动更新期间持续将内容应用到所有所选节点。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat