为 Kubelet 配置证书轮换
本页介绍如何为 kubelet 启用和配置证书轮换。
Kubernetes v1.19 [稳定]
开始之前
- 需要 Kubernetes 1.8.0 或更高版本
概述
kubelet 使用证书向 Kubernetes API 进行身份验证。默认情况下,这些证书的有效期为一年,因此不需要过于频繁地更新。
Kubernetes 包含 kubelet 证书轮换,它会在当前证书即将过期时自动生成新密钥并从 Kubernetes API 请求新证书。一旦新的证书可用,它将被用于对 Kubernetes API 的连接进行身份验证。
启用客户端证书轮换
kubelet
进程接受一个参数 --rotate-certificates
,该参数控制 kubelet 是否会在当前使用的证书即将过期时自动请求新证书。
kube-controller-manager
进程接受一个参数 --cluster-signing-duration
(在 1.19 之前是 --experimental-cluster-signing-duration
),该参数控制颁发证书的有效期。
了解证书轮换配置
当 kubelet 启动时,如果配置为自举(使用 --bootstrap-kubeconfig
标志),它将使用其初始证书连接到 Kubernetes API 并发出证书签名请求。您可以使用以下命令查看证书签名请求的状态
kubectl get csr
最初,来自节点上 kubelet 的证书签名请求的状态为 Pending
。如果证书签名请求满足特定条件,它将由控制器管理器自动批准,然后其状态将为 Approved
。接下来,控制器管理器将签署一个证书,该证书的有效期由 --cluster-signing-duration
参数指定,并且签名的证书将附加到证书签名请求。
kubelet 将从 Kubernetes API 检索已签名的证书并将其写入磁盘,位置由 --cert-dir
指定。然后,kubelet 将使用新的证书连接到 Kubernetes API。
随着签名证书的过期时间临近,kubelet 将使用 Kubernetes API 自动发出新的证书签名请求。这可能发生在证书剩余时间的 30% 到 10% 之间的任何时间点。同样,控制器管理器将自动批准证书请求并将已签名的证书附加到证书签名请求。kubelet 将从 Kubernetes API 检索新的已签名证书并将其写入磁盘。然后,它将更新其与 Kubernetes API 的连接,以使用新证书重新连接。