- Deploy pods on worker1 and worker2.
- Generate pod-to-pod traffic (ICMP/HTTP).
- Capture traffic on the router before enabling encryption (unencrypted).
- Enable Cilium encryption (IPsec).
- Capture traffic again (encrypted) and verify in Wireshark.
- Inspect node host interfaces to understand encapsulation addresses.

- Verify pods are scheduled and reachable across nodes.
- Capture unencrypted traffic on the router (validate visibility).
- Add IPsec keys as a Kubernetes secret.
- Enable encryption in the Cilium Helm values and upgrade.
- Restart Cilium components, validate encryption status.
- Capture encrypted traffic and inspect with Wireshark.
- Inspect cilium_host addresses on nodes to understand outer IPs.
Initial verification — pods and basic pod-to-pod traffic
- Confirm pods are running and which nodes they are on:
- Generate basic traffic from a pod on worker1 to a pod on worker2 (ICMP example):
Run tcpdump with sudo if you get “Operation not permitted” — packet capture needs root privileges.

- Create the Kubernetes secret containing IPsec keys in kube-system. The key entry format:
Keep IPsec keys secret and manage them securely. Use appropriate key lengths for your security requirements (e.g., 256-bit where needed).
- Edit the Cilium Helm values (values.yaml) to enable encryption. Set the encryption block like:
type: wireguard and provide keys in the expected format.)
- Upgrade the Cilium chart and restart Cilium components:
- Confirm Cilium reports encryption is active from a Cilium agent pod:
- Generate traffic again from the same pod but use a larger ICMP payload so encrypted packets are easier to spot (e.g., -s 1300):
-s option before the destination IP.
- On the router capture encrypted traffic to encrypted.pcap:
- Open encrypted.pcap in Wireshark. With Cilium IPsec enabled you should no longer see ICMP or HTTP payloads in cleartext for inter-node pod flows. Instead, you will typically see:
- Encapsulating Security Payload (ESP) frames (the encrypted inner payload).
- Possibly additional encapsulation like VXLAN + ESP depending on Cilium configuration.
- Large frame sizes due to encapsulation overhead.
- Before enabling Cilium encryption, router captures show pod payloads (ICMP, HTTP) in cleartext.
- After enabling Cilium IPsec, inter-node traffic is encapsulated and encrypted — Wireshark shows ESP (and possibly VXLAN) and you cannot read the inner ICMP/HTTP payloads from the router capture.
- Cilium uses node-local host interfaces (cilium_host) for outer addresses; the receiving node decrypts and forwards the inner pod traffic to the destination pod.
- Use IPsec or WireGuard depending on your operational and performance requirements.
- Cilium: https://cilium.io
- IPsec (ESP): https://en.wikipedia.org/wiki/Encapsulating_Security_Payload
- WireGuard: https://www.wireguard.com
- Kubernetes: https://kubernetes.io
- Helm: https://helm.sh
- tcpdump: https://www.tcpdump.org
- Wireshark: https://www.wireshark.org