Configuring Talos Linux Nodes Through the Machine Spec: Networking and Kernel Args
Talos Linux has no SSH and no editable /etc — every node setting lives in one declarative machine config. Here's how to set static networking and kernel arguments through it, and verify the result.
23 Jul 2026, 20:45 UTC

If you're used to editing /etc/network/interfaces or sysctl.conf on a Kubernetes node, Talos Linux removes that option entirely — and that's the point. Every persistent node setting lives in a single declarative document called the machine configuration, applied over Talos's API. The useful takeaway: to change networking or kernel behavior on a Talos node, you edit the machine config and push it with talosctl apply-config; anything you change outside that document is discarded.
Why there is no /etc to edit
Talos is an immutable, API-managed operating system built only for running Kubernetes. There is no SSH daemon, no shell on the node, and no package manager. A small supervisor process reads the machine configuration and reconciles the node to match it — network interfaces, routes, kernel arguments, disk layout, and the Kubernetes components themselves. Local state that isn't declared in the config is ephemeral, so the machine config is the only source of truth worth learning.
You interact with it through talosctl, the CLI client, authenticated with mutual TLS. The two files that matter on your workstation are talosconfig (client credentials and endpoints) and the per-node machine config (commonly controlplane.yaml and worker.yaml generated by talosctl gen config).
A worked example: static IP plus a kernel argument
A common bare-metal task: give a worker node a static address and disable a kernel feature your workload conflicts with. Both live in the same document. This example assumes Talos v1.7+ syntax; validate against your installed version with talosctl validate.
machine:
network:
interfaces:
- interface: eth0
addresses:
- 192.168.1.50/24
routes:
- network: 0.0.0.0/0
gateway: 192.168.1.1
kernel:
modules:
- name: br_netfilter
sysctls:
net.ipv4.ip_forward: "1"
install:
disk: /dev/sda
extraKernelArgs:
- mitigations=offThree distinct mechanisms are at work here, and confusing them is the most common mistake:
machine.network.interfaces— runtime network configuration applied by Talos's network controller at boot and on every config update. This replaces anything you'd put in netplan, ifupdown, or NetworkManager.machine.sysctls— runtime sysctl values Talos sets and keeps enforced. Use this for things like IP forwarding.install.extraKernelArgs— arguments written into the bootloader kernel command line. These only take effect when theinstallsection is applied (initial install or an explicit reinstall/upgrade path), not on a routineapply-config. Expect a reboot for these to matter.
Applying and verifying the change
Run from your workstation, with talosconfig pointing at the cluster (operator-level access required — the same credentials used to administer the cluster):
talosctl validate -c worker.yaml -m metal
talosctl apply-config --nodes 192.168.1.50 --file worker.yamlThe validate step catches schema errors before you push — do not skip it, because a bad network stanza can cut the node off from the API. After applying, verify without any node access:
talosctl --nodes 192.168.1.50 get addresses
talosctl --nodes 192.168.1.50 get links
talosctl --nodes 192.168.1.50 read /proc/sys/net/ipv4/ip_forwardThese commands query Talos's resource model over the API. get addresses should show 192.168.1.50/24 on eth0, and the sysctl read should return 1. For kernel command-line arguments, check talosctl read /proc/cmdline after the node has rebooted into the new install.
Limits and common mistakes
- Local edits don't persist. Even if you could modify a file on the node, the next reconcile or reboot reverts it. If a change isn't in the machine config, it doesn't exist.
- Wrong network config can orphan the node. Since your only management channel is the network API, a bad address or gateway means losing access. On bare metal, keep console access (BMC/IPMI) available before pushing network changes. Talos validates schema, but it cannot know your topology is correct.
- extraKernelArgs vs sysctls. Putting a boot-time parameter in
sysctls(or vice versa) silently does nothing. Rule of thumb: if it appears in/proc/cmdline, it belongs ininstall.extraKernelArgs; if it appears under/proc/sys, it belongs inmachine.sysctls. - Version skew. Machine config fields evolve between Talos releases. A
talosctlolder or newer than the cluster may reject valid configs or accept ones the node mishandles. Match client and server minor versions, and check the upgrade notes before bumping either. - apply-config modes. The default mode may reboot the node for changes that require it;
--mode no-rebootstages changes without rebooting, which is useful for maintenance windows but easy to forget about. Confirm the node actually picked up the change with the verification commands above rather than assuming.
Checking the end state
The practical loop is: edit the YAML, validate, apply-config, then read the live state back through the API. If get addresses, the sysctl read, and /proc/cmdline all match what you declared, the node is converged. If they don't, the node is either mid-reboot or the config landed in the wrong section — diff your file against the live spec with talosctl get machineconfig -o yaml to see exactly what the node believes its desired state is.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.