16.2. 使用调优 CNI 启用 all-multicast 模式


您可以使用 tuning Container Network Interface (CNI) meta 插件启用 all-multicast 模式。

以下流程描述了如何配置调优 CNI 来启用 all-multicast 模式。

流程

  1. 使用以下内容创建网络附加定义,如 tuning-example.yaml

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name> 1
      namespace: default 2
    spec:
      config: '{
        "cniVersion": "0.4.0", 3
        "name": "<name>", 4
        "plugins": [{
           "type": "<main_CNI_plugin>" 5
          },
          {
           "type": "tuning", 6
           "allmulti": true 7
            }
          }
         ]
    }
    1
    指定要创建的额外网络附加的名称。名称在指定的命名空间中必须是唯一的。
    2
    指定与对象关联的命名空间。
    3
    指定 CNI 规格版本。
    4
    指定配置的名称。将配置名称与网络附加定义的 name 值匹配。
    5
    指定要配置的主 CNI 插件的名称。
    6
    指定 CNI meta 插件的名称。
    7
    更改接口的 all-multicast 模式。如果启用,接口将接收网络上的所有多播数据包。

    下面显示了一个 YAML 文件示例:

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: setallmulti
      namespace: default
    spec:
      config: '{
        "cniVersion": "0.4.0",
        "name": "setallmulti",
        "plugins": [
          {
            "type": "bridge"
          },
          {
            "type": "tuning",
            "allmulti": true
          }
        ]
      }'
  2. 运行以下命令应用 YAML 文件中指定的设置:

    $ oc apply -f tuning-allmulti.yaml

    输出示例

    networkattachmentdefinition.k8s.cni.cncf.io/setallmulti created

  3. 使用类似以下 examplepod.yaml文件中指定的网络附加定义创建 pod :

    apiVersion: v1
    kind: Pod
    metadata:
      name: allmultipod
      namespace: default
      annotations:
        k8s.v1.cni.cncf.io/networks: setallmulti 1
    spec:
      containers:
      - name: podexample
        image: centos
        command: ["/bin/bash", "-c", "sleep INF"]
        securityContext:
          runAsUser: 2000 2
          runAsGroup: 3000 3
          allowPrivilegeEscalation: false 4
          capabilities: 5
            drop: ["ALL"]
      securityContext:
        runAsNonRoot: true 6
        seccompProfile: 7
          type: RuntimeDefault
    1
    指定配置的 NetworkAttachmentDefinition 的名称。
    2
    指定运行容器的用户 ID。
    3
    指定容器使用哪个主要组 ID。
    4
    指定 pod 是否可以请求特权升级。如果未指定,则默认为 true。这个布尔值直接控制在容器进程中是否设置了 no_new_privs 标志。
    5
    指定容器功能。drop: ["ALL"] 语句表示所有 Linux 功能都会从 pod 中丢弃,提供更严格的安全配置集。
    6
    指定容器将使用任何 UID 为 0 的用户运行。
    7
    指定容器的 seccomp 配置集。在这种情况下,type 被设置为 RuntimeDefault。seccomp 是一个 Linux 内核功能,它限制了进程可用的系统调用,通过最小化攻击面来提高安全性。
  4. 运行以下命令应用 YAML 文件中指定的设置:

    $ oc apply -f examplepod.yaml
  5. 运行以下命令验证 pod 是否已创建:

    $ oc get pod

    输出示例

    NAME          READY   STATUS    RESTARTS   AGE
    allmultipod   1/1     Running   0          23s

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

    $ oc rsh allmultipod
  7. 运行以下命令,列出与 pod 关联的所有接口:

    sh-4.4# ip link

    输出示例

    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

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.