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

原文地址:https://www.cnblogs.com/LiuChang-blog/p/15347791.html