Prerequisites
Talos Linux has specific requirements that apply regardless of which installation method you choose:- IPAM mode must be set to
kubernetes - Talos already provides
cgroupv2andbpffsmounts — do not let Cilium attempt to mount these - Talos does not allow Kubernetes workloads to load kernel modules, so the
SYS_MODULEcapability must be dropped from Cilium’s default capability set - This guide assumes KubePrism is enabled and configured on port
7445
Machine configuration prerequisites
In addition to the above prerequisites, the Cilium CLI and Helm methods all require that you first configure your machine with CNI set tonone. Set this before bootstrapping.
To do that:
- With kube-proxy
- Without kube-proxy
1. Create a patch file that sets the CNI to 2. Generate the machine config with the patch applied:
none: After applying the machine config with CNI set to
none and bootstrapping, Talos will appear to hang at phase 18/19 with the message retrying error: node not ready. This is expected, nodes are only marked ready once a CNI is running. You have approximately 10 minutes to apply Cilium before the node reboots to retry.Method 1: Omni manifest sync
If you are using Omni, the recommended approach is to deploy Cilium using the manifest sync feature in a cluster template. Omni will wait until the Kubernetes API is available and the cluster is healthy before applying the Cilium manifests. Step 1. Create avalues.yaml file with the Cilium Helm values by running:
- With kube-proxy
- Without kube-proxy
file field:
- Without kube-proxy
When deploying without kube-proxy, set
proxy.disabled: true in the patches block:Method 2: Helm
Helm is the recommended approach for Talos clusters not managed by Omni. There are four variants depending on how you want to manage and apply the Cilium manifest. Choose the one that fits your workflow:- CLI install: Installs Cilium directly with
helm installwithout generating a manifest file. Simplest Helm path but least declarative. - Inline manifest: Embeds the manifest directly in the machine configuration; applied automatically on bootstrap and reapplied on control plane reboots. Recommended for production.
- Manifest apply: Generates the manifest with
helm templateand applies it manually withkubectl. Useful for one-off installs or when you want to inspect the manifest first. - Hosted manifest: Generates the manifest, hosts it at a URL, and patches the machine config to fetch it automatically during bootstrap. Requires secure internal hosting.
- CLI install
- Inline manifest
- Manifest apply
- Hosted manifest
Install Cilium directly using After Cilium is installed successfully, the bootstrap process will continue and complete.
helm install during the bootstrap window.- With kube-proxy
- Without kube-proxy
- Without kube-proxy + Gateway API
Method 3: Cilium CLI
Install the Cilium CLI following the upstream instructions, then run:- With kube-proxy
- Without kube-proxy
- Without kube-proxy + Gateway API
Known issues
The following are known issues when running Cilium on Talos Linux. Each entry includes a workaround where one exists.- GCP internal load balancers: There are known issues when using Talos and Cilium on Google Cloud Platform with internal load balancers. See GCP ILB support / support scope local routes to be configured for details.
-
CoreDNS not working with
forwardKubeDNSToHostandbpf.masquerade: When using TalosforwardKubeDNSToHost=true(enabled by default) together with Ciliumbpf.masquerade=true, CoreDNS may not work correctly. SettingforwardKubeDNSToHost=falseresolves the issue. See the discussion here for more context. -
cilium connectivity testfails with PodSecurity errors: After installing Cilium,cilium connectivity testmay hang or fail with an error like:This is expected. Work around it by adding thepod-security.kubernetes.io/enforce=privilegedlabel on the namespace level.