cilium CNI Chaining 与 Generic Veth Chaining

234 阅读1分钟

1. CNI chainning

CNI chainning 机制,可以让 cilium 配合 其他 CNI 插件一起使用。

通过 CNI chainning 机制, 基础网络连通性和 IPAM 都是由非 cilium CNI 插件来管理。

但是, cilium 会把 eBPF 程序挂载到其他非 cilium CNI 插件的 veth-pair 设备上。从而提供 L3/L4 层的 可见性,策略执行以及其他高级特性。

2. Generic Veth Chaining

generic veth chaining plugin 可以让任何使用 veth-pair 设备驱动的 CNI 插件能够使用 CNI chaining 特性。绝大多数 CNI 都使用 veth-pair。

2.1 验证你的 CNI 是否在使用 veth-pair


# 使用 ip -d link 查看主机上的所有设备

...

# 像这种带有 veth 的就是 veth-pair 虚拟网络以太网设备

103: lxcb3901b7f9c02@if102: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 3a:39:92:17:75:6f brd ff:ff:ff:ff:ff:ff link-netnsid 18 promiscuity 0
    veth addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535


generic-veth plugin 只能用于这种 veth 设备

2.2 创建 generic-veth 配置文件


# cat chaining.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: cni-configuration
  namespace: kube-system
data:
  cni-config: |-
    {
      "name": "generic-veth",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "XXX",
          [...]
        },
        {
          "type": "cilium-cni",
          "chaining-mode": "generic-veth"
        }
      ]
    }




部署该 configmap



kubectl apply -f chaining.yaml

部署 cilium 并启用 portmap plugin


helm repo add cilium https://helm.cilium.io/


helm install cilium cilium/cilium --version 1.16.1 \
  --namespace=kube-system \
  --set cni.chainingMode=generic-veth \
  --set cni.customConf=true \
  --set cni.configMap=cni-configuration \
  --set routingMode=native \
  --set enableIPv4Masquerade=false

参考:

  1. docs.cilium.io/en/stable/i…
  2. docs.cilium.io/en/stable/i…