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