Kubernetes Kubelet certs 滚动更新
kubelet
证书到期,kubelet
将无法使用过期的证书连接apiserver
,从而导致kubelet无法正常工作,日志会给出证书过期错误(x509: certificate has expired or is not yet valid
)。
其中分为两部分:
Kubelet进程管理的 (client pem) APIServer进程管理的 (server pem)
这套
证书由kube-controller-manager
组件自动颁发。
默认证书位置和证书有效期
master节点证书
$ pwd
/etc/kubernetes/pki
$ ls | grep "crt"
apiserver-etcd-client.crt
apiserver-kubelet-client.crt
apiserver.crt
ca.crt
front-proxy-ca.crt
front-proxy-client.crt
$ ls | grep "crt" | xargs -I {} openssl x509 -noout -dates -in /etc/kubernetes/pki/{}
notBefore=Sep 12 11:27:45 2022 GMT #apiserver-etcd-client.crt apiserver访问etcd 1年
notAfter=Sep 13 11:33:28 2023 GMT
notBefore=Sep 12 11:27:43 2022 GMT #apiserver-kubelet-client.crt kubelet访问apiserver 1年
notAfter=Sep 13 11:33:28 2023 GMT
notBefore=Sep 12 11:27:43 2022 GMT #apiserver.crt apiserver Server端证书 1年
notAfter=Sep 13 11:33:28 2023 GMT
notBefore=Sep 12 11:27:43 2022 GMT #ca.crt ca证书 100年 默认是10年
notAfter=Aug 20 11:27:43 2122 GMT
notBefore=Sep 12 11:27:45 2022 GMT #apiserver lb server证书 100年 非控制面标准组件
notAfter=Aug 20 11:27:45 2122 GMT
notBefore=Sep 12 11:27:45 2022 GMT #apiserver lb client证书 1年 非控制面标准组件
notAfter=Sep 13 11:33:28 2023 GMT
Node节点Kubelet
证书:
$ openssl x509 -noout -dates -in /var/lib/kubelet/pki/kubelet.crt
notBefore=Sep 13 10:35:20 2022 GMT #kubelet.crt 证书 1年
notAfter=Sep 13 10:35:20 2023 GMT
$ openssl x509 -noout -dates -in /etc/kubernetes/pki/ca.crt
notBefore=Sep 12 11:27:43 2022 GMT
notAfter=Aug 20 11:27:43 2122 GMT
kube-controller-manager 配置
配置kube-controller-manager组件(master节点)
$ vim /etc/kubernetes/manifests/kube-controller-manager.yaml
...
spec:
containers:
- command:
...
- --experimental-cluster-signing-duration=87600h0m0s #10年
- --feature-gates=RotateKubeletServerCertificate=true #高版本 默认开启了
...
kubelet 配置
配置kubelet组件(Node节点)
$ vim /var/lib/kubelet/config.yaml
...
rotateCertificates: true
serverTLSBootstrap: true
...
验证
修改服务器时间,模拟kubelet
证书即将到期
[root@kcs-dj-test-s-nckbn /]# cd /var/lib/kubelet/pki/
[root@kcs-dj-test-s-nckbn /var/lib/kubelet/pki]# ls
kubelet-client-2022-09-13-19-35-20.pem kubelet-client-current.pem kubelet.crt kubelet.key
[root@kcs-dj-test-s-nckbn /var/lib/kubelet/pki]# openssl x509 -in kubelet-client-current.pem -noout -dates
notBefore=Sep 13 11:30:20 2022 GMT
notAfter=Sep 13 11:30:20 2023 GMT
[root@kcs-dj-test-s-nckbn /var/lib/kubelet/pki]# date
Tue Sep 13 20:29:14 CST 2022
[root@kcs-dj-test-s-nckbn /var/lib/kubelet/pki]# date -s "2023-09-10"
Sun Sep 10 00:00:00 CST 2023
[root@kcs-dj-test-s-nckbn /var/lib/kubelet/pki]# date
Sun Sep 10 00:00:05 CST 2023
[root@kcs-dj-test-s-nckbn /var/lib/kubelet/pki]# systemctl restart kubelet.service
# 模拟即将到期
[root@kcs-dj-test-s-nckbn /var/lib/kubelet/pki]# openssl x509 -in kubelet-client-current.pem -noout -dates
notBefore=Sep 13 11:45:17 2022 GMT #开始时间是controller-manager pod 内时间
notAfter=Sep 13 17:55:32 2032 GMT
更新kubectl certificate approve <CSR-名称>
[root@kcs-dj-test-m-4vdkh /]# kubectl get csr| grep -v "Approved,Issued"
NAME AGE SIGNERNAME REQUESTOR CONDITION
csr-9bspk 2m4s kubernetes.io/kube-apiserver-client-kubelet system:node:kcs-dj-test-s-nckbn Pending
csr-tn2kf 101s kubernetes.io/kube-apiserver-client-kubelet system:node:kcs-dj-test-s-nckbn Pending
csr-v779j 113s kubernetes.io/kube-apiserver-client-kubelet system:node:kcs-dj-test-s-nckbn Pending
[root@kcs-dj-test-m-4vdkh /]# kubectl certificate approve csr-9bspk csr-tn2kf csr-v779j
certificatesigningrequest.certificates.k8s.io/csr-9bspk approved
certificatesigningrequest.certificates.k8s.io/csr-tn2kf approved
certificatesigningrequest.certificates.k8s.io/csr-v779j approved
[root@kcs-dj-test-m-4vdkh /]# kubectl get csr| grep -v "Approved,Issued"
NAME AGE SIGNERNAME REQUESTOR CONDITION
清理之前授权csr kubectl certificate deny <CSR-名称>
避免通过使用过期的pem
,更改系统时间,攻击apiserver
1.本身 kubelet 证书滚动更新都比较集中,如果遇到滚动更新节点失败,需要收到 更改 kubelet.conf 再重启实例 2.kubectl certificate approve 监听 csr是被授权使用,可定时授权
「如果这篇文章对你有用,请随意打赏」
如果这篇文章对你有用,请随意打赏
使用微信扫描二维码完成支付