Skip to content

文档,https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal

基于kubeadm部署的 Kubernetes 集群,默认证书有效期是一年,如果不及时更新证书,就会导致一系列问题和影响,包括:

  1. 节点通信受阻:证书到期后,节点之间的安全通信可能会受到影响,这可能导致节点无法相互通信或者无法加入集群。
  2. API服务器访问受限:API服务器使用证书进行身份验证和安全通信。如果证书过期,可能会导致客户端无法连接到API服务器,从而影响管理和监控集群的能力。
  3. TLS连接问题:集群中的各种服务和组件可能会使用TLS证书进行加密通信。证书过期可能导致服务之间的通信出现问题,从而影响应用程序的正常运行。
  4. 自动扩展和自动修复受影响:某些自动化功能,如水平扩展和自动修复,可能依赖于与Kubernetes API服务器的通信。证书过期可能会影响这些功能的正常运行。
  5. 安全风险增加:证书过期可能会增加安全风险,因为过期的证书可能会被恶意利用,攻击者可以使用它们来尝试入侵集群或窃取数据

1.更新证书

当前环境是基于etcd集群部署在k8s集群内的操作方法。如果是部署的外置etcd集群,则建议使用手动更新方式。

1.1查看证书到期时间

shell
 kubeadm certs check-expiration
 kubeadm certs check-expiration

1.2方法一:脚本自动更新

k8s集群1.15版本以上支持此脚本自动化更新。(此证书更新后有效期10年)

shell
同时更新etcd证书和master证书(每个master节点都需要执行一次)

#在每台master上执行以下命令
./update-kubeadm-cert.sh all
同时更新etcd证书和master证书(每个master节点都需要执行一次)

#在每台master上执行以下命令
./update-kubeadm-cert.sh all

1.3方法二:手动更新

1.备份老的证书及配置

shell
cp -r /etc/kubernetes  /etc/kubernetes_back
cp -r /etc/kubernetes  /etc/kubernetes_back

2.生成集群配置文件

集群安装时的初始化生成的部署配置文件:kubeadmin.yaml

3.续期证书

shell
kubeadm certs renew all --config=/root/kubeadmin.yaml
#执行上面命令后,需要重启对应pod才能生效kube-apiserver, kube-controller-manager, kube-scheduler and etcd
kubeadm certs renew all --config=/root/kubeadmin.yaml
#执行上面命令后,需要重启对应pod才能生效kube-apiserver, kube-controller-manager, kube-scheduler and etcd

注意:需要拷贝新证书到其他master节点

shell
rsync -avP /etc/kubernetes/pki/ k8s-master-03:/etc/kubernetes/pki/
rsync -avP /etc/kubernetes/pki/ k8s-master-02:/etc/kubernetes/pki/
rsync -avP /etc/kubernetes/pki/ k8s-master-03:/etc/kubernetes/pki/
rsync -avP /etc/kubernetes/pki/ k8s-master-02:/etc/kubernetes/pki/

4.重新生成配置文件

shell
# cd /etc/kubernetes
# ls *conf
# rm -rf *conf
# kubeadm init phase kubeconfig all --config=/root/kubeadmin.yaml
# cd /etc/kubernetes
# ls *conf
# rm -rf *conf
# kubeadm init phase kubeconfig all --config=/root/kubeadmin.yaml

5.复制新的认证文件(在所有master上执行,使证书生效)

shell
# rm -rf ~/.kube

# mkdir -p $HOME/.kube

# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# rm -rf ~/.kube

# mkdir -p $HOME/.kube

# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# sudo chown $(id -u):$(id -g) $HOME/.kube/config

6.重启kubelet、apiserver、controller-manager、scheduler、etcd(在所有master上执行,使证书生效)

shell
# kubectl delete pod -nkube-system kube-apiserver-k8s-master-01 kube-apiserver-k8s-master-02 kube-apiserver-k8s-master-03
kubectl delete pod -nkube-system kube-controller-manager-k8s-master-01 kube-controller-manager-k8s-master-02 kube-controller-manager-k8s-master-03
kubectl delete pod -nkube-system kube-scheduler-k8s-master-01 kube-scheduler-k8s-master-02 kube-scheduler-k8s-master-03

#删除etcd对应的pod
kubectl delete pod -nkube-system etcdxxx xxx xxx
# kubectl delete pod -nkube-system kube-apiserver-k8s-master-01 kube-apiserver-k8s-master-02 kube-apiserver-k8s-master-03
kubectl delete pod -nkube-system kube-controller-manager-k8s-master-01 kube-controller-manager-k8s-master-02 kube-controller-manager-k8s-master-03
kubectl delete pod -nkube-system kube-scheduler-k8s-master-01 kube-scheduler-k8s-master-02 kube-scheduler-k8s-master-03

#删除etcd对应的pod
kubectl delete pod -nkube-system etcdxxx xxx xxx

7.检查每个master的证书有效期

shell
for i in `find /etc/kubernetes/pki -name "*.crt"`;do openssl x509 -in $i -text -noout| grep Not;echo $i;done
for i in `find /etc/kubernetes/pki -name "*.crt"`;do openssl x509 -in $i -text -noout| grep Not;echo $i;done