自动化 Kubernetes 证书轮换
本指南帮助您在 中安装、理解和操作 Kubernetes 证书轮换器,以实现集群内 Kubernetes 证书的自动轮换。
安装
请参见 Cluster Plugin 获取安装说明。
注意:
当前支持:
- 本地部署集群
- DCS 集群
工作原理
该插件负责以下证书的自动轮换。
轮换流程
-
加载证书信息
首先收集所有目标证书的元数据。由于这些证书存储在主机的不同路径,需要从相应文件中读取内容。为此,会在目标节点创建一个临时 Pod,挂载证书目录,使 Pod 能读取信息。证书信息每天收集一次。证书详情(路径、过期时间)保存在 ConfigMap
cpaas-system/node-local-certs-<node-name>中。加密的 CA 证书存储在 Secretcpaas-system/kubernetes-ca中。 -
轮换触发条件
证书的
notBefore和notAfter字段表示有效期。当剩余有效期少于 20% 或 30 天时,触发轮换。 -
轮换队列
需要轮换的证书进入队列等待处理。轮换程序会评估近期的轮换活动和待处理任务的紧急程度,决定是否立即处理,以避免多个证书同时轮换导致集群健康问题。
-
生成新证书
轮换程序基于内部存储的 CA 信息生成新证书。轮换过程中会在目标节点创建临时 Pod,挂载必要的证书目录,以便受控地修改文件。
-
重启组件
需要重启的组件:
kube-apiserver:需要重启以加载新证书。重启时会重新生成其内部的 loopback 证书(有效期一年,仅内部使用,无法外部轮换)。kube-controller-manager:需要重启以重新加载 kubeconfig 文件。kube-scheduler:需要重启以重新加载 kubeconfig 文件。kubelet:需要重启以重新加载服务器证书。
重启方式: 在相应静态 Pod 的 YAML 文件中添加注解,触发 kubelet 重新创建 Pod。重启 kubelet 时,需挂载主机文件系统并设置
hostPID为 true,在容器内执行 "systemctl restart kubelet"。自动重载:
- Etcd 支持证书自动重载。
-
轮换时间节点
kubelet证书:在 61 天时轮换(证书有效期 91 天)- 控制平面证书:在 292 天时轮换(证书有效期 365 天)
运行注意事项
如果 kubelet 在轮换窗口期间处于异常状态,无法自动轮换证书,则需要手动轮换:
运维人员必须手动更新证书。
运行以下命令手动更新证书:
例如更新 kubelet.crt:
下载并准备 cert-renew 工具,运行:
可选地,下载 renew-all.sh 脚本以更新节点上的所有证书: