昨天收到报警短信:集群中某node状态为notReady,由于是长期不用的,所以放到今天才有空处理,以下记录处理过程。
查看kubelet日志,发现不停的打印证书过期相关提示信息。
以下操作基于kubernetes集群版本:v1.6.6
kubelete 证书默认有效期一年
1.查看证书有效期,这里使用以前下载的cfssl-certinfo
curl -s -L -o /usr/local/bin/cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 chmod +x /usr/local/bin/cfssl-certinfo cfssl-certinfo -cert /etc/kubernetes/ssl/kubelet.crt
显示内容如下:
{ "subject": { "common_name": "test@1505813004", "names": [ "test@1505813004" ] }, "issuer": { "common_name": "test@1505813004", "names": [ "test@1505813004" ] }, "serial_number": "1", "sans": [ "test" ], "not_before": "2017-10-24T09:23:24Z", "not_after": "2018-10-24T09:23:24Z", "sigalg": "SHA256WithRSA", "authority_key_id": "", "subject_key_id": "", "pem": "-----BEGIN CERTIFICATE-----\nMIIDDKDK........EHi\nThGfI/wURC0=\n-----END CERTIFICATE-----\n" }
2. 重新生成证书
在证书过期node删除kubelet相关证书文件及配置文件然后重启kubelet,
kubelet会向apiserver发起一个csr
rm /etc/kubernetes/kubelet.kubeconfig rm /etc/kubernetes/ssl/kubelet.* systemctl restart kubelet systemctl status kubelet
//查看未授权的CSR请求: kubectl get csr
//approve CSR 请求: kubectl certificate approve csr-4pw6g NAME AGE REQUESTOR CONDITION csr-4pw6g 1h kubelet-bootstrap Approved,Issued
3. 重启kubelet
//重启kubelet systemctl restart kubelet //查看node状态 kubectl get no NAME STATUS AGE VERSION external Ready 1y v1.6.6
4. 另:在kubernetes1.7之后,可以采用集群自动签发证书方案,但仍然需要手动重启kubelet, 在1.8之后,就可以自动签发,自动renew证书;也可以设置更长的有效期。后继再添加整理相关内容。