为 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 的连接,以使用新的证书重新连接。