kubeadm證書 etcd證書過期處理

2021-10-24 17:36:24 字數 4139 閱讀 8618

今天突然測試環境的kubernetes 持續整合/持續發布出了問題了,然後上測試環境伺服器排查,發現kubectl指令執行出現問題,

unable to connect to the server: x509: certificate has expired or is not yet valid
然後翻譯了一下提示證書已過期,網上查了下資料,說是:kubernetes的apiserver 與kubelet的訪問授權證書是一年,官方的解釋是:通過這種方式,讓使用者不斷的公升級版本。給出的解決方案有以下幾種:

去掉證書驗證功能(不科學,等於自己去改原始碼)

重新生成證書,替換舊的。

公升級集群,自動更新證書

部署一套新的環境,業務遷移過去。

檢視證書的有效日期:(這是已經更新的了的。預設有效期為一年)

[root@node01 bin]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' not '

not before: may 18 07:34:20 2018 gmt

not after : may 19 04:23:55 2020 gmt

開始替換證書:

一、 備份原來的配置檔案及證書

[root@node01 bin]#  cp -rf /etc/kubernetes /etc/kubernetes_bak/

[root@node01 bin]# cd /etc/kubernetes/

[root@node01 kubernetes]# rm -f pki/apiserver*

[root@node01 kubernetes]# rm -f pki/front-proxy-client.*

[root@node01 kubernetes]# rm -f ./admin.conf

[root@node01 kubernetes]# rm -f ./kubelet.conf

[root@node01 kubernetes]# rm -f ./controller-manager.conf

[root@node01 kubernetes]# rm -f ./scheduler.conf

二、 建立新證書及配置檔案。

[root@node01 kubernetes]# cd ~/kubernetes/

[root@node01 kubernetes]# ls

config.yaml kube-flannel.yml kubernetes-dashboard.yaml

[root@node01 kubernetes]# pwd

/root/kubernetes

[root@node01 kubernetes]# kubeadm alpha phase certs all --config config.yaml #生成證書 config.yaml是kubeadm init時候的配置引數

[root@node01 kubernetes]# kubeadm alpha phase certs apiserver-kubelet-client

[root@node01 kubernetes]# kubeadm alpha phase certs front-proxy-client

[root@node01 kubernetes]# kubeadm alpha phase kubeconfig all --config config.yaml # 生成配置檔案

[root@node01 kubernetes]# systemctl restart kubelet # 重啟kubelet、docker

[root@node01 kubernetes]# systemctl restart docker # 只要是重啟kubernetes的相關元件

p.s: 如果有多台master 則把證書和配置檔案拷貝過去重啟kubernetes元件即可。

三、 檢視證書日期、測試:

[root@node01 bin]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' not '

not before: may 18 07:34:20 2018 gmt

not after : may 19 04:23:55 2020 gmt

[root@node01 ~]# kubectl get node -o wide

name status roles age version external-ip os-image kernel-version container-runtime

node01 ready master 1y v1.10.2 centos linux 7 (core) 3.10.0-693.el7.x86_64 docker:

node02 ready 1y v1.10.2 centos linux 7 (core) 3.10.0-693.el7.x86_64 docker:

node03 ready 1y v1.10.2 centos linux 7 (core) 3.10.0-693.el7.x86_64 docker:

node05 ready 333d v1.10.2 centos linux 7 (core) 3.10.0-862.3.3.el7.x86_64 docker:

node06 ready 318d v1.10.2 centos linux 7 (core) 3.10.0-514.el7.x86_64 docker:

先備份資料(/var/lib/etcd/)

根據部署時候生成證書的步驟重新生成etcd證書,然後替換。

檢查etcd的證書,發現etcd同樣也過期了:

[root@node01 ssl]#  openssl x509 -in etcd.pem -noout -text |grep ' not '

not before: oct 8 13:49:00 2020 gmt

not after : oct 8 13:49:00 2020 gmt

[root@node01 ssl]# pwd

/etc/etcd/ssl

在替換證書之前先把etcd的資料備份一下

cd /var/lib

tar -zvcf etcd.tar.gz etcd/

建立新的證書

rm -rf /etc/etcd/ssl/*   #刪除舊的證書

cd /root/ssl

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

cfssl gencert -ca=ca.pem \

-ca-key=ca-key.pem \

-config=ca-config.json \

-profile=kubernetes-soulmate etcd-csr.json | cfssljson -bare etcd

cp etcd.pem etcd-key.pem ca.pem /etc/etcd/ssl/

scp -r /etc/etcd/ssl/*.pem node02:/etc/etcd/ssl/

scp -r /etc/etcd/ssl/*.pem node03:/etc/etcd/ssl/

在檢視證書時間

[root@node01 ssl]#  openssl x509 -in etcd.pem -noout -text |grep ' not '

not before: oct 8 13:49:00 2020 gmt

not after : oct 8 13:49:00 2021 gmt

[root@node01 ssl]# pwd

/etc/etcd/ssl

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...

CFSSL製作ETCD證書

找台centos7 10.3.8.234 來做ca製作自簽名證書。2 生成證書 mkdir ssl cd ssl 生成預設的配置檔案和證書簽名請求檔案 cfssl print defaults config ca config.json cfssl print defaults csr ca csr...