5 kubelet證書自動續簽


5 kubelet證書自動續簽

如果kubelet證書到期,kubelet將無法使用過期的證書連接apiserver,從而導致kubelet無法正常工

作,日志會給出證書過期錯誤(x509: certificate has expired or is not yet valid)

5.1 說明

1 證書分類

K8s證書一般分為兩套: K8s組件(apiserver)Etcd,假如按角色來分,證書分為管理節點和工作節點。

(1) 管理節點: 如果是kubeadm部署則自動生成,如果是二進制部署一般由cfssl或者openssl生成。
(2) 工作節點: 工作節點主要是指kubelet連接apiserver所需的客戶端證書,這個證書由
kube-controller-manager
組件自動頒發。

 

2 kubeadm部署證書說明

(1) master配置
etcdkube-apiserverkube-controller-managerkube-schedulerkubectlkubeletkube-proxy
wps13D4.tmp

wps13D5.tmp

wps13D6.tmp

wps13D7.tmp

(2)
node配置
wps13D8.tmp

wps13D9.tmp

 

3 二進制部署證書說明

(1) etcd配置
wps13EA.tmp

(2) master配置
kube-apiserverkube-controller-managerkube-schedulerkubectlkubeletkube-proxy
wps13EB.tmp
wps13EC.tmp

(3) node配置
kubeletkube-proxy
wps13ED.tmp

(4) 原始證書目錄(非常重要,一定要備份
)
wps13EE.tmp

 

4 證書過期

(1) kubeadm部署
官方文檔: https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
kubeadm生成的客戶端證書在1年后到期,ca10年。

檢查證書是否過期:
# kubeadm certs check-expiration
wps13EF.tmp
: 
該命令顯示 /etc/kubernetes/pki 文件夾中的客戶端證書以及 kubeadm(admin.conf, controller-manager.conf
scheduler.conf)使用的 KUBECONFIG 文件中嵌入的客戶端證書的到期時間/剩余時間。
上面的列表中沒有包含 kubelet.conf,因為 kubeadm kubelet 配置為自動更新證書。輪換的證書位於目錄 /var/lib/kubelet/pki

(2) 二進制部署
二進制部署etcdk8s組件的ca證書時間為10年,由於cfssl工具的限制,ca證書只有5年的期限
,相應簽發的客戶端證書也只有5年期限,但也夠用了。
wps13FF.tmp
紅線K8s自建證書頒發機構(CA),需攜帶由它生成的客戶端證書訪問apiserver
藍色
Etcd自建證書頒發機構(CA),需攜帶由它生成的客戶端證書訪問etcd

 

2 查看證書有效期的方法

比如查看kubeadm方式部署的kubelet證書過期時間:
# cd /var/lib/kubelet/pki/
# openssl x509 -in kubelet-client-current.pem -noout -dates
wps1400.tmp

5.2 kubeadm部署k8s環境下kubelet證書自動續簽

官方文檔: https://kubernetes.io/zh/docs/tasks/tls/certificate-rotation/

 

1 配置kube-controller-manager組件(master節點)

# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
wps1401.tmp
- --experimental-cluster-signing-duration=87600h0m0s
# kubelet客戶端證書頒發有效期設置為10
- --feature-gates=RotateKubeletServerCertificate=true
# 啟用server證書頒發

# 啟用server證書頒發配置完成后,重建pod使之生效
#
kubectl delete pod kube-controller-manager-k8s-master1 -n kube-system

: 如果你運行了一個 HA 集群,以上操作需要在所有控制面板節點上執行

 

2 配置kubelet組件(node節點)

# vim /var/lib/kubelet/config.yaml
wps1402.tmp
# 默認kubelet證書輪轉已經啟用
rotateCertificates: true
: 
kubelet證書輪詢只能在kubelet證書沒有過期之前操作,如果kubelet證書已經過期,那么kubelet證書輪轉就
不起作用了,並且kubelet服務也無法運行。

 

3 測試

(1) 找一台測試node節點,查看現有客戶端證書有效期
# cd /var/lib/kubelet/pki/
# openssl x509 -in kubelet-client-current.pem -noout -dates
wps1403.tmp

(2) 修改服務器時間,模擬kubelet證書即將到期
# date
Mon Sep 27 16:15:12 CST 2021
# date -s "2022-08-20"
# date
Sat Aug 20 00:00:01 CST 2022

(3) 重啟kubelet服務
# systemctl restart kubelet.service

(4) 再次查看證書有效期,發現已經變成十年了
# openssl x509 -in kubelet-client-current.pem -noout -dates
wps1404.tmp
: 我服務器的時間已經設置為了2022-08-20,但是kubelet證書的起始時間是2021-09-27
(今天的確切日期),說明證書有效期的起始時間不是根據kubelet所在服務器時間計算的,
是由kube-controller-manager所在服務器時間決定的。如果node服務器時間發生改變,
那么在該node上的pod容器時間也會跟着發生變化。

 

4 k8s其它組件證書有效期續簽

(1) 查看證書有效期
[root@k8s-master1 ~]# kubeadm certs check-expiration
wps1415.tmp
: 我們可以看到除kubelet客戶端證書之外其它k8s組件證書有效期還剩330天。

(2) 續簽證書
[root@k8s-master1 ~]# kubeadm alpha certs renew all
wps1416.tmp

(3) 重啟kube-apiserver, kube-controller-manager, kube-scheduler and etcd服務應用新的證書
1) 查看相應pod
wps1417.tmp
2) 重啟相應服務
[root@k8s-master1 ~]# kubectl delete pod/kube-apiserver-k8s-master1 -n kube-system
[root@k8s-master1 ~]# kubectl delete pod/kube-controller-manager-k8s-master1 -n kube-system
[root@k8s-master1 ~]# kubectl delete pod/kube-scheduler-k8s-master1 -n kube-system
[root@k8s-master1 ~]# kubectl delete pod/etcd-k8s-master1 -n kube-system

(4) 再次查看證書有效期限
[root@k8s-master1 ~
]# kubeadm certs check-expiration
wps1418.tmp
: 由於ca證書有效期為10年,所以客戶端證書續簽最長有效期也為10年。

(5) : 如果你運行了一個 HA 集群,以上操作需要在所有控制面板節點上執行

5.3 二進制部署k8s環境下kubelet證書自動續簽

二進制部署etcdk8s組件的ca證書時間為10年,由於cfssl工具的限制,ca證書只有5年的期限
,相應簽發的客戶端證書也只有5年期限,所以在5年之前不會出現證書過期的問題。

查看節點證書:
[root@k8s-node2 ~]# cd /opt/kubernetes/ssl
[root@k8s-node2 ssl]# openssl x509 -in kubelet-client-current.pem -noout -dates
wps1419.tmp


免責聲明!

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



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