Skip to content

chore: backports for v1.14.0 - #14217

Merged
talos-bot merged 50 commits into
siderolabs:release-1.14from
shanduur:backports/v1.14.0
Sep 3, 2026
Merged

chore: backports for v1.14.0#14217
talos-bot merged 50 commits into
siderolabs:release-1.14from
shanduur:backports/v1.14.0

Conversation

@shanduur

@shanduur shanduur commented Sep 2, 2026

Copy link
Copy Markdown
Member

Containers


Updates:

  • pkgs: v1.14.0-15-g2f03590
  • tools: v1.14.0-5-g87316ca

Enable Cilium to work in enforcing mode

Fixes siderolabs#13807

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
(cherry picked from commit 00ec337)
@github-project-automation github-project-automation Bot moved this to To Do in Planning Sep 2, 2026
@shanduur
shanduur changed the base branch from main to release-1.14 September 2, 2026 08:03
smira and others added 4 commits September 2, 2026 10:10
This should be defense-in-depth, as the untar is usually passed trusted
input - either an extension image, or the Talos Read API result, but
it's better to stay on the safe side, and protect from malicious tar
structure by restricting the extraction to the provided root.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 9c747cb)
In containerd v4 config format, the `[metrics]` was deprecated - updat
to the new name in the examples.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit f48e688)
Fixes siderolabs#12860

The Linux kernel ships VLAN tags on ingress frames, so use gopacket's
feature to re-insert them.

This has limitations though (mostly on gopacket's side), but still
better than current behavior:

* packets with VLAN tag 0 will not have header re-attached
* packets will be with 802.1q frames no matter what the actual VLAN tag
  was

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit e489f95)
SELinux label was applied unconditionally on mount, ignoring the same
read-only/detached/external exclusions already used for target
settings. For a read-only existing volume this attempted to relabel a
target it must not touch. Unify both checks under one
shouldUpdateTargetSettings gate.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit 1bb6e1f)
frezbo and others added 21 commits September 2, 2026 12:54
Allow extensions to opt out of the container rootfs and execute an
absolute entrypoint directly on the Talos host. Keep container mode as
the default and reject container-only mounts and security options for
host services.

Add service validation and tests and include the SELinux policy and
context files required for libvirt-managed guests.

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit 86d76b0)
They were introduced long ago to fight the problem of "dead"
connections, but:

* it breaks on live, but idle connections as Talos: server-side drops the
  connection as it goes above the server-side budget of keepalives
* it applies only to the connection to the endpoint, not to the actual
  connection to the node (when going via proxying), or to the connection
  e.g. to Omni if using against Talos cluster behind Omni
* I don't see problems in my smoke tests today - connections are closed
  gracefully, and the client sees it
* Talos integration tests were fine without it always (when using direct
  API calls)

The first point is the real issue: image pull process might take a while
for images first created by the Image Factory, and the Talos API will
sit idle while waiting for the image to start pulling, while this
aggressive keep-alive actually kills the perfectly valid API call by
blowing up the server-side budget.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 4f7f5c2)
Update multipath notes.

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit f25b4a3)
The etcd snapshot upload truncated the snapshot file in place, and removed it when the upload failed. The etcd recovery reads that same file, and it runs after the bootstrap API has already returned success. This way, an upload repeated during a running recovery cut the snapshot short and left a partial etcd data directory behind, and every bootstrap after that got rejected.

Write the upload to a temporary file next to the snapshot and move it into place only once it is complete. A running recovery keeps reading the snapshot it started with, and a failed upload removes only its own temporary file.

Signed-off-by: Utku Ozdemir <utku.ozdemir@siderolabs.com>
(cherry picked from commit 48fe469)
Aligns the filter enablement/disablement behavior with the talosctl
dashboard resource browser (F3). That is, for the log filter page:
- Pressing `/` opens the filter input
- When the input is opened, it can be hidden and kept applied (enabled)
  by pressing `Enter`.
- When the filter is enabled, it can be disabled by re-opening the
  filter input (press `/`), and then pressing `Esc`.

Also documents the filter option in the header "Logs" horizontal line
(similar to the resource view).

Signed-off-by: Maja Bojarska <maja.bojarska@siderolabs.com>
(cherry picked from commit ba2d9a7)
Bump kubernetes to 1.37.0

See https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.37.md

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit abff95d)
Talos `/etc` is a bind mount, so we need to explicitly mount it up for
hostns, otherwise `EtcFileConfig` files would be missed.

This means we can drop the etc seeding.

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit 0179b80)
OpenFile with the full mode (setuid/setgid/sticky) can fail inside
the chroot/imager extraction path. Apply only the permission bits at
creation and let the subsequent Chmod set the special bits.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit 770e5cd)
The boot timeout was evaluated before the syncer switch, which clears
timeSynced when it restarts the syncer on an NTS change. A timeout that
fired first is discarded, and on a boot nothing reconciles this controller
again, so the node never reports time as synced and etcd never starts.

Signed-off-by: Sacha Weatherstone <sachaw100@hotmail.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit b46c53e)
SPD5118 enables temperature monitoring on DDR5 DIMMs.

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
(cherry picked from commit ea5484b)
Rekor 1.5.4 transitively drops the vulnerable
golang.org/x/crypto/openpgp usage, so GO-2026-5932 no longer needs
suppression. Refresh GO-2026-4736 TTL and clean up indirect
dependencies (go-openapi, relic v8, prometheus, google cloud libs)
and remove unused blang/semver.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit 1b1905a)
`worker()` pre-initialized `.machine.registries.mirrors` to an empty
map before calling `generateRegistryConfigs`, which reassigns the whole
`RegistriesConfig` on legacy contracts and leaves it untouched on
multi-doc ones. The two contract predicates are disjoint
(`KubernetesAlternateImageRegistries` covers only v1.2,
`MultidocNetworkConfigSupported` starts after v1.11), so the block never
contributed a mirror — it only left a non-nil empty map behind.

The commented encoder's `isEmpty` falls back to `reflect.Value.IsZero()`
for structs, which is false for a struct holding a non-nil empty map, so
`talosctl gen config` rendered a spurious `registries: {}` in
worker.yaml while controlplane.yaml, which has no such block, stayed
clean. `--with-docs=false --with-examples=false` hid it because plain
`yaml.Marshal` recurses into the struct and treats it as zero.

Closes siderolabs#14161

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit 083e7f9)
Fixes issue siderolabs#14164

Based on siderolabs@a705a38

63bd62c (cherry-picked to release-1.14 as 7ac3cad), introduces
RTMGRP_IPV6_ROUTE to the controller's RtNetlink watcher, which triggers
the controller's wake-ups.

As reported in pull siderolabs#14085
(siderolabs#14085), before subscribing to
RTMGRP_IPV6_ROUTE, deleting an IPv6 route out-of-band (not through Talos config documents), would leave
the actual route missing until the subsequent controller wake-up. This
however, combined with how Linux implicitly handles the scope field for
the IPv6 family, created an unwanted side effect, resulting in
the controller endlessly churning IPv6 route creation. This churn rate
waas capped only by the RateLimitedTrigger, which is using the default
configuration limits of 10 events/sec (with a burst of 5). This
perfectly matches the observed behavior of IPv6 routes reconciling every 100ms.

Now for how the kernel handles route scope in the IPv6 family. The kernel accepts any scope on RTM_NEWROUTE, regardless of family type.
However, the route scope is an IPv4-only concept, and this field is
dropped when an IPv6 route is being stored into the forwarding table
(FIB). The IPv6 FIB (fib6_info struct) doesn't even have an equivalent scope field.

Then, when we read the routes back in the RouteSpecController, with the
intent of comparing the actual route's scope against the desired one (as
defined by the RouteSpec documents), the kernel always fills the returned route's scope with RT_SCOPE_UNIVERSE (nethelpers.ScopeGlobal), in
rt6_fill_node(). Then, if the IPv6 route's desired scope is not set to ScopeGlobal, the actual route is considered out of sync, and the controller writes the route. Writing the IPv6 route causes a RTMGRP_IPV6_ROUTE event to be emitted, our RtNetlink watcher is triggered, which wakes our controller, which leads to the same reconciliation, which completes the cycle and results in the endless IPv6 route creation loop.

To mitigate the above, we must only assert the scope for non-IPv6 routes.

Co-authored-by: Sacha Trémoureux <sacha@tremoureux.fr>
Signed-off-by: Maja Bojarska <maja.bojarska@siderolabs.com>
(cherry picked from commit f7065d3)
Allow host extension services to run bounded commands before graceful
node teardown while their dependencies and D-Bus are still available.
This prevents surviving child processes from blocking EPHEMERAL teardown
without changing API stop or restart semantics.

Run hooks for reboot, reset, shutdown, staged upgrade, and upgrade. Skip
forced and maintenance paths where graceful cleanup is unavailable.

Signed-off-by: Noel Georgi <git@frezbo.dev>
(cherry picked from commit bfb8dfc)
ConfigStatus.Version only feeds the kube-apiserver static pod, through the
`talos.dev/config-file-version` annotation. Mixing the SchedulerConfig
resource version into it meant every scheduler change rewrote the
kube-apiserver manifest, so the scheduler phase of `talosctl upgrade-k8s`
restarted the apiserver too. That phase watches `k8s-app = kube-scheduler`
only, so it moved on to the next control plane node while the apiserver was
still starting, and all apiservers could end up unready at once.

The scheduler pod carries its own SchedulerConfig version in
`talos.dev/config-version`, so it still restarts when its config changes.

Closes siderolabs#14152

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
(cherry picked from commit a8c09fb)
Reduce the noise.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 6f7b08a)
With this fix, it now looks as expected:

```
lrwxrwxrwx    1 root     root            17 Aug 31 14:58 libmount.so -> libmount.so.1.1.0
lrwxrwxrwx    1 root     root            17 Aug 31 14:58 libmount.so.1 -> libmount.so.1.1.0
-rwxr-xr-x    1 root     root        501904 Aug 31 14:58 libmount.so.1.1.0
```

Previously all three files were copies of the same file due to the way
Dockerfile `COPY` directive works with globs.

Copy the whole directory instead.

The copies were compressed away with the squashfs, but still this should
be more clean and proper.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit e434671)
See https://github.com/cosi-project/runtime/releases/tag/v1.16.3

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 6b1d184)
Protect some META keys which are completely owned by Talos itself to be
not writeable via the API.

Also block writes for zero value, as it used internally in the META
format and it will provide inconsistent output.

Add integration tests.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit d5f53ed)
Increase parallelism to 8 instances, and reduce a bit the time race
detector sleeps after the test finishes (which is the price paid for
each test package, and we have many).

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit d970ebc)
The output to tview might be re-processed by tview for its own color
tags, so ensure any input data is escaped before drawn into tview.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
(cherry picked from commit 6ee4612)
Comment thread hack/release.toml Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
pre_release = false

@shanduur shanduur added integration/aws-arm64 Run AWS integration tests on ARM64 integration/aws-nvidia Run AWS NVIDIA integration tests (all drivers, variants, architectures) integration/gcp Run GCP integration tests integration/misc-0 Run misc-0 integration tests integration/misc-4 Run misc-4 integration tests integration/qemu-enforcing Run QEMU integration tests on enforcing variant integration/provision-3 Run provision integration tests for track 3 (maintenance API basic, maintenance API + SideroLink) integration/trusted-boot-disk-image Run trusted-boot integration tests on disk-image variant integration/qemu-md-boot Run QEMU integration tests on an MD RAID1 boot array and removed integration/release-gate Run all release-gate integration tests integration/aws-arm64 Run AWS integration tests on ARM64 integration/aws-nvidia Run AWS NVIDIA integration tests (all drivers, variants, architectures) integration/gcp Run GCP integration tests integration/misc-0 Run misc-0 integration tests integration/misc-4 Run misc-4 integration tests integration/qemu-enforcing Run QEMU integration tests on enforcing variant integration/provision-3 Run provision integration tests for track 3 (maintenance API basic, maintenance API + SideroLink) integration/trusted-boot-disk-image Run trusted-boot integration tests on disk-image variant integration/qemu-md-boot Run QEMU integration tests on an MD RAID1 boot array labels Sep 2, 2026
Mark release from "prerelease" to "stable"

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
@shanduur

shanduur commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

/m

@talos-bot
talos-bot merged commit ff772d6 into siderolabs:release-1.14 Sep 3, 2026
70 checks passed
@github-project-automation github-project-automation Bot moved this from Approved to Done in Planning Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

10 participants