2021-11-25日早上,實施反饋現場無法使用kubesphere部署應用。於是我到生產環境排查問題,一開始只是發現web ui上websocket連接報了異常。而且點擊了重新部署沒有任何反應。F12查看,接口是調用了,但任何反應都沒有。於是建議實施重啟4個節點的服務器,結果服務器起來后依然無法重新部署。以往遇到問題重啟服務器就好了啊,這次是什么幺蛾子?不是說好的重啟能解決90%的問題嗎?然后執行命令:kubectl get node查看節點狀態,結果報錯,繼續看下面。
先說第一個問題:
執行:kubectl get node
報錯:Unable to connect to the server: x509: certificate has expired or is not yet valid
后來在官網搜索資料,找到一篇文章:https://kubesphere.com.cn/forum/d/6102-kk
從這篇文章看到一個大佬出了解決方案:https://jwangkun.github.io/OYyruQGSe/
還有這篇:https://jwangkun.github.io/SBgo8PNJ6/
意思是說:k8s證書過期,需要重新生成證書才行。於是生成k8s證書。
# 1.查看現有證書到期時間
$ kubeadm alpha certs check-expiration
# 2.使用二進制更新證書
$ kubeadm alpha certs renew all
# 3.每月的最后1天
$ crontab -e
* * 1 * * /usr/local/bin/kubeadm alpha certs renew all
第三個是利用linux的crontab表達式定期更新證書。其實只要在master上執行第二步就行了。第二步執行完,再使用第一步的命令查看證書到期時間。
證書更新完又遇到第二個問題:
執行:kubectl get node
報錯:error: You must be logged in to the server (Unauthorized)
翻譯:您必須登錄到服務器(未經授權)
於是又在網上找資料:https://www.cnblogs.com/zhangmingcheng/p/14317551.html
這篇文章說的很詳細:這個是權限問題,配置身份認證的文件為/etc/kubernetes/admin.conf,頒發證書時/etc/kubernetes/admin.conf文件重新生成,但是$HOME/.kube/config並沒有得到替換。所以需要用新證書替換舊證書。
解決方案:
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
重啟所有節點,然后再執行kubectl get node,所有節點都是Ready狀態,問題完美解決。