美文网首页
【k8s】kubeadm k8s 证书过期问题处理

【k8s】kubeadm k8s 证书过期问题处理

作者: Bogon | 来源:发表于2024-08-31 14:25 被阅读0次

    一、背景

    Kubernetes集群中的各个组件(如API服务器、节点、控制器管理器等)之间使用证书进行身份验证和安全传输数据。然而,由于证书具有有效期限,一旦证书过期,集群中的组件将无法正常通信,导致应用程序无法正常运行。

    具体来说,当Kubernetes集群证书过期时,可能出现以下情况:

    • 1.kubectl命令无法连接到集群,报错“Unable to connect to the server: x509: certificate has expired or is not yet valid”。

    • 2.集群中的Pod可能无法启动或运行异常,因为Kubelet组件无法与API服务器进行通信。

    • 3.集群的监控和日志收集等功能可能受到影响,因为相关组件无法正常工作。

    kubeadm 是 Kubernetes 集群的启动和初始化工具,它在创建集群时生成 Kubernetes 集群证书,并默认设置有效期为一年。

    二、 k8s 证书介绍

    1. 查看证书剩余时间
    #  ll  -R /etc/kubernetes/pki/
    
    /etc/kubernetes/pki/:
    total 60
    -rw-r--r--. 1 root root 1233 Mar  3  2022 apiserver.crt
    -rw-r--r--. 1 root root 1090 Mar  3  2022 apiserver-etcd-client.crt
    -rw-------. 1 root root 1675 Mar  3  2022 apiserver-etcd-client.key
    -rw-------. 1 root root 1679 Mar  3  2022 apiserver.key
    -rw-r--r--. 1 root root 1099 Mar  3  2022 apiserver-kubelet-client.crt
    -rw-------. 1 root root 1679 Mar  3  2022 apiserver-kubelet-client.key
    -rw-r--r--. 1 root root 1025 Mar  3  2022 ca.crt
    -rw-------. 1 root root 1679 Mar  3  2022 ca.key
    drwxr-xr-x. 2 root root 4096 Mar  3  2022 etcd
    -rw-r--r--. 1 root root 1038 Mar  3  2022 front-proxy-ca.crt
    -rw-------. 1 root root 1675 Mar  3  2022 front-proxy-ca.key
    -rw-r--r--. 1 root root 1058 Mar  3  2022 front-proxy-client.crt
    -rw-------. 1 root root 1675 Mar  3  2022 front-proxy-client.key
    -rw-------. 1 root root 1675 Mar  3  2022 sa.key
    -rw-------. 1 root root  451 Mar  3  2022 sa.pub
    
    /etc/kubernetes/pki/etcd:
    total 32
    -rw-r--r--. 1 root root 1017 Mar  3  2022 ca.crt
    -rw-------. 1 root root 1679 Mar  3  2022 ca.key
    -rw-r--r--. 1 root root 1094 Mar  3  2022 healthcheck-client.crt
    -rw-------. 1 root root 1675 Mar  3  2022 healthcheck-client.key
    -rw-r--r--. 1 root root 1139 Mar  3  2022 peer.crt
    -rw-------. 1 root root 1675 Mar  3  2022 peer.key
    -rw-r--r--. 1 root root 1139 Mar  3  2022 server.crt
    -rw-------. 1 root root 1679 Mar  3  2022 server.key
    
    
    image.png image.png
    #  for item in `find /etc/kubernetes/pki -maxdepth 2 -name "*.crt"`; do openssl x509 -in $item -text -noout| grep Not; echo ======$item======; done
    
    image.png

    使用kubeadm certs check-expiration命令查询,这种方式仅限于使用kubeadm安装的k8s集群。
    如果使用二进制安装的,需要使用创建证书的工具去查。

    # kubeadm certs check-expiration
    
    [check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
    
    CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
    admin.conf                 Feb 29, 2032 09:13 UTC   7y                                      no
    apiserver                  Feb 29, 2032 09:13 UTC   7y              ca                      no
    apiserver-etcd-client      Feb 29, 2032 09:13 UTC   7y              etcd-ca                 no
    apiserver-kubelet-client   Feb 29, 2032 09:13 UTC   7y              ca                      no
    controller-manager.conf    Feb 29, 2032 09:13 UTC   7y                                      no
    etcd-healthcheck-client    Feb 29, 2032 09:13 UTC   7y              etcd-ca                 no
    etcd-peer                  Feb 29, 2032 09:13 UTC   7y              etcd-ca                 no
    etcd-server                Feb 29, 2032 09:13 UTC   7y              etcd-ca                 no
    front-proxy-client         Feb 29, 2032 09:13 UTC   7y              front-proxy-ca          no
    scheduler.conf             Feb 29, 2032 09:13 UTC   7y                                      no
    
    CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
    ca                      Feb 29, 2032 09:13 UTC   7y              no
    etcd-ca                 Feb 29, 2032 09:13 UTC   7y              no
    front-proxy-ca          Feb 29, 2032 09:13 UTC   7y              no
    
    

    title栏含义:

    CERTIFICATE:这是指具体的证书名称
    EXPIRES:这表示证书的到期日期和时间
    RESIDUAL TIME:这是证书剩余的有效期。例如,330d表示还有 330 天到期
    CERTIFICATE AUTHORITY:签发该证书的证书颁发机构(CA)的名称。例如,apiserver 证书的签发者是 ca
    EXTERNALLY MANAGED:这表示证书是否由外部管理。如果标记为 no,则表明 kubeadm 管理这些证书。如果标记为 yes,则表明证书可能由其他工具或方法管理

    证书作用:

    admin.conf
    作用:用于管理员与Kubernetes API服务器进行交互的身份验证。这个配置文件包含了访问API服务器所需的证书和密钥。

    apiserver
    作用:安全通信:API服务器使用此证书与其他集群组件(如kubelet、控制器管理器等)进行TLS加密通信。
    身份验证:确保只有授权的客户端可以访问API服务器。

    apiserver-etcd-client
    作用:API服务器用于与etcd集群通信的客户端证书,确保API服务器与etcd之间的通信是加密和安全的。

    apiserver-kubelet-client
    作用:API服务器用于与kubelet通信的客户端证书,确保API服务器可以安全地与集群中的节点进行通信。

    controller-manager.conf
    作用:控制器管理器用于与API服务器交互的身份验证证书,确保控制器管理器可以访问和操作集群资源。

    etcd-healthcheck-client
    作用:用于etcd健康检查的客户端证书,确保可以安全地检查etcd集群的健康状态。

    etcd-peer
    作用:etcd集群中节点之间通信的证书,确保etcd集群内部的通信是加密和安全的。

    etcd-server
    作用:etcd服务器用于与客户端通信的证书,确保etcd服务器可以安全地与集群中的其他组件进行通信。

    front-proxy-client
    作用:前端代理客户端证书,用于与API服务器进行身份验证,通常与某些代理或负载均衡器相关。

    scheduler.conf
    作用:调度器用于与API服务器交互的身份验证证书,确保调度器可以访问和操作集群资源。

    根证书:

    ca(Certificate Authority)
    作用:根证书颁发机构,用于签发和验证集群中其他所有证书的有效性。这是整个证书信任链的起点。

    etcd-ca
    作用:etcd集群的根证书颁发机构,专门用于签发和验证etcd相关的证书。

    front-proxy-ca
    作用:前端代理的根证书颁发机构,用于签发和验证与前端代理相关的证书。

    三、 更新证书前备份

    操作对象: 所有 master节点

    # cp -pr /var/lib/kubelet/   /var/lib/kubelet.20240831001
    # cp -pr  /var/lib/etcd/   /var/lib/etcd.20240831001
    # cp -pr /etc/kubernetes/ /etc/kubernetes.20240831001
    

    四 、更新证书操作

    如果证书过期的话,就会出现以下情况:

    #  kubectl get pod -n kube-system
    Unable to connect to the server: x509: certificate has expired or is not yet valid
    

    此类情况,你需要先将所有master节点的的时间修改为证书过期前,临时骗过k8s集群:

    # timedatectl  set-time "2024-08-11 21:47:00"
    

    在 master01:

    #  kubectl -n kube-system get cm kubeadm-config -o yaml > kubeadm-config.yaml
    
    # kubeadm config view > kubeadm-cluster.yaml
    # kubeadm certs renew all --config=kubeadm-cluster.yaml
    
    # rm -f /etc/kubernetes/*.conf
    # kubeadm init phase kubeconfig all --config kubeadm-cluster.yaml
    
    # docker ps |egrep "k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd" | awk '{print $1}' | xargs docker restart
    
    # echo yes  | cp  -i  /etc/kubernetes/admin.conf    ~/.kube/config  
    # chown    $(id -u):$(id -g)    ~/.kube/config
    
    # kubectl  get nodes  -o wide 
    

    查看master01 节点证书是否更新ok:

    # kubeadm certs check-expiration
    
    #  for item in `find /etc/kubernetes/pki -maxdepth 2 -name "*.crt"`; do openssl x509 -in $item -text -noout| grep Not; echo ======$item======; done
    

    将master01 上的 kubeadm-cluster.yaml 文件拷贝分发到其他master,然后在其他maser节点逐个操作:

    # kubeadm certs renew all --config=kubeadm-cluster.yaml
    
    # rm -f /etc/kubernetes/*.conf
    # kubeadm init phase kubeconfig all --config kubeadm-cluster.yaml
    
    # docker ps |egrep "k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd" | awk '{print $1}' | xargs docker restart
    
    # echo yes  | cp  -i  /etc/kubernetes/admin.conf    ~/.kube/config  
    # chown    $(id -u):$(id -g)    ~/.kube/config
    
    
    # kubeadm certs check-expiration
    #  for item in `find /etc/kubernetes/pki -maxdepth 2 -name "*.crt"`; do openssl x509 -in $item -text -noout| grep Not; echo ======$item======; done
    

    所有master节点都证书都更新完成后,将所有master节点的服务器时间修改正确。

    # timedatectl  set-time "2024-08-31 21:47:00"
    # hwclock -w
    

    所有master节点都证书都更新完成后,可以考虑逐个将master节点上 docker kubelet 重启一下:

    # systemctl restart  docker  
    # systemctl  restart kubelet 
    
    #  systemctl  status  docker  
    # systemctl   status  kubelet 
    

    五、 参考

    kubeadm安装k8s集群证书过期更新
    https://mp.weixin.qq.com/s/cMAIqmg0z_6kgYpUcWMAkw

    kubesphere 证书 过期 和 kubernets 证书 kubeadm证书续期
    https://blog.51cto.com/u_16213606/10794928

    kubeadm 初始化 k8s 证书过期解决方案
    https://developer.aliyun.com/article/1478412

    用kubeadmin安装的k8s集群,基于静态pod运行的etcd
    https://www.jianshu.com/p/c481543002c8

    Kubernetes 集群证书过期处理方法
    https://mp.weixin.qq.com/s/jw1XDyEbzOZ0xzVYsGDG7Q

    Kubernetes集群证书过期或延期操作处理实践指南
    https://mp.weixin.qq.com/s/BCXTk_pMmTLLxlB5JqLM1w

    基础设施之用脚本处理k8s证书
    https://mp.weixin.qq.com/s/4Xvlfbj-K98eR_sx7mN2_Q

    相关文章

      网友评论

          本文标题:【k8s】kubeadm k8s 证书过期问题处理

          本文链接:https://www.haomeiwen.com/subject/zfrqljtx.html