Kubernetes 证书自动续期配置
对于已经安装的 Kubernetes 集群,可以通过配置 rotate-certificates
参数实现 kubelet 客户端证书的自动续期。以下是详细实现方法:
1. 确认当前 kubelet 配置
首先检查 kubelet 当前是否已启用证书自动续期:
ps -ef | grep kubelet | grep rotate-certificates
或者查看 kubelet 配置文件(通常位于 /var/lib/kubelet/config.yaml
或 /etc/kubernetes/kubelet.conf
):
grep rotateCertificates /var/lib/kubelet/config.yaml
2. 启用证书自动续期
对于 systemd 管理的 kubelet
- 编辑 kubelet 服务配置文件:
sudo vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- 在
ExecStart
命令中添加或修改以下参数:
--rotate-certificates=true \
--cert-dir=/var/lib/kubelet/pki \
--feature-gates=RotateKubeletServerCertificate=true
完整示例:
ExecStart=/usr/bin/kubelet \
$KUBELET_KUBECONFIG_ARGS \
$KUBELET_CONFIG_ARGS \
$KUBELET_KUBEADM_ARGS \
$KUBELET_EXTRA_ARGS \
--rotate-certificates=true \
--cert-dir=/var/lib/kubelet/pki \
--feature-gates=RotateKubeletServerCertificate=true
- 重新加载并重启 kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
对于 kubeadm 部署的集群
kubeadm 从 1.15 版本开始默认启用客户端证书自动续期,你只需确保:
- 检查 kubeadm 配置:
kubeadm config view | grep certificate
- 如果需要修改,可以导出配置:
kubeadm config print init-defaults > kubeadm-config.yaml
然后编辑该文件,确保有以下内容:
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
controllerManager:
extraArgs:
cluster-signing-duration: 87600h # 10年有效期
feature-gates: RotateKubeletServerCertificate=true
3. 验证自动续期功能
- 检查 kubelet 当前使用的证书:
ls -l /var/lib/kubelet/pki/
- 查看证书过期时间:
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates
- 观察证书续期日志:
journalctl -u kubelet -f | grep certificate
4. 其他相关配置
为了确保自动续期正常工作,还需要以下配置:
-
Controller Manager 配置:
- 确保 controller manager 启用了证书签名功能
- 相关参数:
--cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt --cluster-signing-key-file=/etc/kubernetes/pki/ca.key --feature-gates=RotateKubeletServerCertificate=true
-
RBAC 权限:
确保 system:node 组有更新证书的权限:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: auto-approve-renewals-for-nodes
subjects:
- kind: Group
name: system:nodes
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
apiGroup: rbac.authorization.k8s.io
5. 注意事项
- 自动续期仅适用于 kubelet 客户端证书(kubelet-client-current.pem)
- 服务器证书(kubelet.crt)需要额外配置
RotateKubeletServerCertificate
特性门控 - 主控制平面组件(apiserver、controller-manager、scheduler)的证书不适用此自动续期机制
- 证书续期依赖于集群的证书签名请求 (CSR) 审批机制正常工作
通过以上配置,kubelet 会在证书到期前自动创建新的证书签名请求,并由 Kubernetes 自动审批,实现无缝证书轮换。