自定義基於kubeadm建立的k8s叢集證書

新鈦雲服已累計為您分享835篇技術乾貨
在 Kubernetes 叢集的運維過程中,證書管理是非常重要的一部分。尤其是自定義證書的過期時間和定期的證書檢查與替換。本文將詳細介紹如何自定義基於kubeadm建立的k8s叢集證書。
1、確認當前Kubernetes版本
首先,確認當前 Kubernetes版本:
Bashkubectl versionWARNING: This version information is deprecated and will be replaced with the outputfrom kubectl version--short. Use --output=yaml|json to get the full version.ClientVersion: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.6", GitCommit:"741c8db18a52787d734cbe4795f0b4ad860906d6", GitTreeState:"clean", BuildDate:"2023-09-13T09:21:34Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}Kustomize Version: v5.0.1ServerVersion: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.6", GitCommit:"741c8db18a52787d734cbe4795f0b4ad860906d6", GitTreeState:"clean", BuildDate:"2023-09-13T09:14:09Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}# 這裡檢視的go環境版本為:GoVersion:"go1.20.8"# Kubernetes原始碼版本為:GitVersion:"v1.27.6"
2、下載對應原始碼和編譯環境
下載對應原始碼
根據Kubernetes版本資訊下載對應版本的Kubernetes原始碼,
下載地址:
https://github.com/kubernetes/kubernetes/releases,
這裡是v1.27.6版本

下載對應go環境
根據Kubernetes版本資訊下載對應版本的go環境,下載地址:https://go.dev/dl/,這裡是1.20.8版本

3、證書備份
為確保安全,先進行證書備份:
Bash# mastercp -r /etc/kubernetes/pki /etc/kubernetes/pki-backup
4、證書檢查
Kubernetes 提供了 kubeadm 命令來檢測叢集證書的過期時間。執行以下命令檢查證書狀態:
Bashkubeadm certs check-expiration[check-expiration] Reading configuration from the cluster...[check-expiration] FYI: You can look at this config filewith'kubectl -n kube-system get cm kubeadm-config -o yaml'CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLYMANAGEDadmin.conf Feb 14, 202605:26 UTC 364d ca noapiserver Feb 14, 202605:26 UTC 364d ca noapiserver-etcd-client Feb 14, 202605:26 UTC 364d etcd-ca noapiserver-kubelet-client Feb 14, 202605:26 UTC 364d ca nocontroller-manager.conf Feb 14, 202605:26 UTC 364d ca noetcd-healthcheck-client Feb 14, 202605:26 UTC 364d etcd-ca noetcd-peer Feb 14, 202605:26 UTC 364d etcd-ca noetcd-server Feb 14, 202605:26 UTC 364d etcd-ca nofront-proxy-client Feb 14, 202605:26 UTC 364d front-proxy-ca noscheduler.conf Feb 14, 202605:26 UTC 364d ca no
此命令會列出叢集中所有證書的過期資訊,當前證書過期時間為1年。
5、自定義證書時間並替換
按照以下步驟進行替換:
5.1 準備編譯環境
master節點準備編譯環境:
Bash# mastertar xf go1.20.8.linux-amd64.tar.gz -C /usr/local/echo"export PATH=$PATH:/usr/local/go/bin" >>/etc/profilesource /etc/profilego version
5.2 原始碼編譯和替換
然後,編譯 kubeadm 並替換原有版本:
Bash# mastertarxf kubernetes-1.27.6.tar.gzcdkubernetes-1.27.6/vi cmd/kubeadm/app/constants/constants.go
修改證書有效期為 10 年(3650 天):
BashCertificateValidity = time.Hour * 24 * 365 * 10
編譯 kubeadm
BashmakeWHAT=cmd/kubeadm GOFLAGS=-vll_output/bin/mv/usr/bin/kubeadm /usr/bin/kubeadm.bakcp _output/bin/kubeadm /usr/bin/

5.3 更新證書
執行以下命令更新所有證書:
Bash# masterkubeadmcerts renew all# 如不需要更新所有證書,可以按需更新以下證書kubeadmcerts renew admin.confkubeadmcerts renew apiserverkubeadmcerts renew apiserver-kubelet-client kubeadmcerts renew controller-manager.confkubeadmcerts renew front-proxy-clientkubeadmcerts renew scheduler.conf
5.4 同步檔案至其他Master節點
將更新後的 kubeadm 二進位制檔案和證書同步到其他 Master 節點:
Bashscp /usr/bin/kubeadm master02:/usr/binscp /usr/bin/kubeadm master03:/usr/bin
5.5 重啟相關元件
最後,重啟相關的 Kubernetes 元件,使證書生效:
Bashkubectl -n kube-systemdelete po -l 'component=kube-apiserver'kubectl -n kube-systemdelete po -l 'component=kube-controller-manager'kubectl -n kube-systemdelete po -l 'component=kube-scheduler'
透過執行這些命令,叢集中的證書將會更新,並且相關的元件會自動重啟,應用新證書。
5.6 證書檢查
執行以下命令檢查證書狀態:
Bashkubeadm certs check-expiration[check-expiration] Reading configuration from the cluster...[check-expiration] FYI: You can look at this config filewith'kubectl -n kube-system get cm kubeadm-config -o yaml'CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLYMANAGEDadmin.conf Feb 12, 203505:48 UTC 9y ca noapiserver Feb 12, 203505:48 UTC 9y ca noapiserver-etcd-client Feb 12, 203505:48 UTC 9y etcd-ca noapiserver-kubelet-client Feb 12, 203505:48 UTC 9y ca nocontroller-manager.conf Feb 12, 203505:48 UTC 9y ca noetcd-healthcheck-client Feb 12, 203505:48 UTC 9y etcd-ca noetcd-peer Feb 12, 203505:48 UTC 9y etcd-ca noetcd-server Feb 12, 203505:48 UTC 9y etcd-ca nofront-proxy-client Feb 12, 203505:48 UTC 9y front-proxy-ca noscheduler.conf             Feb 12203505:48 UTC   9y              ca                      no
可以看到,現在所有證書過期時間均已變成10年。
5、總 結
本文詳細介紹瞭如何自定義基於kubeadm建立的Kubernetes叢集證書的過期時間,並對證書進行定期檢查和替換。透過重新編譯kubeadm原始碼,我們能夠靈活地設定證書的有效期限,從而為測試環境和生產環境提供便利。
自定義證書過期時間不僅簡化了運維管理,還減少了因證書過期導致的潛在風險。此外,透過本文的步驟,您可以確保叢集的安全性和穩定性,同時避免了頻繁更新證書帶來的額外工作負擔。
透過執行上述步驟,您可以有效地更新叢集中的證書,並確保相關元件能夠自動重啟並應用新證書。這種方法不僅提高了運維效率,還增強了叢集的整體安全性。
如有相關問題,請在文章後面給小編留言,小編安排作者第一時間和您聯絡,為您答疑解惑。
    推薦閱讀   

    推薦影片    

相關文章