324 Commits

Author SHA1 Message Date
Erwan Leboucher
6eec1c2293
feat: support DNS over TLS for upstream resolvers
Add DNS over TLS (RFC 7858) support to the host DNS forwarder. A new optional
`tlsServerName` field on `nameservers[]` in `ResolverConfig` enables DoT for an
individual upstream; when set, queries to that nameserver use TCP+TLS on port
853 with the given name as both SNI and certificate validation name (TLS 1.2+).

Signed-off-by: Erwan Leboucher <erwanleboucher@gmail.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-05-07 22:49:39 +04:00
Noel Georgi
689974bd55
fix: volume mount permissions
Make Talos volumes mount options more stricter.

Fixes: #11946

Signed-off-by: Noel Georgi <git@frezbo.dev>
2026-05-06 23:35:14 +05:30
Dmitriy Matrenichev
53bd669562
feat: support conditional start of IPv6 dns servers
This PR does those things:
- Raise IPv6 listener on link-local address for dns (both TCP and UDP).
- Update kubelet's `resolv.conf` IPv4/IPv6 endpoints.

Closes #9384

Link: https://github.com/siderolabs/talos/pull/9596
Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2026-05-05 22:21:45 +02:00
Andrey Smirnov
e1f759af80
chore: fix lint issues automatically
Mostly reformatting to use consistent newlines in function calls.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-05-05 14:06:44 +04:00
Andrey Smirnov
4f11f021de
feat: implement etcd encryption config (kube-apiserver)
This replaces existing fixed field for etcd encryption with a completely
flexible configuration which exactly matches upstream kube-apiserver
configuration.

The default machine configuration generated still retains previous
defaults.

New configuration allows:

* rotating etcd encryption secrets
* implementing any encryption policies (e.g. encrypting configmaps).

Fixes #10899

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-05-04 19:35:23 +04:00
Mateusz Urbanek
876f836430
feat: add support for HTTP Probes
- Add HTTPProbeSpec to ProbeSpecSpec (URL + timeout)
- Implement probeHTTP() to send GET requests, treat 2xx/3xx as success
- Support machine proxy config via httpdefaults.PatchTransport
- Add HTTPProbeConfig v1alpha1 document and controller integration
- Add unit and integration tests for HTTP probe lifecycle

Signed-off-by: Pranav Patil <pranavppatil767@gmail.com>
Co-authored-by: Pranav Patil <pranavppatil767@gmail.com>
Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-05-04 15:22:51 +02:00
Andrey Smirnov
25e2f37e2b
chore: generate comments for fields in resource proto
Update structprotogen to put comments from Go structs into generated
.proto files.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-04-22 18:02:27 +04:00
Andrey Smirnov
149592fa59
fix: watch kubelet's kubeconfig and time out for cache sync
Fixes #13169

Also fixes a number of other issues with controller being stuck
"watching" over stale data.

The major part of the change is to watch contents of kubelet's
kubeconfig and restart the watch when it changes.

The internals of the watch process don't always bubble up error
properly, or we don't watch for errors.

With this change, not only initial sync has a timeout and a way to abort
the sync process, Talos now can also restart the sync on kubeconfig
change make it more transparent.

This might become irrelevant if we start managing kubeconfig via Talos
controlplane for workers, but for now this seems to be the way to fix
issues.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-04-22 17:44:46 +04:00
Erwan Leboucher
0198eedc2b
feat: add NTS (Network Time Security) support for NTP time sync
Implement optional NTS (RFC 8915) support for authenticated and encrypted
time synchronization, using the beevik/nts library.

Signed-off-by: Erwan Leboucher <erwanleboucher@gmail.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-04-22 15:27:50 +04:00
Andrey Smirnov
f6e7346fa7
fix: encode extra args fields in resources with new id
This is a fixup for #12475

Split the protobuf id for extraArgs fields to use new value, so that we
don't have unmarshal failure when using newer machinery with older Talos
or vice versa.

Also pull in a fix https://github.com/siderolabs/go-talos-support/pull/15

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-04-15 18:14:29 +04:00
Andrey Smirnov
968ec1e0ca
refactor: propagate NAME properly, allow to set on build
Allow to set build NAME on build, propagate it down to more consumers.

Expose name in `Version` resource, and use that in the dashboard
next to Talos version.

Fix some places where `Name` was hardcoded.

Propagate Name down to UKI build.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-04-08 17:57:43 +04:00
Andrey Smirnov
038cb87354
feat: enforce PID check on connections to services over file sockets
Whitelist services which can access the file socket, refuse other
connections.

Fixes #12701

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-24 14:44:55 +04:00
Andrey Smirnov
b7d70cf625
feat: unify maintenance and regular APIs
Drop maintenance service and all the code supporting it directly.

Instead, move all network API termination into the `apid` service, which
now can work now in more modes to support maintenance operations as
well.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-17 17:00:35 +04:00
Mateusz Urbanek
6bb5cf57a2
feat: implement routing rules support
Add RoutingRuleConfig multi-doc config type for management of routing rules.
KubeSpan now uses COSI resources instead of direct kernel management.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-03-13 15:17:49 +01:00
Andrey Smirnov
17335107be
fix: use non-sensitive resource for health check precondition
A fixup for #12896

The health check might be running as a reduced privilege role client, so
don't pull the machine config, but instead read a field from a
non-sensitive resource.

As this field doesn't exist in older versions of Talos, the check should
still run by default (as it will be empty).

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-10 18:37:55 +04:00
Laura Brehm
7f2eb48561
feat: add image verification endpoint
Add support for whole machine-wide image verification configuration.
Configuration is a set of rules applied top-down to the image reference,
each specifying a specific cosign-based identity or static public key
claim.

Talos provides a machined API to verify an image reference, resolving it
to the digest on the way as needed.

Talos itself hooks up in the image verification process, while
containerd CRI plugin accesses same API via the machined socket.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-06 20:06:07 +04:00
Mateusz Urbanek
15a5ec9985
feat: implement new install/upgrade API
Implement new minimal Install/Upgrade LifecycleService API with streaming
support for real-time progress reporting. Add protobuf definitions, gRPC
service implementation, and client bindings.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-03-06 12:16:35 +01:00
pythoner6
1da2b63ab5
feat: multi-doc support for configuring vrfs
Fixes https://github.com/siderolabs/talos/issues/11960

This adds a new network config document type, network.VRFConfig that can
be used to configure vrfs https://docs.kernel.org/networking/vrf.html.

Signed-off-by: pythoner6 <pythoner6@gmail.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-25 15:10:35 +04:00
Dmitrii Sharshakov
9758bd4fe0
feat: update Go to 1.26
Via tools/pkgs, also pulling in Clang-built Linux

Update go.mod dependencies

Fix linter errors with new golangci-lint, modernize, use new()

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-19 22:15:19 +01:00
Daniil Kivenko
70c6c2154e
feat: add filter for KubeSpan advertised networks
Add advertisedNetworks filter to KubeSpan configuration that allows
filtering which additional networks (e.g., pod CIDRs) are advertised
over KubeSpan when advertiseKubernetesNetworks is enabled.

Signed-off-by: Daniil Kivenko <daniil.kivenko@p2p.org>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-12 15:02:47 +04:00
Sébastien Masset
87615f5511
feat: implement network policies with Flannel CNI
Align flannel ClusterRole with upstream chart template (cf.
https://github.com/flannel-io/flannel/blob/master/chart/kube-flannel/templates/rbac.yaml)

Add boolean in cluster flannel CNI config to deploy extra resources to
handle network policies. Inspired by flannel Helm chart handling of
netpol.enabled value (cf. https://github.com/flannel-io/flannel/blob/master/Documentation/netpol.md)

Signed-off-by: Sébastien Masset <86793256+smasset-orange@users.noreply.github.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-10 15:47:49 +04:00
Andrey Smirnov
9690dbad02
chore: bump tools (including linter)
Re-generate, fix new linting issues.

Update containerd library to the latest 2.2.1 to address the new cgroups
package import (via tools update).

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-09 13:07:35 +04:00
Laura Brehm
d43a01ccbd
feat: implement talosctl debug
This implements a way to run a debug container with a provided image on
the node.

The container runs with privileged profile, allowing to issue debugging
commands (e.g. using some advanced network tools) to troubleshoot a
machine.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-04 21:26:09 +04:00
Pranav Patil
34a31c9797
feat: add mount options support for existing volumes
Add DisableAccessTime and Secure mount options for existing volumes.
DisableAccessTime adds noatime parameter to disable access time updates.
Secure adds nosuid and nodev parameters for security (defaults to true).
Add integration tests for both options.

Signed-off-by: Pranav Patil <pranavppatil767@gmail.com>
2026-02-04 09:13:05 +01:00
Andrey Smirnov
9f2dd6312f
refactor: api tests
Unify a list of all APIs in Talos to a single place, and use them in
associated tests:

* the test for one2many specifics
* the test for deprecated methods
* the test for missing RBAC rules

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-02 19:17:27 +04:00
Andrey Smirnov
8b245b8f26
feat: implement new image service APIs
These new APIs only support one2one proxying, so they don't have any
hacks, and look as regular gRPC APIs.

Old APIs are deprecated, but still supported.

Implement client-side multiplexing in `talosctl`, provide fallback to
old APIs for legacy Talos versions.

New APIs include removing an image, importing an image.

Extracted from #12392

Co-authored-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-02-02 15:55:56 +04:00
Florian Ströger
562920701e
fix: use node podCIDRs for kubespan advertiseKubernetesNetworks
This commit changes the way kubespan gets the podCIDR to advertise when
`advertiseKubernetesNetworks` is enabled. Before, it used the interface
address, but some CNIs (such as Cilium in NativeRouting) only set a
single /32 IP to a single interface (`cilium_host` in cilium's case).
This adds the `v1.Node`'s `.spec.podCIDRs` array to the `k8s.NodeStatus`
object and uses this to advertise the kubernetes network.

Signed-off-by: Florian Ströger <stroeger@youniqx.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-22 19:43:21 +04:00
Mateusz Urbanek
8c7b8f5b7d
feat: add support for negative max size
Add support for negative max size values in volume configuration.
Negative max size represents the amount of space to be left free on the device, rather than the size the volume should consume.
For example, a max size of "-10GiB" means the volume can grow to the device size minus 10GiB.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-01-21 12:11:31 +01:00
Mateusz Urbanek
91b88f7f99
feat: support multiple values for extraArgs
BREAKING: internal resources for the components use different
representation of AxtraArgs, resulting in modified types in protocol
buffers.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek.98@gmail.com>
2026-01-16 11:20:59 +01:00
Andrey Smirnov
96e604874b
fix: add hostname to endpoints
Populate endpoint coming from the Kubernetes controlplane endpoint with
the hostname (if the endpoint is a hostname).

This should improve cases when hostname is used for the endpoint in
terms of SNI, proper resolving of DNS if it's dynamic.

See https://github.com/siderolabs/talos/pull/12556#issuecomment-3755862314

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-15 22:56:46 +04:00
Mateusz Urbanek
c3176adcf9
feat: add EnvironmentConfig document
Add new EnvironmentConfig document for configuring the Env vars.
Deprecate .Machine.Env

Closes #12439

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2026-01-12 15:10:20 +01:00
Andrey Smirnov
c57701d659
fix: remove interactive installer
The interactive installer has been deprecated since v1.12 cycle,
now removed completely including the API method.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-25 15:01:10 +04:00
Andrey Smirnov
39117d4576
feat: update dependencies
Bump Go modules, Helm charts, other versions.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-18 22:59:51 +04:00
Mateusz Urbanek
694f45413f
feat: external volumes
Add new volume type for managing external volume mounts - Virtiofs volumes

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-15 14:35:52 +01:00
Bryan Lee
6db06f4d5d
feat: implement multicast setting
Add a multicast option to LinkSpec that can be configured to explicitly declare the state of the multicast flag.

Signed-off-by: Bryan Lee <me@bryanl.ee>
2025-11-17 16:23:59 +01:00
Edward Sammut Alessi
a6bbae91ba
fix: fix typos across the project
Fix typos across the project

Signed-off-by: Edward Sammut Alessi <edward.sammutalessi@siderolabs.com>
2025-11-17 10:33:42 +01:00
Mateusz Urbanek
83f2bdb9ce
feat: support relative voume size
Include percent-based maxSize, e.g. use 50% of available space.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-11-14 14:56:22 +01:00
Andrey Smirnov
68560b53ab
fix: split volume/disk locators
Don't guess based on the volume type, but use explicit fields for
different locators.

IMAGECACHE-ISO is a disk volume, but uses full volume locator (by
filesystem type, etc.)

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-11-14 12:18:22 +04:00
Andrey Smirnov
82ac1119ec
feat: implement new registry configuration
Move to using multi-doc registry configuration.

Fixes #12120

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-11-12 17:25:01 +04:00
Laura Brehm
66c01a706f
chore: deprecate interactive installer mode
Removes `interactive` from `talosctl apply-config --mode interactive`,
and deprecates related APIs.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
2025-11-11 18:22:38 +01:00
Laura Brehm
957770f65a
feat(machined): add panic/force mode reboot
In certain situations, Talos's shutdown/reboot sequence hangs while
waiting for services/mounts to be gracefully stopped (see:
https://github.com/siderolabs/talos/issues/11775).

This patch adds a forceful mode to the reboot sequence (`talosctl reboot
--mode force`) that bypasses graceful userspace teardown and hard
reboots the machine.

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
2025-11-11 12:08:34 +01:00
Andrey Smirnov
f4ad3077b0
feat: implement bond multi-doc configuration
Also expand internal bond configuration to cover missing fields.
They are not going to be exposed in legacy configuration.

Fixes #10960

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-11-07 13:45:09 +04:00
Mateusz Urbanek
f3df0f80b9
feat: add directory backed UserVolumes
Resolves #11848

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-10-29 12:00:24 +01:00
Andrey Smirnov
1dffa5d996
feat: implement virtual IP operator config
Fixes #10959

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-10-24 17:37:03 +04:00
Andrey Smirnov
d110727263
fix: provide offset for partitions in discovered volumes
This was missing in the resource which makes rendering partitions
in the GUI hard.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-10-23 21:25:42 +04:00
Andrey Smirnov
6c98f4cdb0
feat: implement new DHCP network configuration
Fixes #11661

Fixes #10958

This also implement proper client identifier handling.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-10-21 20:51:58 +04:00
Dmitrii Sharshakov
4e12df8c5c
test: integration test for OOM controller
- Improve docs
- Disable OOM controller in container mode
- Log OOM events
- Add an integration test verifying the system can sustain an OOM event

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
2025-10-20 17:50:59 +02:00
Noel Georgi
ced57b047a
feat: support optionally disabling module sig verification
Support disabling kernel module signature verification.
Note that this does not work when SecureBoot is enabled.

Fixes: #11989

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-10-16 20:18:46 +05:30
Andrey Smirnov
9a42b05bda
feat: implement link aliasing
Fixes #10956

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-10-08 16:27:27 +04:00
Andrey Smirnov
825622d90a
fix: resource proto definitions
There was a mismatch between how Talos encodes resource specs to
protobuf on the wire, and `.proto` files generated by `structprotogen`
for the same specs.

This only affected `LinkStatus`/`LinkSpec` resources, and it doesn't
affect Talos/Omni as they go via `protoenc`, bypassing `.proto` files.

Also if default proto library is used, it also works correctly.

The only place where it fails is a strict `vtprotobuf` encoding.

Also imports `protoenc` 0.2.4 skipping encoding of zero fields, which
should make COSI responses smaller for resources with lots of zero
fields.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-10-06 22:28:18 +04:00