k8s重新編譯kubeadm解決證書過期問題,適用於v1.15.1 v1.15.3 v.1.16.4等


問題說明

kubeadm  kubernetes 提供的一個初始化集群的工具,使用起來非常方便。但是它創建的apiservercontroller-manager等證書默認只有一年的有效期,同時kubelet 證書也只有一年有效期,一年之后 kubernetes 將停止服務。 官方推薦一年之內至少用 kubeadm upgrade 更新一次 kubernetes 系統,更新時也會自動更新證書。不過,生產環境或者無法連接外網的環境頻繁更新 kubernetes 不太現實。

重新編譯kubeadm

這里測試了三個版本的k8s,一個是v1.15.1, v1.15.3, v1.16.3,都適用

下載k8s源碼

直接google搜索kubernetes github去下載即可

修改源碼

進到源碼目錄中,需要修改兩處地方
第一個地方:

# vim ./staging/src/k8s.io/client-go/util/cert/cert.go
NotAfter: now.Add(duration365d * 10).UTC(),  //默認為10年,修改為100年,不能超過1000年,因為我試過不行

第二個地方:

# vim ./cmd/kubeadm/app/constants/constants.go
CertificateValidity = time.Hour * 24 * 365 * 100   //改為這里的值

重新編譯kubeadm

這里通過docker容器的方式去編譯

docker run --rm -it -v /tmp/kubernetes/:/go/src/k8s.io/kubernetes mirrorgooglecontainers/kube-cross:v1.12.10-1 bash
#進入容器
cd /go/src/k8s.io/kubernetes
make all WHAT=cmd/kubeadm GOFLAGS=-v

替換舊的kubeadm

新生成的kubeadm會在./_output/local/bin/linux/amd64/kubeadm這個路徑下
把舊的做好備份,還有/etc/kubernetes/pki也備份下

cp ./_output/local/bin/linux/amd64/kubeadm /usr/bin/kubeadm

執行命令更新證書

#更新證書
kubeadm alpha certs renew all
#查看證書時間
kubeadm alpha certs check-expiration

歡迎關注我的公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM