配置 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:更新 kubelet 安全文件的引用 (a3ea9f4caf)