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

上次修改时间为 2022 年 4 月 23 日下午 2:32 PST:更新对 kubelet 安全文件的引用 (a3ea9f4caf)