Repository navigation
Opt-in CNI transparent encryption for in-cluster (east-west) traffic #2977
Description
Activity
- addedkind/featureCategorizes issue or PR as related to a new featureCategorizes issue or PR as related to a new featuretriage/acceptedIndicates an issue is ready to be actively worked onIndicates an issue is ready to be actively worked onarea/platformIssues or PRs related to platform infrastructure (bundle, flux, talos, installer)Issues or PRs related to platform infrastructure (bundle, flux, talos, installer)priority/important-longtermImportant over the long term, but may not be staffed and/or may need multiple releases to completeImportant over the long term, but may not be staffed and/or may need multiple releases to completearea/networkingIssues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)Issues or PRs related to networking (ingress, gateway, vpn, metallb, kube-ovn)
on Jun 22, 2026 - addedsecuritySecurity-related issues and featuresSecurity-related issues and features
on Jun 22, 2026 lexfrei commented
on Jun 23, 2026 ContributorAuthorMore actionsHeads-up from testing this on a live Talos cluster: with
ENABLE_OVN_IPSEC=true(what thenetworking.encryption.enabledtoggle drives on the kubeovn-cilium datapath), thekube-ovn-cnipod fails to start on Talos nodes.The IPsec path mounts a hostPath for the OVS IPsec keys at
/etc/origin/ovs_ipsec_keys. On Talos/etc/originis a read-only filesystem, so the kubelet can't create the directory:failed to generate container spec: failed to apply OCI options: failed to mkdir "/etc/origin/ovs_ipsec_keys": mkdir /etc/origin: read-only file systemThe container never starts (
CreateContainerError), so no IPsec SAs establish (0 ESP SAs) and the overlay datapath is degraded on every Talos node. This affects theisp-fullvariant, which is the default/primary platform.Static checks don't surface this — helm-unittest and chart review both pass, because the template renders correctly; the failure is a runtime hostPath-vs-read-only-rootfs issue specific to Talos that only appears on a live Talos node.
Fix direction: the IPsec keys path needs to be Talos-writable — a hostPath under
/var(writable on Talos) or an emptyDir — rather than/etc/origin. Holding this in draft until that's addressed.- added a commit that references this issue
on Jul 27, 2026
Context
Cozystack ships several networking datapaths as
cozystack.networkingvariants, and the defaultisp-full(Talos) bundle deploys KubeOVN + Cilium (kubeovn-cilium), not plain Cilium (packages/core/platform/templates/bundles/system.yaml:94). Each datapath has its own in-cluster encryption mechanism, and all are off today:kubeovn-cilium(default) — KubeOVN can encrypt the Geneve overlay with IPsec, butENABLE_OVN_IPSECdefaults tofalse(packages/system/kubeovn/charts/kube-ovn/values.yaml:78).cilium/cilium-generic— Cilium 1.19.3 supports transparent WireGuard/IPsec encryption, but it is unset inpackages/system/cilium/values.yaml.cilium-kilo— Kilo establishes a WireGuard mesh, but atmeshGranularity: locationit encrypts only cross-location traffic; pod-to-pod within a location stays in cleartext by design (packages/system/kilo/values.yaml:7).In every shipped configuration, intra-location / intra-cluster pod-to-pod traffic is unencrypted by default, and there is no single, consistent operator-facing way to turn in-cluster encryption on.
The per-app TLS series (#2814) and Gateway TLS-passthrough (#2815) secure specific, explicitly-exposed endpoints; they do nothing for the bulk of east-west traffic between workloads that do not implement TLS. #2816 mentions CNI mesh encryption only as an optional complement; this issue carves it into an explicit, self-contained opt-in feature.
Goal
A platform-level opt-in that enables in-cluster transport encryption for the active datapath, off by default. When enabled, pod-to-pod traffic across nodes is encrypted at the network layer regardless of whether the workload implements TLS — defense-in-depth for the whole mesh without per-application changes.
Design questions
ENABLE_OVN_IPSEC, Cilium native WireGuard/IPsec, Kilo WireGuard. A unifiednetworking.encryption.enabledtoggle would have to map onto whichever datapath is active.kubeovn-ciliumis the default, the KubeOVN IPsec path is the highest-value target; the Cilium-native path matters for thecilium/cilium-genericvariants.Non-goals
Acceptance
kubeovn-ciliumdatapath, defaulting to off.isp-full(Talos) variant on a live Talos cluster, not by static checks alone: the kube-ovn-cni pod starts cleanly (no CreateContainerError from a read-only-rootfs hostPath), IPsec ESP SAs establish between nodes, and encrypted pod-to-pod traffic flows across nodes. feat(platform): add opt-in in-cluster east-west encryption toggle #2984 is not considered done until this live-on-Talos verification passes.Part of #2811.