wordpress站群模板,百度百家号怎么赚钱,优化方案官网,网站正在建设中 免费kubeadm拉起的k8s集群证书过期的做法 这个是很久之前遇到的了#xff0c;今天有空#xff08;心血来潮#xff09;就都回忆回忆写在这里为爱发光#xff0c;部分内容来自arch先生#xff08;死党#xff09;的帮助。有时候有很多部门提了建k8s的需求#xff0c;有些是临… kubeadm拉起的k8s集群证书过期的做法 这个是很久之前遇到的了今天有空心血来潮就都回忆回忆写在这里为爱发光部分内容来自arch先生死党的帮助。有时候有很多部门提了建k8s的需求有些是临时的有些没有说具体用多久但是某天他们和你说集群坏了这时候你上去一看证书过期了这里又有两种情况我们分别说明集群还活着集群已归西1、备份数据2、报错内容及分析3、生成证书4、证书内容合并5、证书替换6、证书生效 这个是很久之前遇到的了今天有空心血来潮就都回忆回忆写在这里为爱发光部分内容来自arch先生死党的帮助。
有时候有很多部门提了建k8s的需求有些是临时的有些没有说具体用多久但是某天他们和你说集群坏了这时候你上去一看证书过期了这里又有两种情况我们分别说明
集群还活着 集群已归西麻烦事儿
集群还活着
#查看证书过期时间
kubeadm certs check-expiration#如果过期就更新
kubeadm certs renew all#更新完证书再次查看
kubeadm certs check-expiration#更新完证书后还需要重启api-server,controller-manager,scheduler,etcd#看看有没有这个文件
ll /etc/crictl.yaml#没有就主动生成
echo runtime-endpoint: unix:///run/containerd/containerd.sock \| tee /etc/crictl.yamlcontainerd执行脚本更新相关服务
podscrictl pods --namespace kube-system --state READY
for component in kube-apiserver kube-controller-manager kube-scheduler etcd; doecho date %DT%T Restart $component$pods | grep $component | awk {print crictl stopp $1 | sh}sleep 5echo ---------------------------------------
done使用kubectl获取集群资源看是否正常。
集群已归西
此时集群无法连接、无法管理甚至无法启动
1、备份数据
mkdir ~/recoverysudo rsync -av /etc/kubernetes/ ~/recovery/etc-kubernetes/sudo rsync -av /var/lib/etcd/ ~/recovery/var-lib-etcd/sudo rsync -av /var/lib/kubelet/ ~/recovery/var-lib-kubelet/2、报错内容及分析
journalctl -u kubelet.service
kubelet[2447]: E0923 bootstrap.go:265] part of the existing bootstrap client certificate in /etc/kubernetes/kubelet.conf is expired: xxxxxxxxx显而易见kubelet 使用的证书过期了
查看 /etc/kubernetes/kubelet.conf 内容看它使用的证书文件路径
users:
- name: system:node:xxxxuser:client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pemclient-key: /var/lib/kubelet/pki/kubelet-client-current.pem接着进入 /var/lib/kubelet/pki kubelet 的证书、私钥都在这里而且还有一个 kubelet.conf 引用的 pem 文件
.crt .key .pem
接着解析 kubelet.crt 内容
openssl x509 -in kubelet/pki/kubelet.crt -noout -textCertificate:Signature Algorithm: sha256WithRSAEncryptionIssuer: CNkubernetesValidityNot Before: Jan 6 15:53:54 2022 GMTNot After : Jan 6 15:53:54 2023 GMTSubject: Osystem:nodes, CNsystem:node:vm-m1Subject Public Key Info:Public Key Algorithm: rsaEncryptionX509v3 extensions:X509v3 Subject Alternative Name:DNS:vm-m1主机名是 vm-m1被 CN 和 DNS 用到Subject 格式 Osystem:nodes, CNsystem:node:${主机名}
DNS 格式 ${主机名}3、生成证书
由于过期的是 kubelet 使用的证书而 ca 没过期因此基于已有 ca 生成证书
node_namevm-m1
#生成 EC 私钥 (P-256 椭圆曲线)
openssl ecparam -genkey -name prime256v1 -noout -out kubelet.key#创建证书签署请求 (CSR)
openssl req -new -key kubelet.key -out kubelet.csr -subj /Osystem:nodes/CNsystem:node:${node_name}#引用已有 ca生成 crt 证书
openssl x509 -req -in kubelet.csr \-CA /etc/kubernetes/pki/ca.crt \-CAkey /etc/kubernetes/pki/ca.key \-CAcreateserial \-out kubelet.crt \-days 365 \-extensions v3_req \-extfile (cat EOF
[ v3_req ]
keyUsage critical, digitalSignature, keyEncipherment
extendedKeyUsage clientAuth
subjectAltName alt_names[ alt_names ]
DNS.1 ${node_name}
EOF
)4、证书内容合并
date_time ( d a t e c a t k u b e l e t . c r t k u b e l e t − c l i e n t − (date %F-%H-%M-%S) cat kubelet.crt kubelet-client- (datecatkubelet.crtkubelet−client−{date_time}.pem cat kubelet.key kubelet-client-${date_time}.pem
5、证书替换
systemctl stop kubelet.servicecp -vf kubelet.crt kubelet.key /var/lib/kubelet/pki/cd /var/lib/kubelet/pki/ln -sf /var/lib/kubelet/pki/kubelet-client-${date_time}.pem kubelet-client-current.pem systemctl start kubelet.service6、证书生效
当然这个场景下也得同步更新其他组件的证书
kubeadm certs renew all接着刷新各个组件使用的证书更建议直接 reboot 刷新