6.4. 关于 all-multicast 模式


启用 all-multicast 模式(特别是在无根应用程序上下文中)非常重要。如果没有启用此模式,则需要为 Pod 的安全上下文约束(SCC )授予 NET_ADMIN 功能。如果您要允许 NET_ADMIN 功能授予 pod 权限,以便更改超出其特定要求的更改,您可能会暴露安全漏洞。

tuning CNI 插件支持更改几个接口属性,包括 all-multicast 模式。通过启用此模式,您可以在 SR-IOV 网络设备上配置的虚拟功能 (VF) 上运行的应用程序从其他 VF 上的应用程序接收多播流量,无论是附加到同一还是不同的物理功能。

6.4.1. 在 SR-IOV 网络中启用 all-multicast 模式

您可以通过以下方法在 SR-IOV 接口中启用 all-multicast 模式:

  • SriovNetwork 资源的 metaPlugins 参数中添加调优配置
  • 在调优配置中将 allmulti 字段设置为 true

    注意

    确保创建启用了信任的虚拟功能 (VF)。

SR-IOV Network Operator 管理额外网络定义。当您指定要创建的额外 SR-IOV 网络时,SR-IOV Network Operator 会自动创建 NetworkAttachmentDefinition 自定义资源(CR)。

注意

不要编辑 SR-IOV Network Operator 所管理的 NetworkAttachmentDefinition 自定义资源。这样做可能会破坏额外网络上的网络流量。

按照本指南,在 SR-IOV 网络中启用 all-multicast 模式。

先决条件

  • 已安装 OpenShift Container Platform CLI (oc)。
  • 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform 集群。
  • 已安装 SR-IOV Network Operator。
  • 您已配置了适当的 SriovNetworkNodePolicy 对象。

流程

  1. 使用以下设置创建一个 YAML 文件,为 Mellanox ConnectX-5 设备定义 SriovNetworkNodePolicy 对象。将 YAML 文件保存为 sriovnetpolicy-mlx.yaml

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: sriovnetpolicy-mlx
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: netdevice
      nicSelector:
        deviceID: "1017"
        pfNames:
          - ens8f0np0#0-9
        rootDevices:
          - 0000:d8:00.0
        vendor: "15b3"
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: "true"
      numVfs: 10
      priority: 99
      resourceName: resourcemlx
    Copy to Clipboard Toggle word wrap
  2. 可选:如果支持 SR-IOV 的集群节点还没有标记,请添加 SriovNetworkNodePolicy.Spec.NodeSelector 标签。有关标记节点的更多信息,请参阅"了解如何更新节点上的标签"。
  3. 运行以下命令来创建 SriovNetworkNodePolicy 对象:

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

    应用配置更新后,sriov-network-operator 命名空间中的所有 pod 会自动进入 Running 状态。

  4. 运行以下命令来创建 enable-allmulti-test 命名空间:

    $ oc create namespace enable-allmulti-test
    Copy to Clipboard Toggle word wrap
  5. 为额外 SR-IOV 网络附加创建 SriovNetwork 自定义资源 (CR) 并插入 metaPlugins 配置,如下例所示,并将该文件保存为 sriov-enable-all-multicast.yaml

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: enableallmulti 
    1
    
      namespace: openshift-sriov-network-operator 
    2
    
    spec:
      resourceName: enableallmulti 
    3
    
      networkNamespace: enable-allmulti-test 
    4
    
      ipam: '{ "type": "static" }' 
    5
    
      capabilities: '{ "mac": true, "ips": true }' 
    6
    
      trust: "on" 
    7
    
      metaPlugins : | 
    8
    
        {
          "type": "tuning",
          "capabilities":{
            "mac":true
          },
          "allmulti": true
          }
        }
    Copy to Clipboard Toggle word wrap
    1
    指定对象的名称。SR-IOV Network Operator 创建一个名称相同的 NetworkAttachmentDefinition 对象。
    2
    指定 SR-IOV Network Operator 安装到的命名空间。
    3
    指定来自用于为这个额外网络定义 SR-IOV 硬件的 SriovNetworkNodePolicy 对象的 spec.resourceName 参数的值。
    4
    SriovNetwork 对象指定目标命名空间。只有目标命名空间中的 pod 可以附加到额外网络。
    5
    为 IPAM CNI 插件指定一个配置对象作为 YAML 块 scalar。该插件管理附加定义的 IP 地址分配。
    6
    可选:为额外网络设置功能。您可以指定 "{ "ips": true }" 来启用 IP 地址支持,或指定 "{ "mac": true }" 来启用 MAC 地址支持。
    7
    指定虚拟功能的信任模式。这必须设置为 "on"。
    8
    使用 metaPlugins 参数为设备添加更多功能。在此用例中,将 type 字段设置为 tuning,并添加 allmulti 字段,并将它设为 true
  6. 运行以下命令来创建 SriovNetwork 资源:

    $ oc create -f sriov-enable-all-multicast.yaml
    Copy to Clipboard Toggle word wrap

验证 NetworkAttachmentDefinition CR

  • 运行以下命令,确认 SR-IOV Network Operator 创建了 NetworkAttachmentDefinition CR:

    $ oc get network-attachment-definitions -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <namespace> 替换为您在 SriovNetwork 对象中指定的 networkNamespace 的值。在本例中,是 enable-allmulti-test。预期输出显示 NAD CR 的名称和创建年龄(以分钟为单位)。
    注意

    SR-IOV Network Operator 创建 CR 之前可能会有延迟。

  • 运行以下命令,显示 SR-IOV 网络资源的信息:

    $ oc get sriovnetwork -n openshift-sriov-network-operator
    Copy to Clipboard Toggle word wrap

验证额外的 SR-IOV 网络附加

要验证 tuning CNI 是否已正确配置并附加了额外的 SR-IOV 网络附加,请按照以下步骤执行:

  1. 创建 Pod CR。将以下 YAML 示例保存到名为 examplepod.yaml 的文件中:

    apiVersion: v1
    kind: Pod
    metadata:
      name: samplepod
      namespace: enable-allmulti-test
      annotations:
        k8s.v1.cni.cncf.io/networks: |-
          [
            {
              "name": "enableallmulti",  
    1
    
              "mac": "0a:56:0a:83:04:0c", 
    2
    
              "ips": ["10.100.100.200/24"] 
    3
    
           }
          ]
    spec:
      containers:
      - name: podexample
        image: centos
        command: ["/bin/bash", "-c", "sleep INF"]
        securityContext:
          runAsUser: 2000
          runAsGroup: 3000
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
    Copy to Clipboard Toggle word wrap
    1
    指定 SR-IOV 网络附加定义 CR 的名称。
    2
    可选:指定从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 MAC 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 {"mac": true}
    3
    可选:指定从 SR-IOV 网络附加定义 CR 中定义的资源类型分配的 SR-IOV 设备的 IP 地址。支持 IPv4 和 IPv6 IP 地址。要使用这个功能,还必须在 SriovNetwork 对象中指定 { "ips": true }
  2. 运行以下命令来创建 Pod CR:

    $ oc apply -f examplepod.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令验证 pod 是否已创建:

    $ oc get pod -n enable-allmulti-test
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME       READY   STATUS    RESTARTS   AGE
    samplepod  1/1     Running   0          47s
    Copy to Clipboard Toggle word wrap

  4. 运行以下命令登录到 pod:

    $ oc rsh -n enable-allmulti-test samplepod
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令,列出与 pod 关联的所有接口:

    sh-4.4# ip link
    Copy to Clipboard Toggle word wrap

    输出示例

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8901 qdisc noqueue state UP mode DEFAULT group default
        link/ether 0a:58:0a:83:00:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0 
    1
    
    3: net1@if24: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
        link/ether ee:9b:66:a4:ec:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0 
    2
    Copy to Clipboard Toggle word wrap

    1
    eth0@if22 是主接口
    2
    net1@if24 是配置了 network-attachment-definition 的二级接口,它支持 all-multicast 模式(ALLMULTI 标志)
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat