• 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

  • 相关阅读:
    IIS支持apk文件下载
    【转】Winform输入法控制
    WebRequest请求Url中文乱码
    c#实现Form窗体始终在桌面最前端显示
    在静态页面中使用 Vue.js
    NPOI 的使用姿势
    C# 模拟 HTTP POST请求
    WinForm 绑定到嵌套对象上的属性
    彻底清除 Windows 服务
    WPF DataGrid 绑定行双击行命令
  • 原文地址:https://www.cnblogs.com/LiuChang-blog/p/15347791.html
Copyright © 2020-2023  润新知