- Install Multus for Talos: Deploy the Multus DaemonSet, and how to check whether a netns path patch is needed on your Talos version.
- Configure a multi-homed pod: Define a NetworkAttachmentDefinition and attach it to a pod, giving it a second network interface.
- Known issues: Current upstream bugs and their workarounds.
- Compatibility notes: What changes when running Multus alongside KubeVirt or Cilium.
Install Multus for Talos
-
Deploy the
thickDaemonSet withkubectl:This creates a DaemonSet and a CRD,NetworkAttachmentDefinition, which you’ll use to specify your network configuration in Configure a multi-homed pod. -
Check whether the netns path patch applies to your Talos version. The upstream manifest mounts the
host-run-netnsvolume at/run/netns. On Talos versions where/var/runis a symlink to/run,/run/netnsand/var/run/netnsare the same location, and no patch is needed. Check your node:If the output showsrun -> /run, the paths are identical and the DaemonSet works as deployed, with no patch required. This was confirmed on Talos v1.13.7 / Kubernetes v1.36.2: with/var/runsymlinked to/run, the unpatched DaemonSet created pod network interfaces via the primary CNI with no netns errors. If/var/runis not a symlink to/runon your version, edit the DaemonSet and change the volume path:Skipping the patch in that case can prevent new pods from scheduling, surfacing in the pod’s events as:
Configure a multi-homed pod
Installing Multus doesn’t do anything on its own: A pod only gets a second network interface once you define a NetworkAttachmentDefinition and attach it to that pod. The steps below use thebridge CNI type, which connects two Ethernet segments together in a protocol-independent way — packets are forwarded based on Ethernet address rather than IP address, so all protocols pass through transparently at Layer 2. For containers or VMs, a bridge connects each one’s virtual interface to the host network, letting them communicate.
- Configure a bridge interface on your Talos node. Replace
<INTERFACE_NAME>with your node’s actual interface (for example,eno1).
dhcp4/<interface>, your node is DHCP-managed — use the DHCP tab below. Otherwise, use the Static IP tab.
When using the bridge interface you must also configure a bridge on your Talos nodes.
That can be done by updating Talos Linux machine configuration:
- Static IP
- DHCP
Assigns the bridge a fixed address on your network:
- Talos v1.14+
- Talos < v1.14
Sets the address directly on the
BridgeConfig document:-
Create a
NetworkAttachmentDefinitionreferencing the bridge. Choose an IPAM subnet that doesn’t overlap with any subnet already in use on your network (including any DHCP pool), to avoid address conflicts: -
Attach the
NetworkAttachmentDefinitionto a pod or deployment. Reference it by name in the pod’s annotations:On clusters with therestrictedPod Security Admission policy enforced, this pod definition triggers a non-blocking admission warning (allowPrivilegeEscalation,capabilities,runAsNonRoot,seccompProfileare unset). The pod still creates and runs successfully; add asecurityContextmatching your cluster’s policy if you want to avoid the warning. This walkthrough was confirmed end to end: the resulting pod reachedRunningwith both interfaces present — the default network interface from the primary CNI, and a second interface frombridge-confwith an address in the configured subnet, both visible in the pod’sk8s.v1.cni.cncf.io/network-statusannotation.
Known issues
The following are known issues when running Multus on Talos Linux. Each entry includes a workaround where one exists; these are pinned to the date they were last verified, so check the linked issue for current status before relying on them.-
install-multus-binaryrace condition after reboot (last verified August 13, 2026): A known bug in theinstall-multus-binarycontainer can cause race problems after a node reboot. The issue is closed. Rebooting a node running Multus and checking theinstall-multus-binaryinit container’s logs afterward showed no error — the copy completed successfully with noText file busyfailure. Patch the container’s command if you do encounter it: -
Primary CNI plugin OOM-killed (last verified February 3, 2025): The default 50Mi memory limit on the
kube-multus-dsDaemonSet is too low, which can OOM-kill the primary CNI plugin. The issue is closed. Increase the resource limits on the DaemonSet’s container:As of PR #1510 (merged May 29, 2026), multus-daemon also supports aconnectionLimitoption (an integer) indaemon-config.json— for example:
Compatibility notes
Running Multus alongside certain other tools requires extra configuration. This section covers KubeVirt and Cilium specifically. If you’re not using either, you can skip it.Using Multus with KubeVirt
If you want to use KubeVirt and expose a virtual machine to the outside world with Multus, configure thebridge type instead of macvlan or ipvlan; neither works for this case.
The KubeVirt documentation lists
macvlan and ipvlan as invalid CNIs for secondary networks using a bridge interface, since a bridge interface moves the pod interface’s MAC address to the VM, leaving the pod interface with a different address, but macvlan and ipvlan require the pod interface to keep its original MAC address.Using Cilium with Multus
Cilium needs one adjustment to work correctly alongside Multus: by default, Cilium is an exclusive CNI, meaning it removes other CNI configuration files. Disable this by setting the Helm variablecni.exclusive=false. See the Cilium documentation for more.
Confirm the setting has actually taken effect before assuming it’s working. If
cni.exclusive=false isn’t applied correctly, Cilium silently renames 00-multus.conf to 00-multus.conf.cilium_bak in /etc/cni/net.d/, with no error from Multus, making the failure hard to diagnose. See siderolabs/talos issue #10468.