网络功能运营商

本页面介绍了 Google Distributed Cloud Connected 随附的专用网络功能 Kubernetes 运算符。此运算符实现了一组 CustomResourceDefinitions (CRD),可让 Distributed Cloud 连接的集群执行高性能工作负载。

分布式云连接服务器不支持网络功能运营商和 SR-IOV 功能。

借助网络功能运算符,您可以执行以下操作:

  • 轮询节点上的现有网络设备。
  • 查询节点上每个网络设备的 IP 地址和物理链路状态。
  • 在节点上预配其他网络接口。
  • 在节点的物理机上配置支持高性能工作负载所需的低级系统功能。
  • 在 PCI Express 网络接口上使用单根输入/输出虚拟化 (SR-IOV),将其虚拟化为多个虚拟接口。然后,您可以配置 Distributed Cloud 连接的工作负载,以使用这些虚拟网络接口。

Distributed Cloud Connected 对 SR-IOV 的支持基于以下开源项目:

前提条件

网络功能运营商从 Distributed Cloud Edge Network API 获取网络配置。 如需允许此操作,您必须使用以下命令向网络功能运营商服务账号授予 Edge Network Viewer 角色 (roles/edgenetwork.viewer):

gcloud projects add-iam-policy-binding ZONE_PROJECT_ID \
  --role roles/edgenetwork.viewer \
  --member "serviceAccount:CLUSTER_PROJECT_ID.svc.id.goog[nf-operator/nf-angautomator-sa]"

替换以下内容:

  • ZONE_PROJECT_ID 替换为包含 Distributed Cloud Edge Network API 资源的 Google Cloud 项目的 ID。
  • CLUSTER_PROJECT_ID 替换为包含目标 Distributed Cloud Connected Cluster 的 Google Cloud 项目的 ID。

网络功能运营商资源

分布式云互联网络功能运算符实现了以下 Kubernetes CRD:

  • Network。定义 Pod 可用于与内部和外部资源通信的虚拟网络。您必须先使用 Distributed Cloud Edge Network API 创建相应的 VLAN,然后才能在此资源中指定该 VLAN。如需了解相关说明,请参阅创建网络
  • NetworkInterfaceState。支持发现网络接口状态,以及查询网络接口的链路状态和 IP 地址。
  • NodeSystemConfigUpdate。可用于配置内核选项和 Kubelet 标志等低层级系统功能。
  • SriovNetworkNodePolicy. 选择一组 SR-IOV 虚拟化网络接口,并将该组实例化为 Kubernetes 资源。您可以在 NetworkAttachmentDefinition 资源中使用此资源。
  • SriovNetworkNodeState。用于查询 Distributed Cloud 节点上 SriovNetworkNodePolicy 资源的配置状态。
  • NetworkAttachmentDefinition。可让您将 Distributed Cloud pod 连接到 Distributed Cloud connected 节点上的一个或多个逻辑或物理网络。您必须先使用 Distributed Cloud Edge Network API 创建相应的 VLAN,然后才能在此资源中指定该 VLAN。如需了解相关说明,请参阅创建网络

网络功能运算符还允许您定义不使用 SR-IOV 虚拟功能的辅助网络接口。

Network 项资源

Network 资源定义了分布式云连接机架内的虚拟网络,分布式云连接集群中的 Pod 可以使用该虚拟网络与内部和外部资源进行通信。

Network 资源为作为可写字段公开的网络接口提供以下可配置的参数:

  • spec.type:指定相应网络的网络传输层。唯一的有效值为 L2。您还必须指定 nodeInterfaceMatcher.interfaceName 值。
  • spec.nodeInterfaceMatcher.interfaceName:目标 Distributed Cloud connected 节点上要与此网络配合使用的物理网络接口的名称。
  • spec.gateway4:相应网络的网络网关的 IP 地址。
  • spec.l2NetworkConfig.prefixLength4:指定相应网络的 CIDR 范围。
  • annotations.networking.gke.io/gdce-vlan-id:指定相应网络的 VLAN ID。
  • annotations.networking.gke.io/gdce-vlan-mtu:(可选)指定相应网络的 MTU 值。如果省略,则从父接口继承 MTU 值。
  • annotations.networking.gke.io/gdce-lb-service-vip-cidr:指定负载均衡服务的虚拟 IP 地址范围。该值可以是 CIDR 块或明确的地址范围值。对于第 3 层负载均衡,此注解是必需的;对于第 2 层负载均衡,此注解是可选的。

以下示例展示了资源的结构:

apiVersion: networking.gke.io/v1
kind: Network
metadata:
  name: vlan200-network
  annotations:
    networking.gke.io/gdce-vlan-id: 200
    networking.gke.io/gdce-vlan-mtu: 1500
    networking.gke.io/gdce-lb-service-vip-cidrs: "10.1.1.0/24"
spec:
  type: L2
  nodeInterfaceMatcher:
    interfaceName: gdcenet0.200
  gateway4: 10.53.0.1

如需为负载均衡服务指定多个虚拟 IP 地址范围,请使用 networking.gke.io/gdce-lb-service-vip-cidrs 注解。您可以提供此注解的值,可以是英文逗号分隔的列表,也可以是 JSON 载荷。例如:

[
  {
    "name": "test-oam-3",
    "addresses": ["10.235.128.133-10.235.128.133"],
    "autoAssign": false
  }
  ,
  {
    "name": "test-oam-4",
    "addresses": ["10.235.128.134-10.235.128.134"],
    "autoAssign": false
  },
  {
    "name": "test-oam-5",
    "addresses": ["10.235.128.135-10.235.128.135"],
    "autoAssign": false
  }
]

如果您选择使用 JSON 载荷,建议您使用精简的 JSON 格式。例如:

apiVersion: networking.gke.io/v1
  kind: Network
  metadata:
    annotations:
      networking.gke.io/gdce-lb-service-vip-cidrs: '[{"name":"test-oam-3","addresses":["10.235.128.133-10.235.128.133"],"autoAssign":false},{"name":"test-oam-4","addresses":["10.235.128.134-10.235.128.134"],"autoAssign":false},{"name":"test-oam-5","addresses":["10.235.128.135-10.235.128.135"],"autoAssign":false}]'
      networking.gke.io/gdce-vlan-id: "81"
    name: test-network-vlan81
  spec:
    IPAMMode: Internal
    dnsConfig:
      nameservers:
      - 8.8.8.8
    gateway4: 192.168.81.1
    l2NetworkConfig:
      prefixLength4: 24
    nodeInterfaceMatcher:
      interfaceName: gdcenet0.81
    type: L2

请注意,如果省略 autoAssign 字段,则该字段默认为 false

NetworkInterfaceState 项资源

NetworkInterfaceState 资源是一种只读资源,可让您发现节点上的物理网络接口,并收集流经这些接口的网络流量的运行时统计信息。Distributed Cloud 会为集群中的每个节点创建一个 NetworkInterfaceState 资源。

Distributed Cloud 已连接机器的默认配置包括 Rack Select Network Daughter Card (rNDC) 上名为 gdcenet0 的绑定网络接口。此接口会绑定 eno1np0eno2np1 网络接口。每个连接分别连接到一个分布式云 ToR 交换机。

NetworkInterfaceState 资源提供以下类别的网络接口信息,这些信息以只读状态字段的形式公开。

一般信息:

  • status.interfaces.ifname:目标网络接口的名称。
  • status.lastReportTime:目标接口的上次状态报告的时间和日期。

IP 地址配置信息:

  • status.interfaces.interfaceinfo.address:分配给目标接口的 IP 地址。
  • status.interfaces.interfaceinfo.dns:分配给目标接口的 DNS 服务器的 IP 地址。
  • status.interfaces.interfaceinfo.gateway:为目标接口提供服务的网络网关的 IP 地址。
  • status.interfaces.interfaceinfo.prefixlen:IP 前缀的长度。

硬件信息:

  • status.interfaces.linkinfo.broadcast:目标接口的广播 MAC 地址。
  • status.interfaces.linkinfo.businfo:采用 bus:slot.function 格式的 PCIe 设备路径。
  • status.interfaces.linkinfo.flags:接口标志,例如 BROADCAST
  • status.interfaces.linkinfo.macAddress:目标接口的单播 MAC 地址。
  • status.interfaces.linkinfo.mtu:目标接口的 MTU 值。

接收统计信息:

  • status.interfaces.statistics.rx.bytes:目标接口接收的总字节数。
  • status.interfaces.statistics.rx.dropped:目标接口丢弃的数据包总数。
  • status.interfaces.statistics.rx.errors:目标接口的总数据包接收错误数。
  • status.interfaces.statistics.rx.multicast:目标接口收到的多播数据包总数。
  • status.interfaces.statistics.rx.overErrors:目标接口的总数据包接收量与错误数之比。
  • status.interfaces.statistics.rx.packets:目标接口接收的数据包总数。

传播统计信息:

  • status.interfaces.statistics.tx.bytes:目标接口传输的总字节数。
  • status.interfaces.statistics.tx.carrierErrors:目标接口遇到的载波错误总数。
  • status.interfaces.statistics.tx.collisions:目标接口遇到的数据包冲突总数。
  • status.interfaces.statistics.tx.dropped:目标接口丢弃的数据包总数。
  • status.interfaces.statistics.tx.errors:目标接口的总传输错误数。
  • status.interfaces.statistics.tx.packets:目标接口传输的数据包总数。

以下示例展示了资源的结构:

apiVersion: networking.gke.io/v1
kind: NetworkInterfaceState
metadata:
  name: MyNode1
nodeName: MyNode1
status:
  interfaces:
  - ifname: eno1np0
    linkinfo:
      businfo: 0000:1a:00.0
      flags: up|broadcast|multicast
      macAddress: ba:16:03:9e:9c:87
      mtu: 9000
    statistics:
      rx:
        bytes: 1098522811
        errors: 2
        multicast: 190926
        packets: 4988200
      tx:
        bytes: 62157709961
        packets: 169847139
  - ifname: eno2np1
    linkinfo:
      businfo: 0000:1a:00.1
      flags: up|broadcast|multicast
      macAddress: ba:16:03:9e:9c:87
      mtu: 9000
    statistics:
      rx:
        bytes: 33061895405
        multicast: 110203
        packets: 110447356
      tx:
        bytes: 2370516278
        packets: 11324730
  - ifname: enp95s0f0np0
    interfaceinfo:
    - address: fe80::63f:72ff:fec4:2bf4
      prefixlen: 64
    linkinfo:
      businfo: 0000:5f:00.0
      flags: up|broadcast|multicast
      macAddress: 04:3f:72:c4:2b:f4
      mtu: 9000
    statistics:
      rx:
        bytes: 37858381
        multicast: 205645
        packets: 205645
      tx:
        bytes: 1207334
        packets: 6542
  - ifname: enp95s0f1np1
    interfaceinfo:
    - address: fe80::63f:72ff:fec4:2bf5
      prefixlen: 64
    linkinfo:
      businfo: 0000:5f:00.1
      flags: up|broadcast|multicast
      macAddress: 04:3f:72:c4:2b:f5
      mtu: 9000
    statistics:
      rx:
        bytes: 37852406
        multicast: 205607
        packets: 205607
      tx:
        bytes: 1207872
        packets: 6545
  - ifname: enp134s0f0np0
    interfaceinfo:
    - address: fe80::63f:72ff:fec4:2b6c
      prefixlen: 64
    linkinfo:
      businfo: 0000:86:00.0
      flags: up|broadcast|multicast
      macAddress: 04:3f:72:c4:2b:6c
      mtu: 9000
    statistics:
      rx:
        bytes: 37988773
        multicast: 205584
        packets: 205584
      tx:
        bytes: 1212385
        packets: 6546
  - ifname: enp134s0f1np1
    interfaceinfo:
    - address: fe80::63f:72ff:fec4:2b6d
      prefixlen: 64
    linkinfo:
      businfo: 0000:86:00.1
      flags: up|broadcast|multicast
      macAddress: 04:3f:72:c4:2b:6d
      mtu: 9000
    statistics:
      rx:
        bytes: 37980702
        multicast: 205548
        packets: 205548
      tx:
        bytes: 1212297
        packets: 6548
  - ifname: gdcenet0
    interfaceinfo:
    - address: 208.117.254.36
      prefixlen: 28
    - address: fe80::b816:3ff:fe9e:9c87
      prefixlen: 64
    linkinfo:
      flags: up|broadcast|multicast
      macAddress: ba:16:03:9e:9c:87
      mtu: 9000
    statistics:
      rx:
        bytes: 34160422968
        errors: 2
        multicast: 301129
        packets: 115435591
      tx:
        bytes: 64528301111
        packets: 181171964
     .. <remaining interfaces omitted>
   lastReportTime: "2022-03-30T07:35:44Z"

NodeSystemConfigUpdate 项资源

借助 NodeSystemConfigUpdate 资源,您可以更改节点的操作系统配置,还可以修改 Kubelet 标志。除 sysctl 更改之外的更改需要重启节点。

实例化此资源时,您必须在 nodeSelector 字段中指定目标节点。您必须在 nodeSelector 字段中包含每个目标节点的所有键值对。如果您在此字段中指定多个目标节点,系统会一次更新一个目标节点。

注意:nodeName 字段已弃用。使用此命令会立即重新启动目标节点(包括本地控制平面节点),这可能会导致关键工作负载停止。

NodeSystemConfigUpdate 资源提供以下特定于 Distributed Cloud Connected 的配置字段:

  • spec.containerRuntimeDNSConfig.ip:指定私有映像注册表的 IP 地址列表。
  • spec.containerRuntimeDNSConfig:指定由每个连接的分布式云节点上的容器运行时环境使用的一系列自定义 DNS 条目。每个条目都包含以下字段:

    • ip:指定目标 IPv4 地址,
    • domain:指定相应网域,
    • interface:指定网络出站流量接口,通过该接口可以访问 ip 字段中指定的 IP 地址。 您可以通过以下资源指定接口:CustomNetworkInterfaceConfigNetwork(通过注解)、NetworkAttachmentDefinition(通过注解)。这是一项预览版功能。
  • spec.kubeletConfig.cpuManagerPolicy:指定 Kubernetes CPUManager 政策。有效值为 NoneStatic

  • spec.kubeletConfig.topologyManagerPolicy:指定 Kubernetes TopologyManager 政策。有效值包括 NoneBestEffortRestrictedSingleNumaMode

  • spec.osConfig.hugePagesConfig:指定每个 NUMA 节点的巨型页配置。有效值为 2MB1GB。所请求的大内存页数量在系统中的两个 NUMA 节点之间均匀分布。例如,如果您分配 16 个 1 GB 大小的大内存页,则每个节点都会预分配 8 GB 的内存。

  • spec.osConfig.isolatedCpusPerSocket:指定每个插槽的隔离 CPU 数量。如果 cpuManagerPolicy 设置为 Static,则此字段为必填字段。隔离 CPU 的最大数量必须小于节点中总 CPU 数量的 80%。

  • spec.osConfig.cpuIsolationPolicy:指定 CPU 隔离政策。Default 政策仅将 systemd 任务与为工作负载预留的 CPU 隔离开来。Kernel 政策将 CPU 标记为 isolcpus,并在每个 CPU 上设置 rcu_nocbnohz_fullrcu_nocb_poll 标志。

  • spec.sysctls.NodeLevel:指定了您可以使用网络功能运算符在节点上全局配置的 sysctls 参数。可配置的参数如下:

    • fs.inotify.max_user_instances
    • fs.inotify.max_user_watches
    • kernel.sched_rt_runtime_us
    • kernel.core_pattern
    • net.ipv4.tcp_wmem
    • net.ipv4.tcp_rmem
    • net.ipv4.tcp_slow_start_after_idle
    • net.ipv4.udp_rmem_min
    • net.ipv4.udp_wmem_min
    • net.ipv4.tcp_rmem
    • net.ipv4.tcp_wmem
    • net.core.rmem_max
    • net.core.wmem_max
    • net.core.rmem_default
    • net.core.wmem_default
    • net.netfilter.nf_conntrack_tcp_timeout_unacknowledged
    • net.netfilter.nf_conntrack_tcp_timeout_max_retrans
    • net.sctp.auth_enable
    • net.sctp.sctp_mem
    • net.ipv4.udp_mem
    • net.ipv4.tcp_mem
    • net.ipv4.tcp_slow_start_after_idle
    • net.sctp.auth_enable
    • vm.max_map_count

    您还可以使用 tuning 容器网络接口 (CNI) 插件将安全和不安全的 sysctls 参数限定到特定 pod 或命名空间。

NodeSystemConfigUpdate 资源提供以下只读的一般状态字段:

  • status.lastReportTime:目标接口最近一次报告状态的时间。
  • status.conditions.lastTransitionTime:接口状况最近一次发生变化的时间。
  • status.conditions.observedGeneration:表示初始条件所依据的 .metadata.generation 值。
  • status.conditions.message:描述接口状况变化的参考消息。
  • status.conditions.reason:一个程序化标识符,表示接口上次更改状态的原因。
  • status.conditions.status:相应情况的状态描述符。有效值为 TrueFalseUnknown
  • status.conditions.type:采用驼峰命名法的条件类型。

以下示例展示了资源的结构:

apiVersion: networking.gke.io/v1
kind: NodeSystemConfigUpdate
metadata:
  name: node-pool-1-config
  namespace: default
spec:
  nodeSelector:
    baremetal.cluster.gke.io/node-pool: node-pool-1
    networking.gke.io/worker-network-sriov.capable: true
  sysctls:
    nodeLevel:
      "net.ipv4.udp_mem" : "12348035 16464042 24696060"
  kubeletConfig:
    topologyManagerPolicy: BestEffort
    cpuManagerPolicy: Static
  osConfig:
    hugePagesConfig:
      "TWO_MB": 0
      "ONE_GB": 16
    isolatedCpusPerSocket:
      "0": 10
      "1": 10

SriovNetworkNodePolicy 项资源

借助 SriovNetworkNodePolicy 资源,您可以在连接到分布式云的物理机上分配一组 SR-IOV 虚拟函数 (VF),并将该组实例化为 Kubernetes 资源。然后,您可以在 NetworkAttachmentDefinition 资源中使用此资源。

您可以按 PCIe 供应商和设备 ID、PCIe 设备地址或 Linux 枚举设备名称来选择每个目标 VF。SR-IOV 网络运算符会配置每个物理网络接口,以预配目标 VF。这包括更新网络接口固件、配置 Linux 内核驱动程序,以及在必要时重启 Distributed Cloud 连接的机器。

如需发现节点上可用的网络接口,您可以查找 nf-operator 命名空间中该节点上的 NetworkInterfaceState 资源

以下示例展示了资源的结构:

apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: mlnx6-p2-sriov-en2
  namespace: sriov-network-operator
spec:
  deviceType: netdevice
  isRdma: true
  mtu: 9000
  nicSelector:
    pfNames:
    - enp134s0f1np1
  nodeSelector:
    edgecontainer.googleapis.com/network-sriov.capable: "true"
  numVfs: 31
  priority: 99
  resourceName: mlnx6_p2_sriov_en2

上例从名为 enp134s0f1np1 的网络接口上的第二个端口创建最多 31 个 VF,MTU 值为 9000(允许的最大值)。使用节点选择器标签 edgecontainer.googleapis.com/network-sriov.capable,该标签存在于所有支持 SR-IOV 的 Distributed Cloud 连接节点上。

如需了解如何使用此资源,请参阅 SriovNetworkNodeState

SriovNetworkNodeState 项资源

通过 SriovNetworkNodeState 只读资源,您可以查询分布式云连接节点上 SriovNetworkNodePolicy 资源的配置状态。它会返回节点上 SriovNetworkNodePolicy 资源的完整配置,以及节点上活跃 VF 的列表。status.syncStatus 字段用于指示为节点定义的所有 SriovNetworkNodePolicy 资源是否已正确应用。

以下示例展示了资源的结构:

apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodeState
metadata:
  name: MyNode1
  namespace: sriov-network-operator
spec:
  dpConfigVersion: "1969684"
  interfaces:
  - mtu: 9000
    name: enp134s0f1np1
    numVfs: 31
    pciAddress: 0000:86:00.1
    vfGroups:
    - deviceType: netdevice
      mtu: 9000
      policyName: mlnx6-p2-sriov-en2
      resourceName: mlnx6_p2_sriov_en2
      vfRange: 0-30
status:

Status:
  Interfaces:
    Device ID:    1015
    Driver:       mlx5_core
    Link Speed:   25000 Mb/s
    Link Type:    ETH
    Mac:          ba:16:03:9e:9c:87
    Mtu:          9000
    Name:         eno1np0
    Pci Address:  0000:1a:00.0
    Vendor:       15b3
    Device ID:    1015
    Driver:       mlx5_core
    Link Speed:   25000 Mb/s
    Link Type:    ETH
    Mac:          ba:16:03:9e:9c:87
    Mtu:          9000
    Name:         eno2np1
    Pci Address:  0000:1a:00.1
    Vendor:       15b3
    Vfs:
  - Vfs:
    - deviceID: 101e
      driver: mlx5_core
      mac: c2:80:29:b5:63:55
      mtu: 9000
      name: enp134s0f1v0
      pciAddress: 0000:86:04.1
      vendor: 15b3
      vfID: 0
    - deviceID: 101e
      driver: mlx5_core
      mac: 7e:36:0c:82:d4:20
      mtu: 9000
      name: enp134s0f1v1
      pciAddress: 0000:86:04.2
      vendor: 15b3
      vfID: 1
      .. <omitted 29 other VFs here>
  syncStatus: Succeeded

如需了解如何使用此资源,请参阅 SriovNetworkNodeState

NetworkAttachmentDefinition 项资源

借助 NetworkAttachmentDefinition 资源,您可以将 Distributed Cloud pod 附加到 Distributed Cloud 连接节点上的一个或多个逻辑或物理网络。它利用 Multus-CNI 框架和以下插件:

使用注解来引用相应 SriovNetworkNodePolicy 资源的名称。创建此注解时,请执行以下操作:

  • 使用密钥 k8s.v1.cni.cncf.io/resourceName
  • 在其值中使用前缀 gke.io/,后跟目标 SriovNetworkNodePolicy 资源的名称。

使用 networking.gke.io/gdce-vlan-id 注解指定目标网络的 VLAN ID。此注解为必需注解。

以下示例展示了资源的结构。适用于 IPv4 网络。

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: sriov-net1
  namespace: mynamespace
  annotations:
    k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p2_sriov_en2
    networking.gke.io/gdce-vlan-id: 225

spec:
  config: '{
  "type": "sriov",
  "cniVersion": "0.3.1",
  "name": "sriov-network",
  "ipam": {
    "type": "host-local",
    "subnet": "10.56.217.0/24",
    "routes": [{
      "dst": "0.0.0.0/0"
    }],
    "gateway": "10.56.217.1"
  }
}'

对于 IPv6 网络:

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: sriov-210-den102
  annotations:
    k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p0_sriov_en
    networking.gke.io/gdce-vlan-id: 225
spec:
  config: '{
  "type": "sriov",
  "cniVersion": "0.3.1",
  "name": "sriov-210-den102",
  "vlan": 210,
  
  "ipam": {
    "type": "host-local",
    "rangeStart": "2001:4860:1025:102:ffff:0220::2",
    "rangeEnd": "2001:4860:1025:102:ffff:0220::F",
    "subnet": "2001:4860:1025:102:ffff:0220::/96",
    "routes": [{
      "dst": "::/0"
    }],
    "gateway": "2001:4860:1025:102:ffff:0220::1"
  }
}'

使用 SR-IOV VF 在 pod 上配置辅助接口

配置 SriovNetworkNodePolicy 资源和相应的 NetworkAttachmentDefinition 资源后,您可以使用 SR-IOV 虚拟功能在分布式云 Pod 上配置辅助网络接口。

为此,请按如下所示向 Distributed Cloud pod 定义添加注解:

  • 键:k8s.v1.cni.cncf.io/networks
  • 值:nameSpace/<NetworkAttachmentDefinition1,nameSpace/NetworkAttachmentDefinition2...

以下示例展示了此注解:

apiVersion: v1
kind: pod
metadata:
  name: sriovpod
  annotations:
    k8s.v1.cni.cncf.io/networks: mynamespace/sriov-net1
spec:
  containers:
  - name: sleeppodsriov
    command: ["sh", "-c", "trap : TERM INT; sleep infinity & wait"]
    image: alpine
    securityContext:
      capabilities:
        add:
          - NET_ADMIN

使用 MacVLAN 驱动程序在 pod 上配置辅助接口

Distributed Cloud Connected 还支持使用 MacVLAN 驱动程序在 Pod 上创建辅助网络接口。只有 gdcenet0 接口支持此配置,并且仅适用于运行容器化工作负载的 pod。

如需配置接口以使用 MacVLAN 驱动程序,请执行以下操作:

  1. 配置 NetworkAttachmentDefinition 资源,如以下示例所示。对于 IPv4 网络:

     apiVersion: "k8s.cni.cncf.io/v1"
     kind: NetworkAttachmentDefinition
     metadata:
       name: macvlan-b400-1
       annotations:
         networking.gke.io/gdce-vlan-id: 400
     spec:
       config: '{
       "type": "macvlan",
       "master": "gdcenet0.400",
       "ipam": {
         "type": "static",
         "addresses": [
           {
             "address": "192.168.100.20/27",
             "gateway": "192.168.100.1"
           }
         ]
       ...
       }
     }'
    

    对于 IPv6 网络:

     apiVersion: "k8s.cni.cncf.io/v1"
     kind: NetworkAttachmentDefinition
     metadata:
       name: macvlan-bond0-210-den402
       annotations:
           networking.gke.io/gdce-vlan-id
     spec:
       config: '{
       "type": "macvlan",
       "cniVersion": "0.3.1",
       "name": "bond0-210",
       "master": "bond0.210",
    
       "ipam": {
         "type": "host-local",
         "rangeStart": "2001:4860:1025:102:0001:0210::2",
         "rangeEnd": "2001:4860:1025:102:0001:0210::F",
         "subnet": "2001:4860:1025:102:0001:0210::/96",
         "routes": [{
           "dst": "::/0"
         }],
         "gateway": "2001:4860:1025:102:0001:0210::1"
       }
     }'
    
  2. 向 Distributed Cloud pod 定义添加注解,如下所示。对于 IPv4 网络:

     apiVersion: v1
     kind: pod
     metadata:
       name: macvlan-testpod1
       annotations:
         k8s.v1.cni.cncf.io/networks: macvlan-b400-1
    

    对于 IPv6 网络:

     apiVersion: v1
     kind: Pod
     metadata:
       name: vlan210-1
       namespace: default
       annotations:
         k8s.v1.cni.cncf.io/networks: default/macvlan-bond0-210-den402
    

使用 Distributed Cloud 多网络功能在 pod 上配置辅助接口

分布式云互联支持使用其多网络功能在 pod 上创建辅助网络接口。为此,请完成以下步骤:

  1. 配置 Network 资源。例如:

    apiVersion: networking.gke.io/v1
    kind: Network
    metadata:
      name: vlan200-network
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: vlan200-interface
      gateway4: 10.53.0.1
    
  2. 向 Distributed Cloud pod 定义添加注解,如下所示:

    apiVersion: v1
    kind: pod
    metadata:
      name: mypod
      annotations:
        networking.gke.io/interfaces: '[{"interfaceName":"eth1","network":"vlan200-network"}]'
        networking.gke.io/default-interface: eth1
    ...
    
    

    后续步骤