使用 kubeadm
更新所有证书
您可以使用以下命令来更新集群中的所有证书,包括 kubelet 证书:
sudo kubeadm certs renew all --v=5
或者,对于较旧版本的 kubeadm
,可以使用:
sudo kubeadm alpha certs renew all --v=5
手动更新 kubelet 证书
如果您只需要更新 kubelet 证书,可以手动进行操作。以下是详细步骤:
1. 删除旧证书
首先,删除旧的 kubelet 证书(线上环境需要备份,移除流量):
sudo rm /var/lib/kubelet/pki/kubelet-client-current.pem
sudo rm /var/lib/kubelet/pki/kubelet-client-*.pem
2. 生成新的私钥和 CSR
生成新的私钥和证书签名请求 (CSR):
openssl genrsa -out /var/lib/kubelet/pki/kubelet-client.key 2048
openssl req -new -key /var/lib/kubelet/pki/kubelet-client.key -out /var/lib/kubelet/pki/kubelet-client.csr -subj "/CN=system:node:<node-name>/O=system:nodes"
3. 使用 Kubernetes CA 签署新的证书
使用 Kubernetes 的 CA 签署新的证书:
openssl x509 -req -in /var/lib/kubelet/pki/kubelet-client.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out /var/lib/kubelet/pki/kubelet-client-current.pem -days 36500
4. 重新启动 kubelet
重新启动 kubelet 服务以使其使用新的证书:
sudo systemctl restart kubelet
使用 Kubernetes API 服务器的证书签发功能
如果您有权限访问 Kubernetes API 服务器,可以通过 API 服务器的证书签发功能来生成新的 kubelet 证书。
1. 生成新的私钥和 CSR
生成新的私钥和证书签名请求 (CSR):
openssl genrsa -out /var/lib/kubelet/pki/kubelet-client.key 2048
openssl req -new -key /var/lib/kubelet/pki/kubelet-client.key -out /var/lib/kubelet/pki/kubelet-client.csr -subj "/CN=system:node:<node-name>/O=system:nodes"
2. 创建一个 Kubernetes CSR 对象
创建一个 Kubernetes CSR 对象,并提交:
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: <node-name>-csr
spec:
groups:
- system:authenticated
request: $(cat /var/lib/kubelet/pki/kubelet-client.csr | base64 | tr -d '\n')
usages:
- digital signature
- key encipherment
- client auth
保存为 <csr-file>.yaml
,然后应用:
kubectl apply -f <csr-file>.yaml
kubectl certificate approve <node-name>-csr
3. 获取签发的证书并保存
获取签发的证书并保存:
kubectl get csr <node-name>-csr -o jsonpath='{.status.certificate}' | base64 --decode > /var/lib/kubelet/pki/kubelet-client-current.pem
4. 重新启动 kubelet
重新启动 kubelet 服务:
sudo systemctl restart kubelet