设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 1686|回复: 2
收起左侧

[分享] kubernetes(1.23)证书过期如何续期

[复制链接]
发表于 2022-4-28 11:29:21 | 显示全部楼层 |阅读模式
1.实验目的
[color=rgba(0, 0, 0, 0.8)]通过kubeadm安装的kubernetes集群各个组件所使用证书的期限为1年,本实验练习的是到期之后如何续期。
2.实验环境
[color=rgba(0, 0, 0, 0.8)]kubernetes环境及版本
整个实验两台机器vms28.rhce.cc作为master,vms29.rhce.cc是worker。kubernetes的版本是1.23.1。
root@vms28:~# kubectl get nodesNAME            STATUS   ROLES                  AGE    VERSIONvms28.rhce.cc   Ready    control-plane,master   172d   v1.23.1vms29.rhce.cc   Ready    <none>                 172d   v1.23.1root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]所使用系统为Ubuntu 18.04。
root@vms28:~# lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription:    Ubuntu 18.04.5 LTSRelease:    18.04Codename:   bionicroot@vms28:~# 3.实验步骤1.查看证书过期时间
[color=rgba(0, 0, 0, 0.8)]在master上查看各证书的过期时间。
root@vms28:~# kubeadm certs check-expiration
[color=rgba(0, 0, 0, 0.8)]查看master(vms28.rhce.cc)上kubelet证书的过期时间。
root@vms28:~# ls /var/lib/kubelet/pki/kubelet-client-2021-11-04-03-44-16.pem kubelet-client-current.pem  kubelet.crt  kubelet.keyroot@vms28:~#root@vms28:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep Not            Not Before: Nov  3 19:44:13 2021 GMT            Not After : Nov  3 19:44:15 2022 GMTroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]这里可以看到过期时间在2022年11月3日。
查看worker(vms29.rhce.cc)上kubelet证书的过期时间。
root@vms29:~# ls /var/lib/kubelet/pki/kubelet-client-2021-11-04-03-45-46.pem  kubelet-client-current.pem  kubelet.crt  kubelet.keyroot@vms29:~# root@vms29:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep Not            Not Before: Nov  3 19:40:46 2021 GMT            Not After : Nov  3 19:40:46 2022 GMTroot@vms29:~#
[color=rgba(0, 0, 0, 0.8)]这里可以看到过期时间在2022年11月3日。
2.模拟证书过期
[color=rgba(0, 0, 0, 0.8)]把所有系统的时间改为2023年3月27日,在xshell的撰写栏输入命令 。
timedatectl set-ntp false ; date -s "2023-03-27 10:00:00" ; hwclock -w
[color=rgba(0, 0, 0, 0.8)]目的是能够让命令在两台机器上同时执行,这样两台机器的时间可以保持一致。
[color=var(--theme-color)]

在vms28上确认当前时间
root@vms28:~# dateMon Mar 27 10:00:13 CST 2023root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]再次执行kubectl命令。
root@vms28:~# kubectl get nodesUnable to connect to the server: x509: certificate has expired or is not yet valid: current time 2023-03-27T10:00:27+08:00 is after 2023-03-23T08:09:22Zroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]可以看到现在kubectl已经没法正常使用了,提示证书过期。
3.轮换master上证书
[color=rgba(0, 0, 0, 0.8)]在master(vms28.rhce.cc)续签所有证书。
root@vms28:~# kubeadm certs renew all[renew Reading configuration from the cluster...[renew FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'    ...输出...Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]在master(vms28.rhce.cc)再次查看证书过期日期。
root@vms28:~# kubeadm certs check-expiration
[color=rgba(0, 0, 0, 0.8)][color=var(--theme-color)]
可以看到过期时间现在已经是1年后了,即到2024年3月26日过期。
[color=rgba(0, 0, 0, 0.8)]当前kubernetes各组件所使用的kubeconfig在/etc/kubernetes/里。
root@vms28:~# ls /etc/kubernetes/admin.conf controller-manager.conf kubelet.conf  manifests  pki  scheduler.conf  tmproot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]这些文件里所用到的证书均是之前过期的证书,所以需要把所有的这些kubeconfig文件(后缀为conf)删除重新生成。
root@vms28:~# rm -rf /etc/kubernetes/*.confroot@vms28:~# root@vms28:~# ls /etc/kubernetes/manifests  pki  tmproot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]为这些组件重新生成kubeconfig文件。
root@vms28:~# kubeadm init --kubernetes-version=v1.23.1  phase kubeconfig all[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 fileroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]查看是否生成出来了新的配置文件。
root@vms28:~# ls /etc/kubernetes/admin.conf controller-manager.conf  kubelet.conf  manifests  pki  scheduler.conf  tmproot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]这里也生成了kubelet所需要的kubeconfig文件,就是上面的kubelet.conf。
[color=rgba(0, 0, 0, 0.8)]重新拷贝管理员所用的新的kubeconfig文件。
root@vms28:~# cp /etc/kubernetes/admin.conf ~/.kube/configroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]重启kube-scheduler。
root@vms28:~# docker rm -f $(docker ps | awk '/kube-scheduler /{print $1}')d28a97590ac2root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]等待kube-scheduler彻底启动起来,即状态为1/1。
root@vms28:~# kubectl get pods -n kube-system | grep schedulerkube-scheduler-vms28.rhce.cc               1/1     Running   ...root@vms28:~# 4.轮换kubelet证书轮换master上的kubelet证书
[color=rgba(0, 0, 0, 0.8)]查看kubelet当前所使用的证书。
root@vms28:~# ls /var/lib/kubelet/pki/kubelet-client-2021-11-04-03-44-16.pem  kubelet-client-current.pem  kubelet.crt  kubelet.keyroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]这里kubelet-client-current.pem是软连接到kubelet-client-2021-11-04-03-44-16.pem的,使用的仍然是旧证书。
[color=rgba(0, 0, 0, 0.8)]因为前面已经重新生成了kubelet.conf,现在重启kubelet。
root@vms28:~# systemctl restart kubeletroot@vms28:~# ls /var/lib/kubelet/pki/kubelet-client-2021-11-04-03-44-16.pem  kubelet-client-current.pem  kubelet.keykubelet-client-2023-03-27-10-05-44.pem  kubelet.crtroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]这里kubelet-client-2023-03-27-10-05-44.pem是新颁发的证书。
root@vms28:~# ls -l /var/lib/kubelet/pki/kubelet-client-current.pem lrwxrwxrwx 1 root root 59 Mar 27 10:05 /var/lib/kubelet/pki/kubelet-client-current.pem -> /var/lib/kubelet/pki/kubelet-client-2023-03-27-10-05-44.pemroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]此时kubelet-client-current.pem是软连接到kubelet-client-2023-03-27-10-05-44.pem的。
[color=rgba(0, 0, 0, 0.8)]在master上查看证书签名请求(简称为CSR)。
root@vms28:~# kubectl get csrNAME        AGE    SIGNERNAME       REQUESTOR     REQUESTEDDURATION   CONDITIONcsr-rn8xc   2m8s   kubernetes.io/kube-apiserver-client-kubelet   system:node:vms28.rhce.cc   <none>              Pendingroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]然后批准此CSR。
root@vms28:~# kubectl certificate approve csr-rn8xccertificatesigningrequest.certificates.k8s.io/csr-rn8xc approvedroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]查看当前kubelet证书的过期时间。
root@vms28:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep Not            Not Before: Nov  3 19:44:13 2021 GMT            Not After : Mar 26 02:04:42 2024 GMTroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]这里显示过期时间到2023年3月26日。
轮换worker上的kubelet证书
[color=rgba(0, 0, 0, 0.8)]查看当前vms29上的kubelet证书
root@vms29:~# ls /var/lib/kubelet/pki/kubelet-client-2021-11-04-03-45-46.pem  kubelet-client-current.pem  kubelet.crt  kubelet.keyroot@vms29:~#
[color=rgba(0, 0, 0, 0.8)]这里显示的还是之前的旧的证书。
在master(vms28)上生成worker所需要的kubelet.conf临时放在/tmp下,这里先清空/tmp里的内容
root@vms28:~# rm -rf /tmp/* ;  ls /tmp/root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]生成vms29所需要的kubelet.conf文件。
root@vms28:~# kubeadm init --kubernetes-version=v1.23.1 phase kubeconfig kubelet --node-name vms29.rhce.cc --kubeconfig-dir /tmp/[kubeconfig Writing "kubelet.conf" kubeconfig fileroot@vms28:~# root@vms28:~# ls /tmp/kubelet.confroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]把此文件拷贝到vms29上的/etc/kubernetes/目录里覆盖原来的kubelet.conf。
root@vms28:~# scp /tmp/kubelet.conf 192.168.26.29:/etc/kubernetes/root@192.168.26.29's password: kubelet.conf                                                                     100% 5685     4.7MB/s   00:00    root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]切换到vms29,重启kubelet
root@vms29:~# systemctl restart kubeletroot@vms29:~#
[color=rgba(0, 0, 0, 0.8)]再次查看证书
root@vms29:~# ls /var/lib/kubelet/pki/kubelet-client-2021-11-04-03-45-46.pem  kubelet-client-current.pem  kubelet.keykubelet-client-2023-03-27-10-12-18.pem  kubelet.crtroot@vms29:~#
[color=rgba(0, 0, 0, 0.8)]此时已经生成了新的证书kubelet-client-2023-03-27-10-12-18.pem,且kubelet-client-current.pem是连接到此证书的。
root@vms29:~# ls -l /var/lib/kubelet/pki/kubelet-client-current.pem ...输出10:12 /var/lib/kubelet/pki/kubelet-client-current.pem -> /var/lib/kubelet/pki/kubelet-client-2023-03-27-10-12-18.pemroot@vms29:~#
[color=rgba(0, 0, 0, 0.8)]查看kubelet证书的过期时间。
root@vms29:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep Not            Not Before: Nov  3 19:44:13 2021 GMT            Not After : Mar 26 02:10:27 2024 GMTroot@vms29:~#
[color=rgba(0, 0, 0, 0.8)]这里显示过期时间为2024年3月26日。
[color=rgba(0, 0, 0, 0.8)]切换到master(vms28)上,查看CSR。
root@vms28:~# kubectl get csrNAME        AGE    SIGNERNAME                                    REQUESTOR                   REQUESTEDDURATION   CONDITIONcsr-hnjzh   32s    kubernetes.io/kube-apiserver-client-kubelet   system:node:vms29.rhce.cc   <none>              Pendingcsr-rn8xc   7m5s   kubernetes.io/kube-apiserver-client-kubelet   system:node:vms28.rhce.cc   <none>              Approvedroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]批准vms29的这个证书签名请求CSR。
root@vms28:~# kubectl certificate approve csr-hnjzhcertificatesigningrequest.certificates.k8s.io/csr-hnjzh approvedroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]查看现在所有的CSR。
root@vms28:~# kubectl get csrNAME        AGE     SIGNERNAME                                    REQUESTOR                   REQUESTEDDURATION   CONDITIONcsr-hnjzh   51s     kubernetes.io/kube-apiserver-client-kubelet   system:node:vms29.rhce.cc   <none>              Approvedcsr-rn8xc   7m24s   kubernetes.io/kube-apiserver-client-kubelet   system:node:vms28.rhce.cc   <none>              Approvedroot@vms28:~#
[color=rgba(0, 0, 0, 0.8)]所有的CSR已经全部批准。
如果有多台worker的话,使用类似的方法操作。
4.测试
[color=rgba(0, 0, 0, 0.8)]在master上创建pod1.yaml内容如下。
root@vms28:~# cat pod1.yaml apiVersion: v1kind: Podmetadata:  creationTimestamp: null  labels:    run: pod1  name: pod1spec:  containers:  - image: nginx    imagePullPolicy: IfNotPresent    name: pod1    resources: {}  dnsPolicy: ClusterFirst  restartPolicy: Alwaysstatus: {}root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]创建此pod。
root@vms28:~# kubectl apply -f pod1.yaml pod/pod1 createdroot@vms28:~# kubectl get podsNAME   READY   STATUS              RESTARTS   AGEpod1   0/1     ContainerCreating   0          2sroot@vms28:~# kubectl get pods -o wideNAME    READY   STATUS   RESTARTS   AGE     IP                NODE       pod1    1/1     Running   0          6s    10.244.178.11   vms29.rhce.cc   root@vms28:~#
[color=rgba(0, 0, 0, 0.8)]可以看到pod正常运行。

发表于 2022-5-6 20:23:30 | 显示全部楼层
好贴,mark下,后期环境搭建完再来借鉴下
沙发 2022-5-6 20:23:30 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2022-10-21 09:29:51 | 显示全部楼层
學到了新的知識
Thanks
板凳 2022-10-21 09:29:51 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-1-24 15:28 , Processed in 0.053822 second(s), 11 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表