kubernetes 证书续签

kubernetes 证书续签

K8s证书一般分为两套:

K8s组件(apiserver)和 Etcd

按角色来分:

管理节点 和 工作节点

管理节点:

如果使用kubeadm 部署则自动生成 。

如果是二进制部署一般由cfss或者 openssl生成。

工作节点:

主要是指kubelet 连接apiserver 所需要的客户端证书,这个证书由controller-manager 组件自动颁发,默认是一年,如果到期,kubelet将无法使用过期的证书连接apiserver,从而导致无法正常工作,日志会给出证书过期错误(x509: certificate has expired or is not yet valid)

kubernetes 证书续签

下面按照两种部署方式来阐述 证书的续签

kubeadm 部署方式续签:

#先看 下kubeadm 客户端证书过期时间:

kubeadm alpha certs check-expiration

kubernetes 证书续签

– 管理节点:[ – 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 工具去签发的,有待考证

本文版权归 飞翔沫沫情 作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 如有问题, 可发送邮件咨询,转贴请注明出处:https://www.fxkjnj.com/2556/

发表评论

登录后才能评论