kubernetes證書過期問題的解決

背景:

之前在阿里云主機(jī)上使用kubeadm安裝的kubernates(版本號(hào)為:1.8.3),使用了一年以后,突然出現(xiàn)問題。
問題狀態(tài)為不管使用kubectl 的什么指令,都報(bào)出以下的異常:

Unable to connect to the server: x509: certificate has expired or is not yet valid

通過異常關(guān)鍵字查詢,最后定位是默認(rèn)安裝中,kubenates的apiserver與kubelet的訪問授信證書是一年,官方的說法是通過這種方式,讓用戶不斷的升級(jí)版本?,F(xiàn)在這套環(huán)境上跑著用戶的生產(chǎn)環(huán)境,不可能去做升級(jí)或是重裝的事情,這個(gè)影響太大了,所以需要在不重裝kubernates的前提上,把這個(gè)問題解決掉。

思路

方案1

源碼去掉證書判定邏輯,重新編譯
這個(gè)方式?jīng)]有驗(yàn)證,但需要下載對(duì)應(yīng)版本的源碼,重新編譯相應(yīng)組件。這個(gè)方式如果是與原作者的k8s版本一致可以試一下,或是對(duì)go語言熟悉的用戶可以找對(duì)應(yīng)的處理邏輯代碼進(jìn)行修改。

方案2

重新生成證書
其中有位大胡子說:

topic1.png

備注:因?yàn)閮?nèi)容太多,這里沒有辦法截圖完整方案,可以通過鏈接自己查看。大概意思就是說他是1.8以下版本的k8s集群環(huán)境,按照以下步驟可以解決問題。并且有多人回復(fù)說按照大胡子的方式處理已經(jīng)成功解決問題。
樓下出現(xiàn)一個(gè)小人說:
topic2.png

大概意思就是說他是非集群的環(huán)境,按照大胡子的1-6步損傷也成功了。

解決

有了上面的方案做參照,就有了自己的思路?;诒救说膶?shí)際情況。還是考慮使用方案2的方式來解決,只是根據(jù)自己的情況對(duì)步驟進(jìn)行裁減,最后問題得到了解決。下面將環(huán)境,處理步驟以操作過程中出現(xiàn)的問題敘述如下:

環(huán)境

在阿里云的云主機(jī)上使用kubeadm安裝的1.8.3版本的單結(jié)點(diǎn)的kubernates。


topic3.png

處理步驟

備份證書

sudo mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
sudo mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old
sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old
sudo mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old
sudo mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old

產(chǎn)生新的證書

sudo kubeadm alpha phase certs apiserver --apiserver-advertise-address 127.0.0.1
sudo kubeadm alpha phase certs apiserver-kubelet-client
sudo kubeadm alpha phase certs front-proxy-client

備份老的配置文件

sudo mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.conf.old
sudo mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.old
sudo mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.old
sudo mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.old

產(chǎn)生新的配置文件

 sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address 127.0.0.1

確認(rèn)kubectl正在查找正確的配置文件路徑

 mv $HOME/.kube/config $HOME/.kube/config.old
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
 sudo chmod 777 $HOME/.kube/config
 export KUBECONFIG=$HOME/.kube/config

重啟kube-apiserver,kube-controller-manager, kube-scheduler

通過docker ps找到kube-apiserver,kube-controller-manager, kube-scheduler容器,然后指令殺掉容器,讓他重新加載。
下面以kube-apiserver為例:

docker ps | grep ${keyword}
topic4.png
docker kill -s HUP ${容器ID}


topic5.png

備注:

在生成證書時(shí)會(huì)莫名的訪問google的網(wǎng)址,因?yàn)間oogle已經(jīng)被封了,所以會(huì)報(bào)超時(shí)。第一次出現(xiàn)這個(gè)異常的時(shí)候都快絕望了。


topic6.png

這是因?yàn)樵趉ubeadm命令升級(jí)master證書時(shí),它也會(huì)默認(rèn)從網(wǎng)上讀取一個(gè)stable.txt的文件。解決這個(gè)問題的辦法,就是生成一個(gè)集群配置的yaml文件,然后,在運(yùn)行命令時(shí)指定這個(gè)Yaml文件即可。

kubeadm config view > cluster.yaml

注:如果已經(jīng)無法使用該指令生成cluster.yaml文件的情況下,應(yīng)該可以隨便找個(gè)文件也是可以的,應(yīng)該是kubeadm需要一個(gè)salt來生成證書信息,這個(gè)salt就是這個(gè)文件信息。
我的cluster.yaml文件如下:

api:
  advertiseAddress: 172.19.197.5
  bindPort: 6443
authorizationModes:
- Node
- RBAC
certificatesDir: /etc/kubernetes/pki
cloudProvider: ""
etcd:
  caFile: ""
  certFile: ""
  dataDir: /var/lib/etcd
  endpoints: null
  image: ""
  keyFile: ""
imageRepository: gcr.io/google_containers
kubernetesVersion: v1.8.3
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
nodeName: kubernetes.localdomain
token: ""
tokenTTL: 24h0m0s
unifiedControlPlaneImage: ""

然后在上面的kubeadm alpha phase指令中,都添加config參數(shù),指定生成證書的鹽值。如:

sudo kubeadm alpha phase certs apiserver --config /root/cluster.yaml
sudo kubeadm alpha phase certs apiserver-kubelet-client --config /root/cluster.yaml
sudo kubeadm alpha phase certs front-proxy-client --config /root/cluster.yaml

sudo kubeadm alpha phase kubeconfig all  --config /root/cluster.yaml
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄:1、證書過期時(shí)間查詢2、證書過期處理2.1、客戶端kubelet證書自動(dòng)續(xù)期2.2、重新生成默認(rèn)一年時(shí)長證書...
    Feel_狗煥閱讀 13,788評(píng)論 0 4
  • 傻傻分不清楚的kubernetes證書 kubeadm 生成的一坨證書是不是讓人很蒙逼,這些東西沒那么神奇,來深入...
    sealyun閱讀 1,368評(píng)論 1 4
  • Note: 本文基于使用kubeadm搭建的kubernetes集群進(jìn)行講解 第一步:獲取證書簽發(fā)信息 方式一:通...
    SetZero閱讀 1,964評(píng)論 1 5
  • 5月以來,哪怕對(duì)市場(chǎng)風(fēng)向再不敏感的人,也感覺到陣陣涼意。二級(jí)市場(chǎng)連續(xù)下挫,一級(jí)市場(chǎng)融資環(huán)境惡化,不論企業(yè)融資數(shù)量還...
    錢皓頻道閱讀 6,457評(píng)論 1 6
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)、焦點(diǎn)、注意力、語言聯(lián)想、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 5,982評(píng)論 0 5

友情鏈接更多精彩內(nèi)容