問題說明
kubeadm 是 kubernetes 提供的一個初始化集群的工具,使用起來非常方便。但是它創建的apiserver、controller-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
歡迎關注我的公眾號