Generic Veth Chaining
The generic veth chaining plugin enables CNI chaining on top of any CNI plugin that is using a veth device model. The majority of CNI plugins use such a model.
Note
Some advanced Cilium features may be limited when chaining with other CNI plugins, such as:
- Layer 7 Policy (see GitHub issue #12454)
- Transparent Encryption (stable/beta) (see Github issue #15596)
Validate that the current CNI plugin is using veth
Log into one of the worker nodes using SSH
Run
ip -d link
to list all network devices on the node. You should be able spot network devices representing the pods running on that node.A network device might look something like this:
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
The
veth
keyword on line 3 indicates that the network device type is virtual ethernet.
If the CNI plugin you are chaining with is currently not using veth then the generic-veth
plugin is not suitable. In that case, a full CNI chaining plugin is required which understands the device model of the underlying plugin. Writing such a plugin is trivial, contact us on Slack for more details.
Create a CNI configuration to define your chaining configuration
Create a chaining.yaml
file based on the following template to specify the desired CNI chaining configuration:
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"
}
]
}
Deploy the ConfigMap
:
kubectl apply -f chaining.yaml
Deploy Cilium with the portmap plugin enabled
Note
First, make sure you have Helm 3 installed. Helm 2 is no longer supported.
Setup Helm repository:
helm repo add cilium https://helm.cilium.io/
Deploy Cilium release via Helm:
helm install cilium cilium/cilium --version 1.9.8 \
--namespace=kube-system \
--set cni.chainingMode=generic-veth \
--set cni.customConf=true \
--set cni.configMap=cni-configuration \
--set tunnel=disabled \
--set masquerade=false