125 Commits

Author SHA1 Message Date
Andrey Smirnov
cc2be213a8
fix: drop explicit platform matcher
The containerd code path for the image pull via CRI doesn't set one
excplitily, and relies on implicit default of `client.Pull` API to pull
in the default platform matcher.

See also #13222

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-04-30 15:33:00 +04:00
Noel Georgi
e3e8f01ca6
chore: bump tools
Bump tools

Signed-off-by: Noel Georgi <git@frezbo.dev>
2026-04-14 21:38:23 +05:30
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
13d6b4a03c
fix: trim down cosign dependencies
Trade some imports, bump some modules, net result is killing lots of
transitive dependencies which were getting into the build.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-16 22:53:50 +04:00
Andrey Smirnov
ee53a18c8b
fix: stop pulling wrong platform for images
Attempt to fix intermittent issue with images being pulled with the
wrong platform for multi-platform images.

The Claude did the analysis, and I think the root cause is that the
`DefaultSpec()` we used causes the match to include `variant` which is
e.g. `v8` for arm64, while if the image doesn't declare the exact
variant, it might skip filtering and pick up the first layer which is
amd64.

It is still not clear why exactly it is intermittent this way.

But this change aligns it more closely with the way containerd pulls, so
should be good to go.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-03-10 20:26:26 +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
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
Andrey Smirnov
743c3b94b9
fix: use correct containerd import path
Use `/v2` import path, otherwise we pull in `containerd` v1.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-20 15:48:54 +04:00
Andrey Smirnov
f2dd08594e
feat: report image pull progress in the console
This reports image pull progress in the console for images pulled by
Talos:

* etcd
* kubelet
* installer

This work was mostly done by @laurazard, I just wrapped it for the
console with Laura's help. (see #12932)

Co-authored-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2026-01-19 18:00:13 +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
6063fbf912
feat: update dependencies
Many small changes, linting fixes, migration to moby/moby client
package.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-11-14 14:49:44 +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
Andrey Smirnov
e9b016f809
fix: use strict platform match when pulling images
It only applies to Talos pulling images, not CRI-initiated pulls.

This more of an experiment to fight a random issue when a wrong platform
image is pulled (specifically on arm64 platform accidentally pulling
amd64 image).

Co-authored-by: Laura Brehm <laurabrehm@hey.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-11-07 20:10:06 +04:00
Andrey Smirnov
ab847310ef
fix: provide refreshing CA pool (resolvers)
When a registry has _some_ TLS config included, the refreshing CA pool
was overwritten with the result returned from the config provider.

Ensure that is is restored back to the default value (unless explicitly
set by the provider if the registry CA is set).

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-09-29 13:49:44 +04:00
Mateusz Urbanek
2120904ec5
feat: create detached tmpfs
Fixes #10159

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-09-15 13:00:18 +02:00
Andrey Smirnov
1f1f781060
fix: add limited retries for not found images
Fixes #1269

This might help with some edge cases, even though I couldn't reproduce
it myself no matter how I tried to block/unblock DNS.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-07-02 18:53:22 +04:00
Andrey Smirnov
7f0300f108
feat: update dependencies, Kubernetes 1.34.0-alpha.2
Bump all dependencies, many small changes due to new golangci-lint
version.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-06-30 19:05:22 +04:00
Andrey Smirnov
44a1fc3b78
fix: treat context canceled as expected error on image pull
The containerd pull process might internally generate context canceled
error while our "external" `ctx` is not canceled.

Don't treat context canceled as non-retriable, as `retry` package stops
retrying when the outer `ctx` is canceled, so we don't need to handle it
in any specific way.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-06-27 20:46:59 +04:00
Andrey Smirnov
372c62b728
fix: handle override path for registry mirrors correctly
See https://github.com/siderolabs/talos/discussions/10641

The problem is that `overridePath` config option should be per-endpoint,
not a global one.

As we can't easily change v1alpha1 config, change the interface instead,
and update the controller which generates final registry config to
use per-endpoint setting.

Ensure that `registryd` endpoint never uses `overridePath`.

E.g., with this PR:

```toml
[host]
  [host.'http://127.0.0.1:3172']
    capabilities = ['pull', 'resolve']
  [host.'http://172.20.0.1:5006/v2/']
    capabilities = ['pull', 'resolve']
    override_path = true
```

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-04-07 14:33:38 +04:00
Andrey Smirnov
063fca6e00
fix: containerd auth hostname in the config
A special case, for `docker.io`, use `registry-1.docker.io`.

Fixes #10617

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-04-02 17:36:53 +04:00
Andrey Smirnov
c9667813d2
chore: remove containerd importer
This is not used for quite some time now, it was used previously to
import tarballs of apid and other services images.

We are not using it anymore.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-02-03 17:10:11 +04:00
Dmitriy Matrenichev
ccc5a8d34c
chore: split config.Registry into the separate resource
Required for #9614

Closes #9766

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-11-27 19:58:08 +03:00
Dmitriy Matrenichev
177df62a0e
fix: small logrus fixes
Ensure correct logrus setup.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-11-26 21:32:52 +03:00
Andrey Smirnov
30f8b5a9f7
fix: registry mirror fallback handling
Fixes #9613

This has two changes:

* adjust Talos registry resolver to match containerd (CRI) resolver: use
  by default upstream as a fallback
* add a machine config option to skip upstream as a fallback, and adjust
  CRI configuration accordingly

See https://github.com/containerd/containerd/blob/main/docs/hosts.md#registry-configuration---examples
for details on CRI's `hosts.toml`.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2024-11-14 20:38:36 +04:00
Andrey Smirnov
b379506259
fix: use more correct condition to skip generating hosts files
After a fix a while ago, the condition was hard to understand - but we
should skip this block as long as there's no TLS config, which might
mean either being nil or having default values.

I found this while debugging #9594, but it doesn't change anything.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2024-10-30 14:48:30 +04:00
Andrey Smirnov
908fd8789c
feat: support cgroup deep analysis in talosctl
The new command `talosctl cgroups` fetches cgroups snapshot from the
machine, parses it fully, enhances with additional information (e.g.
resolves pod names), and presents a customizable view of cgroups
configuration (e.g. limits) and current consumption.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2024-09-30 18:57:12 +04:00
Dmitriy Matrenichev
45cc8688a1
chore: replace if blocks with min/max functions
Simplify code where possible.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-08-16 10:40:44 +03:00
Andrey Smirnov
3f2058aba2
fix: update containerd configuration and settings
Provide `XDG_RUNTIME_DIR` environment variable, this specifically fixes
the `kubectl exec` action when `/tmp` is filled up.

Update containerd configuration to version 3 and fix it up.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
Signed-off-by: Noel Georgi <git@frezbo.dev>
2024-07-31 19:15:19 +04:00
Dmitriy Matrenichev
dad9c40c73
chore: simplify code
- replace `interface{}` with `any` using `gofmt -r 'interface{} -> any -w'`
- replace `a = []T{}` with `var a []T` where possible.
- replace `a = []T{}` with `a = make([]T, 0, len(b))` where possible.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-07-08 18:14:00 +03:00
Andrey Smirnov
0359c8537c
chore: unify toml packages being used
Drop BurntSushi one, and use /v2 of pelletier package.
There is indirect use of v1 which should hopefully go away once we move
away from sonobouy.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2024-05-29 21:22:56 +04:00
Andrey Smirnov
c2b19dcb97
chore: move to containerd 2.0 API
Lots of module moves/renames.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2024-05-24 21:48:55 +04:00
Andrey Smirnov
1d29111d43
chore: update Go to 1.22.3
Also bump dependencies.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2024-05-08 14:59:41 +04:00
Dmitriy Matrenichev
19f15a840c
chore: bump golangci-lint to 1.57.0
Fix all discovered issues.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-03-21 01:06:53 +03:00
Dmitriy Matrenichev
fa3b933705
chore: replace fmt.Errorf with errors.New where possible
This time use `eg` from `x/tools` repo tool to do this.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-02-14 17:39:30 +03:00
Dmitriy Matrenichev
5324d39167
chore: bump stuff
Also fix .golangci.yml file.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-02-09 19:19:25 +03:00
Andrey Smirnov
9dfae8467d
chore: update dependencies
Containerd 1.7.7, Linux 6.1.58.

Fixes #7859

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2023-10-17 17:41:38 +04:00
Andrey Smirnov
2b548ad0d9
feat: update containerd to 1.7.x
Also update Linux and other pkgs.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2023-09-28 16:33:57 +04:00
Andrey Smirnov
3c9f7a7de6
chore: re-enable nolintlint and typecheck linters
Drop startup/rand.go, as since Go 1.20 `rand.Seed` is done
automatically.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2023-08-25 01:05:41 +04:00
Andrey Smirnov
8017afb107
feat: implement CRI image management and pre-pull on K8s upgrade
Fixes #6391

Implement a set of APIs and commands to manage images in the CRI, and
pre-pull images on Kubernetes upgrades.

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2023-07-11 19:25:10 +04:00
Andrey Smirnov
dc6764871c
refactor: move around config interfaces, make RawV1Alpha1 typed
See #7230

Refactor more config interfaces, move config accessor interfaces
to different package to break the dependency loop.

Make `.RawV1Alpha1()` method typed to avoid type assertions everywhere.

No functional changes.

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2023-05-23 22:08:58 +04:00
Dmitriy Matrenichev
61cad86731
chore: bump deps
- github.com/containerd/typeurl to v2.1.1
- github.com/aws/aws-sdk-go to v1.44.264
- alpine to 3.18.0
- node to 20.2.0-alpine
- github.com/containernetworking/plugins to v1.3.0
- github.com/docker/docker to v23.0.6+incompatible
- github.com/hetznercloud/hcloud-go to v1.45.1
- github.com/insomniacslk/dhcp to v0.0.0-20230516061539-49801966e6cb
- github.com/rivo/tview to v0.0.0-20230511053024-822bd067b165
- tools to v1.5.0-alpha.0-7-gd2dde48
- pkgs to v1.5.0-alpha.0-16-g7958db1

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2023-05-18 01:07:36 -04:00
Nico Berlee
0af8fe2fb5
feat: netstat pod support
talosctl netstat -k show all host and non-hostnetwork pods sockets/connections.
talosctl netstat namespace/pod shows sockets/connections of a specific pod +
autocompletes in the shell.

Signed-off-by: Nico Berlee <nico.berlee@on2it.net>
Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2023-03-30 23:39:38 +04:00
Dmitriy Matrenichev
ebc92f3c1d
chore: add container id to talosctl -k containers and talosctl -k logs
This PR adds first 12 symbols from container ID and adds them to `talosctl -k containers` each container output.
That way we can ensure that we get the logs from proper container even if there is a newer one.

Closes #6886

Co-authored-by: Utku Ozdemir <utku.ozdemir@siderolabs.com>
Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2023-03-07 13:20:44 +03:00
Andrey Smirnov
6e8f13529c
fix: add support for a fallback '*' mirror configuration
Talos always supported that, but CRI config lacked support for it.

Now with recent containerd the new `_default` host is used as a
fallback, so this re-enables the support and updates the docs.

See https://github.com/containerd/containerd/pull/8065

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2023-02-16 23:12:13 +04:00
Andrey Smirnov
5b2960efff
fix: introduce 'overridePath' setting and fix Talos resolver
There was inconsistency in the way `/v2` was appended to registry
endpoint path between containerd (CRI) and Talos:

* Talos only appended `/v2` to empty paths
* containerd appended `/v2` if it's not the suffix already

Fix Talos to act same as containerd, and introduce a setting
`overridePath` which stops both Talos and `containerd` from appending
`/v2` (should be required with e.g. Harbor registry mirror).

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2022-12-05 12:50:53 +04:00
Andrey Smirnov
3866d0e334
feat: update Kubernetes to v1.26.0-beta.0
See https://github.com/kubernetes/kubernetes/releases/tag/v1.26.0-beta.0

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2022-11-11 15:06:34 +04:00
Andrey Smirnov
96aa9638f7
chore: rename talos-systems/talos to siderolabs/talos
There's a cyclic dependency on siderolink library which imports talos
machinery back. We will fix that after we get talos pushed under a new
name.

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2022-11-03 16:50:32 +04:00
Andrey Smirnov
343c55762e
chore: replace talos-systems Go modules with siderolabs
This the first step towards replacing all import paths to be based on
`siderolabs/` instead of `talos-systems/`.

All updates contain no functional changes, just refactorings to adapt to
the new path structure.

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2022-11-01 12:55:40 +04:00
Andrey Smirnov
d7edd0e2e6
refactor: use go-circular, go-kubeconfig, and go-tail
Remove Talos versions, use new extracted Go modules.

Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
2022-10-25 20:20:44 +04:00
Dmitriy Matrenichev
93e55b85f2
chore: bump golangci-lint to v1.50.0
I had to do several things:
- contextcheck now supports Go 1.18 generics, but I had to disable it because of this https://github.com/kkHAIKE/contextcheck/issues/9
- dupword produces to many false positives, so it's also disabled
- revive found all packages which didn't have a documentation comment before. And tehre is A LOT of them. I updated some of them, but gave up at some point and just added them to exclude rules for now.
- change lint-vulncheck to use `base` stage as base

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2022-10-20 18:33:19 +03:00