昨天收到報警短信:集群中某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
- 重啟kubelet
//重啟kubelet
systemctl restart kubelet
//查看node狀態
kubectl get no
NAME STATUS AGE VERSION
external Ready 1y v1.6.6
- 另:在kubernetes1.7之后,可以采用集群自動簽發證書方案,但仍然需要手動重啟kubelet, 在1.8之后,就可以自動簽發,自動renew證書;也可以設置更長的有效期。后繼再添加整理相關內容。