我已经运行 K8s 集群(v1.13.5)一年了,控制平面证书和 Kubelet 证书即将到期。我找到了一种轮换所有控制平面证书的方法,我想知道如何轮换 Kubelet 证书。有人可以帮助我了解如何轮换工作节点和主节点的 K 证书(如果需要)吗?这个 K8s 集群是使用 Kubespray 部署的。
1 回答
从 Kubernetes 版本 1.8.0 开始,提供了一个 beta 功能Certificate Rotation。
kubelet 使用证书对 Kubernetes API 进行身份验证。默认情况下,这些证书的颁发期限为一年,因此它们不需要过于频繁地更新。
Kubernetes 1.8 包含 kubelet 证书轮换,这是一个 beta 功能,当当前证书即将到期时,它将自动生成新密钥并从 Kubernetes API 请求新证书。一旦新证书可用,它将用于验证与 Kubernetes API 的连接。
这需要通过Feature Gates启用,因为这是一个 beta 功能。所以你需要添加
--feature-gates=RotateKubeletClientCertificate=true
当 kubelet 启动时,如果它被配置为引导(使用
--bootstrap-kubeconfig
标志),它将使用其初始证书连接到 Kubernetes API 并发出证书签名请求。您可以使用以下命令查看证书签名请求的状态:
kubectl get csr
最初,来自节点上 kubelet 的证书签名请求的状态为
Pending
. 如果证书签名请求符合特定条件,它将被控制器管理器自动批准,然后它的状态为Approved
. 接下来,控制器管理器将签署证书,在参数指定的持续时间内颁发--experimental-cluster-signing-duration
,并且签名的证书将附加到证书签名请求中。kubelet 将从 Kubernetes API 检索签名证书并将其写入磁盘,在
--cert-dir
. 然后 kubelet 将使用新证书连接到 Kubernetes API。随着签名证书到期的临近,kubelet 将使用 Kubernetes API 自动发出新的证书签名请求。同样,控制器管理器将自动批准证书请求并将签名证书附加到证书签名请求中。kubelet 将从 Kubernetes API 检索新的签名证书并将其写入磁盘。然后它将更新它与 Kubernetes API 的连接,以使用新证书重新连接。