kubernetes 证书续签
K8s证书一般分为两套:
K8s组件(apiserver)和 Etcd
按角色来分:
管理节点 和 工作节点
管理节点:
如果使用kubeadm 部署则自动生成 。
如果是二进制部署一般由cfss或者 openssl生成。
工作节点:
主要是指kubelet 连接apiserver 所需要的客户端证书,这个证书由controller-manager 组件自动颁发,默认是一年,如果到期,kubelet将无法使用过期的证书连接apiserver,从而导致无法正常工作,日志会给出证书过期错误(x509: certificate has expired or is not yet valid)

下面按照两种部署方式来阐述 证书的续签
kubeadm 部署方式续签:
#先看 下kubeadm 客户端证书过期时间:
kubeadm alpha certs check-expiration

– 管理节点:[ – kube-apiserver (127.0.0.1:8080 , IP:6443)
– kube-controller-manager
– kube-scheduler]
kubeadm管理节点续签:
kubeadm alpha renew all 或者 升级k8s 版本 kubeadm upgrade 官方推荐,一年之内升级一次集群版本,还有个民间方法:修改源代码,再编译生成kubeadm
– 工作节点: [ – kubelet
– kube-proxy]
kubeadm工作节点续签:
- 1、配置kube-controller-manager 组件,从新为kubelet客户端证书颁发(如果已配置请忽略)
- 2、开启kubelet 证书轮转(如果已配置请忽略)
- 3、修改node节点时间,重启kubelet
(1)、配置kube-controller-manager 组件
[root@master-1 /]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
...
rotateCertificates: true
添加上述两个参数:
• experimental-cluster-signing-duration=87600h0m0s #为kubelet客户端证书颁发有效期10年
• feature-gates=RotateKubeletServerCertificate=true #启用server证书颁发
配置完成后,重建pod使之生效:
[root@master-1 /] kubectl delete pod kube-controller-manager-k8s-master -n kube-system
(2)、开启kubelet 证书轮转
默认kubelet证书轮转已启用:
[root@node-1 /]# vim /var/lib/kubelet/config.yaml
...
rotateCertificates: true
(3)、修改node节点时间,重启kubelet
找一台node 节点测试,先查看现有客户端证书有效期:
[root@node-1 /]# cd /var/lib/kubelet/pki
#需要有openssl 命令,没有安装openssl 即可
[root@node-1 pki ]# # openssl x509 -in kubelet-client-current.pem -noout -dates
notBefore=May 25 09:01:24 2020 GMT
notAfter=May 25 09:01:24 2021 GMT
#提示2021年5月25号到期
为了方便测试我们,修改服务器时间,模拟证书即将到期:
[root@node-1 pki ]# date -s “2021-5-20” #切记不要设置到期日
#重启kubelet 组件,他会验证当前证书有效期,并自动从kube-controller-manager 上 进行续签
[root@node-1 pki ]# systemctl restart kubelet
再查看证书有效期,可以看到已经是十年:
[root@node-1 pki ]# openssl x509 -in kubelet-client-current.pem -noout -dates
notBefore=Aug 8 15:44:55 2020 GMT
notAfter=May 23 09:05:30 2030 GMT
二进制部署方式续签:
– 管理节点:[ – kube-apiserver (127.0.0.1:8080 , IP:6443)
– kube-controller-manager
– kube-scheduler]
二进制部署管理节点续签:
证书自管理,前期部署集群时先制定好过期时间
– 工作节点: [ – kubelet
– kube-proxy]
二进制部署工作节点续签:
证书自管理,前期部署集群时先制定好过期时间
#查看下当前node节点的到期时间
[root@master-1 ssl]# openssl x509 -in kubelet-client-current.pem -noout -dates
notBefore=Dec 27 12:19:57 2020 GMT
notAfter=Dec 26 12:13:00 2025 GMT
[root@master-1 cfg]# cat kube-controller-manager.conf
KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false
--v=2
--log-dir=/opt/kubernetes/logs
--leader-elect=true
--master=127.0.0.1:8080
--bind-address=127.0.0.1
--allocate-node-cidrs=true
--cluster-cidr=10.244.0.0/16
--service-cluster-ip-range=10.0.0.0/24
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem
--cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem
--root-ca-file=/opt/kubernetes/ssl/ca.pem
--service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem
--experimental-cluster-signing-duration=87600h0m0s"
#看到配置文件里定义的也是10年,但是只有五年,当我们在使用cfssl 自建CA 机构时,设置的过期时间为10年,但是cfssl 工具有限制,最多只能签发5年证书,如果想要使用5年及以上,可以使用openssl 自签发证书,签发个100 年也没问题。
但是看了下 kube-apiserver , etcd 的证书有效期是10年 ,但是 kubelet 许可的证书只有5 年 。而且都是用的cfssl 工具去签发的,有待考证
暂无评论内容