自动轮换流程
1. 证书即将过期时(默认剩余时间 < 30% 有效期),kubelet 自动生成新 CSR。
2. 新 CSR 提交到 API Server,等待审批。
3. 审批通过后,kubelet 获取新证书并替换旧证书。
4. 新旧证书并行使用一段时间,确保服务不中断。
默认的自动审批 ClusterRole
ClusterRole 说明
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient**
    用于自动审批 kubelet 客户端证书(如节点注册证书)。
system:certificates.k8s.io:certificatesigningrequests:selfnodeserver**
    用于自动审批 kubelet 服务端证书(如 kubelet 服务端 TLS 证书)。
查看默认的自动审批 ClusterRole
kubectl get clusterrole | grep -E 'selfnodeclient|selfnodeserver'
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient   2023-03-01T16:54:22Z
自动审批的 ClusterRoleBinding
查看 ClusterRoleBinding
自动审批通常通过将 ClusterRole 绑定到 节点组(system:nodes)来实现
kubectl get clusterrolebinding -o custom-columns=NAME:.metadata.name,ROLE:.roleRef.name,SUBJECT:.subjects[0].name | grep -E 'selfnodeclient|selfnodeserver'
kubeadm:node-autoapprove-certificate-rotation          system:certificates.k8s.io:certificatesigningrequests:selfnodeclient   system:nodes
验证具体绑定规则
kubectl describe clusterrolebinding kubeadm:node-autoapprove-certificate-rotation
Name:         kubeadm:node-autoapprove-certificate-rotation
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
Subjects:
  Kind   Name          Namespace
  ----   ----          ---------
  Group  system:nodes  
服务端证书自动审批
启用配置
kubectl create clusterrolebinding auto-approve-node-server-csr \
  --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeserver \
  --group=system:nodes
验证所有配置
kubectl get clusterrolebinding -o custom-columns=NAME:.metadata.name,ROLE:.roleRef.name,SUBJECT:.subjects[0].name | grep -E 'selfnodeclient|selfnodeserver'
kubeadm:node-autoapprove-certificate-rotation          system:certificates.k8s.io:certificatesigningrequests:selfnodeclient   system:nodes
auto-approve-node-server-csr                  system:certificates.k8s.io:certificatesigningrequests:selfnodeserver  system:nodes
kubelet 配置
/var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
rotateCertificates: true  # 启用证书自动轮换
serverTLSBootstrap: true  # 允许 kubelet 启动时自动申请证书
查看证书有效期
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet.crt -noout -dates
手动审批
查看证书申请状态
kubectl get csr -A | grep Pending
手动审批
/usr/local/bin/kubectl get csr|grep Pen| awk '{print $1}'|xargs /usr/local/bin/kubectl certificate approve