集群gg了,一查預設的證書失效只有一年。恢復吧,手生啊。
kubeadm 是 kubernetes 提供的乙個初始化集群的工具,使用起來非常方便,但是它建立的 apiserver、controller-manager 等證書預設只有一年的有效期,
同時 kubelet 證書也只有一年有效期,一年之後 kubernetes 將停止服務。
方法總結下來有以下幾個:
1、官方推薦:一年之內 kubeadm upgrade 更新一次 kubernetes 系統。
2、坊間方法:源**編譯,使得 kubeadm 生成的證書時間邊長。
3、手動更新證書( kubeadm alpha phase )。
4、啟用自動輪換 kubelet 證書
查詢api證書過期時間
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' not '
查詢etcd證書過期時間
openssl x509 -in /etc/kubernetes/pki/etcd/healthcheck-client.crt -noout -text |grep ' not '
一、環境gg的情況下更新證書
1、準備 kube-config.yaml
kubeadm命令公升級master證書時,它也會預設從牆外讀取乙個stable.txt的檔案,生產環境沒有牆外線是絕對訪問不到的。
這時候就需要自備的kube-config.yaml檔案。生成方式如下命令:
kubeadm config view > kube-config.yaml
實際情況集群掛了的時候這個命令也是無法執行,可以自己寫乙個,但是擔心版本問題,之前也沒備份。好在我司用的集群是我標準化過的。
找台機器重新部署乙個同版本的,>kubeadm config view > kube-config.yaml 生成乙個kube-config.yaml當然新生成的yml要修改裡邊的apiserver位址為master位址。應該是替換/etc/kube下的同名檔案,記得備份。補的文件,記不太清楚了,當時也沒標註這個。應該是沒問題。
修改:
apiversion: kubeadm.k8s.io/v1beta1
kind: clusterconfiguration
kubernetesversion: v1.14.1 #-->這裡改成你集群對應的版本
#這裡使用國內的映象倉庫,否則在重新簽發的時候會報錯:could not fetch a kubernetes version from the internet: unable to get url ""
2、備份證書
cp -r /etc/kubernetes /etc/kubernetes.bak
移動證書和配置【注意!必須移動,不然會使用現有的證書,不會重新生成】
cd /etc/kubernetes
mkdir ./pki_bak
mkdir ./pki_bak/etcd
mkdir ./conf_bak
mv pki/apiserver* ./pki_bak/
mv pki/front-proxy-client.* ./pki_bak/
mv pki/etcd/healthcheck-client.* ./pki_bak/etcd/
mv pki/etcd/peer.* ./pki_bak/etcd/
mv pki/etcd/server.* ./pki_bak/etcd/
mv ./admin.conf ./conf_bak/
mv ./kubelet.conf ./conf_bak/
mv ./controller-manager.conf ./conf_bak/
mv ./scheduler.conf ./conf_bak/
3、生成證書
kubeadm alpha phase certs all --config=cluster.yaml4、更新配置檔案版本不一致執行的命令也不一樣,需要檢視對應版本alpha命令
參考文件:
()
有相關介紹,不過我參考的是第二個,第乙個嘗試失敗
kubeadm alpha phase kubeconfig all --config=cluster.yaml
mv $home/.kube/config $home/.kube/config.old
cp -i /etc/kubernetes/admin.conf $home/.kube/config
chown $(id -u):$(id -g) $home/.kube/config
sudo chmod 777 $home/.kube/config
完成後重啟kube-apiserver,kube-controller,kube-scheduler,etcd這4個容器,親測systemctl rstart docker 也可以
報錯:error: error loading config file "/etc/kubernetes/scheduler.conf": read /etc/kubernetes/scheduler.conf: is a directory
diff kube-config.yaml cluster.yaml 發現nodename不一致,可能是他導致的,試試完成kubeadm config view > kube-config.yaml
rm -rf /etc/kubernetes/scheduler.conf 我這裡secheduler.conf現在是個目錄,不知道啥情況。
單獨更新scheduler的證書就行
kubeadm alpha phase kubeconfig scheduler --config=/root/kube-config.yaml
二、啟用自動輪換 kubelet 證書
kubelet 證書分為 server 和 client 兩種, k8s 1.9 預設啟用了 client 證書的自動輪換,但 server 證書自動輪換需要使用者開啟.
1、增加 kubelet 引數
在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 增加如下引數
environment="kubelet_extra_args=--feature-gates=rotatekubeletservercertificate=true"
增加 controller-manager 引數
在/etc/kubernetes/manifests/kube-controller-manager.yaml 新增如下引數
3、開啟輪換
kubectl create –f ca-update.yaml
kubeadm證書 etcd證書過期處理
今天突然測試環境的kubernetes 持續整合 持續發布出了問題了,然後上測試環境伺服器排查,發現kubectl指令執行出現問題,unable to connect to the server x509 certificate has expired or is not yet valid然後翻譯...
kubeadm修改證書過期時間
因為我是安裝用kubeadm自動安裝的,目前最新版本1.63 但是限於證書過期時間問題,需要去做更改,特此記錄!一 安裝go語言。現在新版本的k8s重新編譯都需要高版本的go語言了。我這邊安裝的是v1.13.5 tar zxvf go1.135.linux amd64.tar.gz mv go us...
kubeadm證書到期自動續簽
bin bash bin kubeadm alpha certs renew all cd cp root kube config root kube bak config date f 備份原來的檔案 bin cp etc kubernetes admin.conf root kube confi...