zoukankan      html  css  js  c++  java
  • Kubernetes v1.13.0 证书升级详解

     查看证书有效期

    # 查询api-server证书有效期
    openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep Not
    # 查询所有证书有效期 for tls in `find /etc/kubernetes/pki -maxdepth 2 -name "*.crt"`; do echo ===============$tls===============; openssl x509 -in $tls -text| grep Not; done
    ===============/etc/kubernetes/pki/front-proxy-ca.crt===============
                Not Before: Aug  7 06:10:58 2020 GMT
                Not After : Aug  5 06:10:58 2030 GMT
    ===============/etc/kubernetes/pki/etcd/server.crt===============
                Not Before: Aug  7 06:10:57 2020 GMT
                Not After : Mar 10 02:49:33 2022 GMT
    ===============/etc/kubernetes/pki/etcd/healthcheck-client.crt===============
                Not Before: Aug  7 06:10:57 2020 GMT
                Not After : Mar 10 02:49:33 2022 GMT
    ===============/etc/kubernetes/pki/etcd/ca.crt===============
                Not Before: Aug  7 06:10:57 2020 GMT
                Not After : Aug  5 06:10:57 2030 GMT
    ===============/etc/kubernetes/pki/etcd/peer.crt===============
                Not Before: Aug  7 06:10:57 2020 GMT
                Not After : Mar 10 02:49:34 2022 GMT
    ===============/etc/kubernetes/pki/apiserver-etcd-client.crt===============
                Not Before: Aug  7 06:10:57 2020 GMT
                Not After : Mar 10 02:49:34 2022 GMT
    ===============/etc/kubernetes/pki/ca.crt===============
                Not Before: Aug  7 06:10:58 2020 GMT
                Not After : Aug  5 06:10:58 2030 GMT
    ===============/etc/kubernetes/pki/apiserver-kubelet-client.crt===============
                Not Before: Aug  7 06:10:58 2020 GMT
                Not After : Mar 10 02:49:35 2022 GMT
    ===============/etc/kubernetes/pki/front-proxy-client.crt===============
                Not Before: Aug  7 06:10:58 2020 GMT
                Not After : Mar 10 02:49:33 2022 GMT
    ===============/etc/kubernetes/pki/apiserver.crt===============
                Not Before: Aug  7 06:10:58 2020 GMT
                Not After : Mar 10 02:49:34 2022 GMT

    #################  master ###################

    1、备份已有配置

    cp -r /etc/kubernetes  /etc/kubernetes_old

    2、获取集配配置

    # 证书即将过期(未过期),可以利用命令直接获取集群配置
    kubeadm config view > kubeadm-upgrade.yaml
    
    # 如果证书已过期,可以手动编写集群配置
    vim kubeadm-upgrade.yaml
    
    apiVersion: kubeadm.k8s.io/v1beta1
    imageRepository: k8s.gcr.io
    kind: ClusterConfiguration
    kubernetesVersion: v1.13.0

    3、更新所有证书

    # 根据配置文件,更新所有证书
    kubeadm alpha certs renew all --config kubeadm-upgrade.yaml
    
    # 再次查看证书有效期
    openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '

    4、更新集群配置

    # 删除已有配置(已备份,无需担心)
    rm -rf /etc/kubernetes/*.conf
    
    # 根据配置文件,重新生成所有配置
    kubeadm init phase kubeconfig all --config kubeadm-upgrade.yaml --node-name <节点名称> --apiserver-advertise-address <集群VIP>
    
    # 更新kubectl配置并赋予权限
    cp /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config

    5、重启核心组件容器

    docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart

    systemctl restart kubelet
    # 查看节点和所有服务是否正常
    kubectl get nodes
    kubectl get pods --all-namespaces

     注意:kubelet.conf 中 <nodeName> 的值 必须 与 kubelet 向 apiserver 注册时提供的节点名称的值完全匹配。(一种是传递参数--node-name指定节点名称,一种是修改hostname与nodename一致)


    #################  node  ###################

    1、备份kubelet配置

    cp /etc/kubernetes/kubelet.conf  /etc/kubernetes/kubelet.conf_bak

    2、更新kubelet配置

    # 重新生成节点kubelet配置
    kubeadm init phase kubeconfig kubelet --node-name <节点名称> --kubeconfig-dir /tmp/ --apiserver-advertise-address <集群VIP>
    
    # 更新节点kubelet配置
    scp /tmp/kubelet.conf root@<节点名称>:/etc/kubernetes/
    
    # 重启节点kubelet
    systemctl restart kubelet

    #################  crontab  ###################

    注意:在首次升级完证书后,证书到期需要手动重启kubelet,否则kubelet无法识别新证书,

    并且在到期之前重启是无效的,这将要求我们必须卡在那个到期时间点重启,否则影响集群使用,

    此问题目前还未找到问题源,所以使用临时方案添加定时任务crontab,注意事项:

    1、证书有效期时间时区为+0000,我们设置定时任务需要根据系统时区计算实际时间

    2、定时任务时间大于到期时间,最好就是到期后下一分钟

    3、定时任务需要设置所有节点,并且核对所有节点系统时间

    # 查看系统时间和时区
    date -R && crontab -l
    # 计算并设置定时任务
    crontab -e
    42 13 21 5 5 systemctl restart kubelet

    实战日志(以下通过更改系统时间,模拟证书过期)

    [root@192 k8s]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep 'Not After'
                Not After : Apr 12 07:01:12 2022 GMT
    [root@192 k8s]# ls /etc/kubernetes
    admin.conf  controller-manager.conf  kubelet.conf  manifests  pki  scheduler.conf
    [root@192 k8s]# date -s "2022-3-12"
    Sat Mar 12 00:00:00 PST 2022
    [root@192 k8s]# kubectl get pod --all-namespaces
    NAMESPACE       NAME                                        READY   STATUS    RESTARTS   AGE
    ingress-nginx   nginx-ingress-controller-77b474c665-lh8tt   1/1     Running   0          334d
    kube-system     coredns-86c58d9df4-7bq94                    1/1     Running   0          334d
    kube-system     coredns-86c58d9df4-dm6jb                    1/1     Running   0          334d
    kube-system     etcd-192.168.73.129                         1/1     Running   0          334d
    kube-system     heapster-7856548f99-2l8fp                   1/1     Running   0          334d
    kube-system     kube-apiserver-192.168.73.129               1/1     Running   0          334d
    kube-system     kube-controller-manager-192.168.73.129      1/1     Running   0          334d
    kube-system     kube-flannel-ds-amd64-qcmbq                 1/1     Running   0          334d
    kube-system     kube-proxy-kh7xn                            1/1     Running   0          334d
    kube-system     kube-scheduler-192.168.73.129               1/1     Running   0          334d
    kube-system     nvidia-device-plugin-daemonset-6xzxj        1/1     Running   0          334d
    [root@192 k8s]#
    [root@192 k8s]# kubeadm config view > kubeadm-upgrade.yaml
    [root@192 k8s]# kubeadm alpha certs renew all --config kubeadm-upgrade.yaml
    [root@192 k8s]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep 'Not After'
                Not After : Mar 12 08:00:22 2023 GMT
    [root@192 k8s]#
    [root@192 k8s]# rm -rf /etc/kubernetes/*.conf
    [root@192 k8s]# kubeadm init phase kubeconfig all --config kubeadm-upgrade.yaml --node-name 192.168.73.129
    [kubeconfig] Using kubeconfig folder "/etc/kubernetes"
    [kubeconfig] Writing "admin.conf" kubeconfig file
    [kubeconfig] Writing "kubelet.conf" kubeconfig file
    [kubeconfig] Writing "controller-manager.conf" kubeconfig file
    [kubeconfig] Writing "scheduler.conf" kubeconfig file
    [root@192 k8s]#
    [root@192 k8s]# cp /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@192 k8s]# docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd'
    85a67efc7369        f1ff9b7e3d6e           "kube-apiserver --au…"   9 months ago        Up 9 months                             k8s_kube-apiserver_kube-apiserver-......
    66a23ae913ac        3cab8e1b9802           "etcd --advertise-cl…"   9 months ago        Up 9 months                             k8s_etcd_etcd-......
    f614aae9b68f        9508b7d8008d           "kube-scheduler --ad…"   9 months ago        Up 9 months                             k8s_kube-scheduler_kube-scheduler-......
    fb9d59c857ee        d82530ead066           "kube-controller-man…"   9 months ago        Up 9 months                             k8s_kube-controller-manager_kube-controller-manager-......
    [root@192 k8s]# docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart
    b53d7fb8e1db
    c7b6ae222bc1
    15707e4219d9
    110e23ea3b00
    [root@192 k8s]# date -s "2023-2-12"
    Sun Feb 12 00:00:00 PST 2023
    [root@192 k8s]# systemctl restart kubelet
    [root@192 k8s]# kubectl get pod --all-namespaces
    NAMESPACE       NAME                                        READY   STATUS    RESTARTS   AGE
    ingress-nginx   nginx-ingress-controller-77b474c665-lh8tt   1/1     Running   0          671d
    kube-system     coredns-86c58d9df4-7bq94                    1/1     Running   0          671d
    kube-system     coredns-86c58d9df4-dm6jb                    1/1     Running   0          671d
    kube-system     etcd-192.168.73.129                         1/1     Running   0          671d
    kube-system     heapster-7856548f99-2l8fp                   1/1     Running   0          671d
    kube-system     kube-apiserver-192.168.73.129               1/1     Running   0          671d
    kube-system     kube-controller-manager-192.168.73.129      1/1     Running   0          671d
    kube-system     kube-flannel-ds-amd64-qcmbq                 1/1     Running   0          671d
    kube-system     kube-proxy-kh7xn                            1/1     Running   0          671d
    kube-system     kube-scheduler-192.168.73.129               1/1     Running   0          671d
    kube-system     nvidia-device-plugin-daemonset-6xzxj        1/1     Running   0          671d
    [root@192 k8s]# kubectl get node
    NAME             STATUS   ROLES    AGE    VERSION
    192.168.73.129   Ready    master   671d   v1.13.0

     

    参考>>> https://blog.csdn.net/lihongbao80/article/details/109001639

    作者:Leozhanggg

    出处:https://www.cnblogs.com/leozhanggg/p/14648636.html

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    11111
    单例-Singleton-03
    单例-Singleton-02
    单例-Singleton-01
    load和initialize
    OC中的static-01
    GCD-06
    GCD-05
    GCD-03
    UIView-01
  • 原文地址:https://www.cnblogs.com/leozhanggg/p/14648636.html
Copyright © 2011-2022 走看看