
新鈦雲服已累計為您分享835篇技術乾貨

在 Kubernetes 叢集的運維過程中,證書管理是非常重要的一部分。尤其是自定義證書的過期時間和定期的證書檢查與替換。本文將詳細介紹如何自定義基於kubeadm建立的k8s叢集證書。
首先,確認當前 Kubernetes版本:
Bash
kubectl version
WARNING: 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.1
ServerVersion: 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"

下載對應原始碼
根據Kubernetes版本資訊下載對應版本的Kubernetes原始碼,
下載地址:
https://github.com/kubernetes/kubernetes/releases,
這裡是v1.27.6版本

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

為確保安全,先進行證書備份:
Bash
# master
cp -r /etc/kubernetes/pki /etc/kubernetes/pki-backup

Kubernetes 提供了 kubeadm 命令來檢測叢集證書的過期時間。執行以下命令檢查證書狀態:
Bash
kubeadm 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 EXTERNALLYMANAGED
admin.conf Feb 14, 202605:26 UTC 364d ca no
apiserver Feb 14, 202605:26 UTC 364d ca no
apiserver-etcd-client Feb 14, 202605:26 UTC 364d etcd-ca no
apiserver-kubelet-client Feb 14, 202605:26 UTC 364d ca no
controller-manager.conf Feb 14, 202605:26 UTC 364d ca no
etcd-healthcheck-client Feb 14, 202605:26 UTC 364d etcd-ca no
etcd-peer Feb 14, 202605:26 UTC 364d etcd-ca no
etcd-server Feb 14, 202605:26 UTC 364d etcd-ca no
front-proxy-client Feb 14, 202605:26 UTC 364d front-proxy-ca no
scheduler.conf Feb 14, 202605:26 UTC 364d ca no

此命令會列出叢集中所有證書的過期資訊,當前證書過期時間為1年。
按照以下步驟進行替換:
5.1 準備編譯環境
在 master節點準備編譯環境:
Bash
# master
tar xf go1.20.8.linux-amd64.tar.gz -C /usr/local/
echo"export PATH=$PATH:/usr/local/go/bin" >>/etc/profile
source /etc/profile
go version

5.2 原始碼編譯和替換
然後,編譯 kubeadm 並替換原有版本:
Bash
# master
tarxf kubernetes-1.27.6.tar.gz
cdkubernetes-1.27.6/
vi cmd/kubeadm/app/constants/constants.go

修改證書有效期為 10 年(3650 天):
Bash
CertificateValidity = time.Hour * 24 * 365 * 10

編譯 kubeadm:
Bash
makeWHAT=cmd/kubeadm GOFLAGS=-v
ll_output/bin/
mv/usr/bin/kubeadm /usr/bin/kubeadm.bak
cp _output/bin/kubeadm /usr/bin/


5.3 更新證書
執行以下命令更新所有證書:
Bash
# master
kubeadmcerts renew all
# 如不需要更新所有證書,可以按需更新以下證書
kubeadmcerts renew admin.conf
kubeadmcerts renew apiserver
kubeadmcerts renew apiserver-kubelet-client
kubeadmcerts renew controller-manager.conf
kubeadmcerts renew front-proxy-client
kubeadmcerts renew scheduler.conf

5.4 同步檔案至其他Master節點
將更新後的 kubeadm 二進位制檔案和證書同步到其他 Master 節點:
Bash
scp /usr/bin/kubeadm master02:/usr/bin
scp /usr/bin/kubeadm master03:/usr/bin
5.5 重啟相關元件
最後,重啟相關的 Kubernetes 元件,使證書生效:
Bash
kubectl -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 證書檢查
執行以下命令檢查證書狀態:
Bash
kubeadm 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 EXTERNALLYMANAGED
admin.conf Feb 12, 203505:48 UTC 9y ca no
apiserver Feb 12, 203505:48 UTC 9y ca no
apiserver-etcd-client Feb 12, 203505:48 UTC 9y etcd-ca no
apiserver-kubelet-client Feb 12, 203505:48 UTC 9y ca no
controller-manager.conf Feb 12, 203505:48 UTC 9y ca no
etcd-healthcheck-client Feb 12, 203505:48 UTC 9y etcd-ca no
etcd-peer Feb 12, 203505:48 UTC 9y etcd-ca no
etcd-server Feb 12, 203505:48 UTC 9y etcd-ca no
front-proxy-client Feb 12, 203505:48 UTC 9y front-proxy-ca no
scheduler.conf Feb 12, 203505:48 UTC 9y ca no

可以看到,現在所有證書過期時間均已變成10年。
本文詳細介紹瞭如何自定義基於kubeadm建立的Kubernetes叢集證書的過期時間,並對證書進行定期檢查和替換。透過重新編譯kubeadm原始碼,我們能夠靈活地設定證書的有效期限,從而為測試環境和生產環境提供便利。
自定義證書過期時間不僅簡化了運維管理,還減少了因證書過期導致的潛在風險。此外,透過本文的步驟,您可以確保叢集的安全性和穩定性,同時避免了頻繁更新證書帶來的額外工作負擔。
透過執行上述步驟,您可以有效地更新叢集中的證書,並確保相關元件能夠自動重啟並應用新證書。這種方法不僅提高了運維效率,還增強了叢集的整體安全性。
如有相關問題,請在文章後面給小編留言,小編安排作者第一時間和您聯絡,為您答疑解惑。
推薦閱讀



推薦影片