Skip to content

Install Cilium CNI with kube-proxy Replacement

Cilium provides the Container Network Interface (CNI) and replaces kube-proxy with eBPF-based load balancing.

Terminal window
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
curl -L --fail --remote-name-all \
https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-amd64.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz{,.sha256sum}

Step 2: Install Cilium with kube-proxy replacement

Section titled “Step 2: Install Cilium with kube-proxy replacement”

Get the version from ansible/group_vars/all.yaml:

Terminal window
CILIUM_VERSION=$(grep -E "cilium_version:" ansible/group_vars/all.yaml | head -n 1 | awk -F'"' '{print $2}')

Update k8sServiceHost in infrastructure/cilium/values.cilium to match the control plane IP.

Install with the required settings for Tailscale compatibility:

Terminal window
cilium install --version $CILIUM_VERSION --values infrastructure/cilium/values.cilium

The socketLB.hostNamespaceOnly=true setting is required when using Tailscale Kubernetes Operator LoadBalancer services. Without it, traffic forwarded through the Tailscale proxy pod will fail because Cilium’s socket-level load balancer interferes with iptables DNAT rules.

Remove the kube-proxy DaemonSet since Cilium replaces it:

Terminal window
kubectl -n kube-system delete daemonset kube-proxy
Terminal window
cilium hubble enable --ui
Terminal window
kubectl get nodes
cilium status
cilium config view | grep -E "bpf-lb-sock|kubeProxyReplacement"

Expected output should include:

bpf-lb-sock-hostns-only true
kubeProxyReplacement true

To update Cilium settings after initial installation:

Terminal window
cilium upgrade --version $CILIUM_VERSION --set socketLB.hostNamespaceOnly=true
kubectl rollout restart daemonset/cilium -n kube-system
kubectl rollout status daemonset/cilium -n kube-system