配置 Kubelet 的证书轮换

本页介绍如何为 kubelet 启用和配置证书轮换。

特性状态: Kubernetes v1.19 [stable]

准备工作

  • 要求 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)