Skip to content

Commit c12b524

Browse files
committed
docs: document Kubernetes service registry incompat with K8s 1.32
Fixes #9980 Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
1 parent a5660ed commit c12b524

7 files changed

Lines changed: 37 additions & 14 deletions

File tree

pkg/machinery/config/schemas/config.schema.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1753,9 +1753,9 @@
17531753
"kubernetes": {
17541754
"$ref": "#/$defs/v1alpha1.RegistryKubernetesConfig",
17551755
"title": "kubernetes",
1756-
"description": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\n",
1757-
"markdownDescription": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.",
1758-
"x-intellij-html-description": "\u003cp\u003eKubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\u003c/p\u003e\n"
1756+
"description": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\n\nThis feature is deprecated as it is not compatible with Kubernetes 1.32+.\nSee https://github.com/siderolabs/talos/issues/9980 for more information.\n",
1757+
"markdownDescription": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\n\nThis feature is deprecated as it is not compatible with Kubernetes 1.32+.\nSee https://github.com/siderolabs/talos/issues/9980 for more information.",
1758+
"x-intellij-html-description": "\u003cp\u003eKubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\u003c/p\u003e\n\n\u003cp\u003eThis feature is deprecated as it is not compatible with Kubernetes 1.32+.\nSee \u003ca href=\"https://github.com/siderolabs/talos/issues/9980\" target=\"_blank\"\u003ehttps://github.com/siderolabs/talos/issues/9980\u003c/a\u003e for more information.\u003c/p\u003e\n"
17591759
},
17601760
"service": {
17611761
"$ref": "#/$defs/v1alpha1.RegistryServiceConfig",

pkg/machinery/config/types/v1alpha1/v1alpha1_types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2413,6 +2413,9 @@ type DiscoveryRegistriesConfig struct {
24132413
// description: |
24142414
// Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information
24152415
// as annotations on the Node resources.
2416+
//
2417+
// This feature is deprecated as it is not compatible with Kubernetes 1.32+.
2418+
// See https://github.com/siderolabs/talos/issues/9980 for more information.
24162419
RegistryKubernetes RegistryKubernetesConfig `yaml:"kubernetes"`
24172420
// description: |
24182421
// Service registry is using an external service to push and pull information about cluster members.

pkg/machinery/config/types/v1alpha1/v1alpha1_types_doc.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

website/content/v1.10/reference/configuration/v1alpha1/config.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3830,7 +3830,7 @@ DiscoveryRegistriesConfig struct configures cluster membership discovery.
38303830

38313831
| Field | Type | Description | Value(s) |
38323832
|-------|------|-------------|----------|
3833-
|`kubernetes` |<a href="#Config.cluster.discovery.registries.kubernetes">RegistryKubernetesConfig</a> |<details><summary>Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information</summary>as annotations on the Node resources.</details> | |
3833+
|`kubernetes` |<a href="#Config.cluster.discovery.registries.kubernetes">RegistryKubernetesConfig</a> |<details><summary>Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information</summary>as annotations on the Node resources.<br /><br />This feature is deprecated as it is not compatible with Kubernetes 1.32+.<br />See https://github.com/siderolabs/talos/issues/9980 for more information.</details> | |
38343834
|`service` |<a href="#Config.cluster.discovery.registries.service">RegistryServiceConfig</a> |Service registry is using an external service to push and pull information about cluster members. | |
38353835

38363836

website/content/v1.10/schemas/config.schema.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1753,9 +1753,9 @@
17531753
"kubernetes": {
17541754
"$ref": "#/$defs/v1alpha1.RegistryKubernetesConfig",
17551755
"title": "kubernetes",
1756-
"description": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\n",
1757-
"markdownDescription": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.",
1758-
"x-intellij-html-description": "\u003cp\u003eKubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\u003c/p\u003e\n"
1756+
"description": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\n\nThis feature is deprecated as it is not compatible with Kubernetes 1.32+.\nSee https://github.com/siderolabs/talos/issues/9980 for more information.\n",
1757+
"markdownDescription": "Kubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\n\nThis feature is deprecated as it is not compatible with Kubernetes 1.32+.\nSee https://github.com/siderolabs/talos/issues/9980 for more information.",
1758+
"x-intellij-html-description": "\u003cp\u003eKubernetes registry uses Kubernetes API server to discover cluster members and stores additional information\nas annotations on the Node resources.\u003c/p\u003e\n\n\u003cp\u003eThis feature is deprecated as it is not compatible with Kubernetes 1.32+.\nSee \u003ca href=\"https://github.com/siderolabs/talos/issues/9980\" target=\"_blank\"\u003ehttps://github.com/siderolabs/talos/issues/9980\u003c/a\u003e for more information.\u003c/p\u003e\n"
17591759
},
17601760
"service": {
17611761
"$ref": "#/$defs/v1alpha1.RegistryServiceConfig",

website/content/v1.10/talos-guides/discovery.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Sidero Labs runs a public external registry service, which is enabled by default
2020
The Kubernetes registry service is disabled by default.
2121
The advantage of the external registry service is that it is not dependent on etcd, and thus can inform you of cluster membership even when Kubernetes is down.
2222

23+
> Note: Kubernetes registry is deprecated as it is not compatible with Kubernetes 1.32 and later versions in the default configuration.
24+
2325
## Video Walkthrough
2426

2527
To see a live demo of Cluster Discovery, see the video below:
@@ -46,6 +48,8 @@ Disabling all registries effectively disables member discovery.
4648
4749
> Note: An enabled discovery service is required for [KubeSpan]({{< relref "../talos-guides/network/kubespan/" >}}) to function correctly.
4850
51+
### Kubernetes Registry
52+
4953
The `Kubernetes` registry uses Kubernetes `Node` resource data and additional Talos annotations:
5054

5155
```sh
@@ -56,15 +60,21 @@ Annotations: cluster.talos.dev/node-id: Utoh3O0ZneV0kT2IUBrh7TgdouRcUW2yz
5660
...
5761
```
5862

63+
> Note: Starting with Kubernetes 1.32, the feature gate `AuthorizeNodeWithSelectors` enables additional authorization for `Node` resource read access via `system:node:*` role.
64+
> This prevents Talos Kubernetes registry from functioning correctly.
65+
> The workaround is to disable the feature gate on the API server, but it's not recommended as it disables also other important security protections.
66+
> For this reason, the Kubernetes registry is deprecated and disabled by default.
67+
68+
### Discovery Service Registry
69+
5970
The `Service` registry by default uses a public external Discovery Service to exchange encrypted information about cluster members.
6071

6172
> Note: Talos supports operations when Discovery Service is disabled, but some features will rely on Kubernetes API availability to discover
6273
> controlplane endpoints, so in case of a failure disabled Discovery Service makes troubleshooting much harder.
6374

64-
## Discovery Service
65-
6675
Sidero Labs maintains a public discovery service at `https://discovery.talos.dev/` whereby cluster members use a shared key that is globally unique to coordinate basic connection information (i.e. the set of possible "endpoints", or IP:port pairs).
6776
We call this data "affiliate data."
77+
This data is encrypted by Talos Linux before being sent to the discovery service, and it can only be decrypted by the cluster members.
6878

6979
> Note: If KubeSpan is enabled the data has the addition of the WireGuard public key.
7080

@@ -73,7 +83,7 @@ Each node submits its own data, plus the endpoints it sees from other peers, to
7383
The discovery service aggregates the data, deduplicates the endpoints, and sends updates to each connected peer.
7484
Each peer receives information back from the discovery service, decrypts it and uses it to drive KubeSpan and cluster discovery.
7585

76-
Data is stored in memory only.
86+
Data is stored in memory only (and snapshotted to disk in encrypted way to facilitate quick recovery on restarts).
7787
The cluster ID is used as a key to select the affiliates (so that different clusters see different affiliates).
7888

7989
To summarize, the discovery service knows the client version, cluster ID, the number of affiliates, some encrypted data for each affiliate, and a list of encrypted endpoints.

website/content/v1.9/talos-guides/discovery.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Sidero Labs runs a public external registry service, which is enabled by default
2020
The Kubernetes registry service is disabled by default.
2121
The advantage of the external registry service is that it is not dependent on etcd, and thus can inform you of cluster membership even when Kubernetes is down.
2222

23+
> Note: Kubernetes registry is deprecated as it is not compatible with Kubernetes 1.32 and later versions in the default configuration.
24+
2325
## Video Walkthrough
2426

2527
To see a live demo of Cluster Discovery, see the video below:
@@ -46,6 +48,8 @@ Disabling all registries effectively disables member discovery.
4648
4749
> Note: An enabled discovery service is required for [KubeSpan]({{< relref "../talos-guides/network/kubespan/" >}}) to function correctly.
4850
51+
### Kubernetes Registry
52+
4953
The `Kubernetes` registry uses Kubernetes `Node` resource data and additional Talos annotations:
5054

5155
```sh
@@ -56,15 +60,21 @@ Annotations: cluster.talos.dev/node-id: Utoh3O0ZneV0kT2IUBrh7TgdouRcUW2yz
5660
...
5761
```
5862

63+
> Note: Starting with Kubernetes 1.32, the feature gate `AuthorizeNodeWithSelectors` enables additional authorization for `Node` resource read access via `system:node:*` role.
64+
> This prevents Talos Kubernetes registry from functioning correctly.
65+
> The workaround is to disable the feature gate on the API server, but it's not recommended as it disables also other important security protections.
66+
> For this reason, the Kubernetes registry is deprecated and disabled by default.
67+
68+
### Discovery Service Registry
69+
5970
The `Service` registry by default uses a public external Discovery Service to exchange encrypted information about cluster members.
6071

6172
> Note: Talos supports operations when Discovery Service is disabled, but some features will rely on Kubernetes API availability to discover
6273
> controlplane endpoints, so in case of a failure disabled Discovery Service makes troubleshooting much harder.
6374

64-
## Discovery Service
65-
6675
Sidero Labs maintains a public discovery service at `https://discovery.talos.dev/` whereby cluster members use a shared key that is globally unique to coordinate basic connection information (i.e. the set of possible "endpoints", or IP:port pairs).
6776
We call this data "affiliate data."
77+
This data is encrypted by Talos Linux before being sent to the discovery service, and it can only be decrypted by the cluster members.
6878

6979
> Note: If KubeSpan is enabled the data has the addition of the WireGuard public key.
7080

@@ -73,7 +83,7 @@ Each node submits its own data, plus the endpoints it sees from other peers, to
7383
The discovery service aggregates the data, deduplicates the endpoints, and sends updates to each connected peer.
7484
Each peer receives information back from the discovery service, decrypts it and uses it to drive KubeSpan and cluster discovery.
7585

76-
Data is stored in memory only.
86+
Data is stored in memory only (and snapshotted to disk in encrypted way to facilitate quick recovery on restarts).
7787
The cluster ID is used as a key to select the affiliates (so that different clusters see different affiliates).
7888

7989
To summarize, the discovery service knows the client version, cluster ID, the number of affiliates, some encrypted data for each affiliate, and a list of encrypted endpoints.

0 commit comments

Comments
 (0)