Skip to content

Commit ad05ff8

Browse files
committed
KEP-3257 (Cluster Trust Bundles): add a new signer
1 parent 9779ecf commit ad05ff8

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

content/en/docs/reference/access-authn-authz/certificate-signing-requests.md

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,15 +206,33 @@ Kubernetes provides built-in signers that each have a well-known `signerName`:
206206
of the `--cluster-signing-duration` option or, if specified, the `spec.expirationSeconds` field of the CSR object.
207207
1. CA bit allowed/disallowed - not allowed.
208208

209-
The kube-controller-manager implements [control plane signing](#signer-control-plane) for each of the built in
210-
signers. Failures for all of these are only reported in kube-controller-manager logs.
209+
1. `kubernetes.io/kube-apiserver-serving`: signs certificates that can be used to verify kube-apiserver serving
210+
certificates. Signing and approval are handled outside kube-controller-manager.
211+
- {{< feature-state feature_gate_name="ClusterTrustBundle" >}}
212+
1. Trust distribution: signed certificates are used by the kube-apiserver for TLS
213+
server authentication. The CA bundle is distributed using a ClusterTrustBundle object
214+
identifiable by the `kubernetes.io/kube-apiserver-serving` signer name.
215+
1. Permitted subjects - "Subject" itself is deprecated for TLS server authentication by RFC2818. However,
216+
it should still follow the same rules on DNS/IP {{< glossary_tooltip text="SANs" term_id="san" >}}
217+
from the "Permitted x509 extensions" section below.
218+
1. Permitted x509 extensions - honors subjectAltName and key usage extensions. At
219+
least one DNS or IP subjectAltName must be present. The SAN DNS/IP of the certificates
220+
must resolve/point to kube-apiserver's hostname/IP.
221+
1. Permitted key usages - ["key encipherment", "digital signature", "server auth"] or ["digital signature", "server auth"].
222+
1. Expiration/certificate lifetime - The recommended maximum lifetime is 30 days.
223+
1. CA bit allowed/disallowed - not recommended by the Kubernetes project.
211224

212225
{{< note >}}
213226
The `spec.expirationSeconds` field was added in Kubernetes v1.22. Earlier versions of Kubernetes do not honor this field.
214227
Kubernetes API servers prior to v1.22 will silently drop this field when the object is created.
215228
{{< /note >}}
216229

217-
Distribution of trust happens out of band for these signers. Any trust outside of those described above are strictly
230+
The kube-controller-manager implements [control plane signing](#signer-control-plane) for each of the built in
231+
signers except for `kubernetes.io/kube-apiserver-serving`. Failures for all of these are only reported in kube-controller-manager logs.
232+
Signing of certificates in the trust domain of the `kubernetes.io/kube-apiserver-serving` signer is in full control of
233+
the cluster administrator(s).
234+
235+
Any trust outside of the above described cases is strictly
218236
coincidental. For instance, some distributions may honor `kubernetes.io/legacy-unknown` as client certificates for the
219237
kube-apiserver, but this is not a standard.
220238
None of these usages are related to ServiceAccount token secrets `.data[ca.crt]` in any way. That CA bundle is only
@@ -623,4 +641,4 @@ kubectl config use-context myuser
623641
* For details of X.509 itself, refer to [RFC 5280](https://tools.ietf.org/html/rfc5280#section-3.1) section 3.1
624642
* For information on the syntax of PKCS#10 certificate signing requests, refer to [RFC 2986](https://tools.ietf.org/html/rfc2986)
625643
* Read about the ClusterTrustBundle API:
626-
* {{< page-api-reference kind="ClusterTrustBundle" >}}
644+
* {{< page-api-reference kind="ClusterTrustBundle" >}}

content/en/docs/reference/command-line-tools-reference/feature-gates/cluster-trust-bundle.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,9 @@ stages:
1010
defaultValue: false
1111
fromVersion: "1.27"
1212
---
13-
Enable ClusterTrustBundle objects and kubelet integration.
13+
Enable ClusterTrustBundle support, including kubelet integration. Also makes the Kubernetes
14+
controller manager publish a ClusterTrustBundle for the `kubernetes.io/kube-apiserver-serving`
15+
signer.
16+
In order to use the ClusterTrustBundle API in your cluster, you need to enable this feature gate
17+
and also [enable](/docs/tasks/administer-cluster/enable-disable-api/) the associated alpha API group
18+
using the `--runtime-config` command line argument to kube-apiserver.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
title: Subject Alternative Name
3+
id: san
4+
date: 2024-11-25
5+
full_link: https://datatracker.ietf.org/doc/html/rfc4985
6+
short_description: >
7+
An X.509 certificate extension to identify what hostname or IP address the certificate applies to.
8+
9+
aka:
10+
tags:
11+
- security
12+
---
13+
Subject Alternative Name is an {{< glossary_tooltip text="X.509 certificate" term_id="certificate" >}}
14+
extension that allows identities to be bound to the subject of the certificate.
15+
16+
<!--more-->
17+
The [standard](https://datatracker.ietf.org/doc/html/rfc4985) defines identities represented
18+
as an email address, a DNS name, an IP address or a Uniform Resource Identifier (URI).

0 commit comments

Comments
 (0)