1.实验目的

通过kubeadm安装的kubernetes集群各个组件所使用证书的期限为1年,本实验练习的是到期之后如何续期。

2.实验环境

kubernetes环境及版本
整个实验两台机器vms28.rhce.cc作为master,vms29.rhce.cc是worker。kubernetes的版本是1.23.1。

root@vms28:~# kubectl get nodes
NAME            STATUS   ROLES                  AGE    VERSION
vms28.rhce.cc   Ready    control-plane,master   172d   v1.23.1
vms29.rhce.cc   Ready    <none>                 172d   v1.23.1
root@vms28:~#

所使用系统为Ubuntu 18.04。

root@vms28:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:    18.04
Codename:   bionic
root@vms28:~#

3.实验步骤

1.查看证书过期时间

在master上查看各证书的过期时间。

root@vms28:~# kubeadm certs check-expiration


root@vms28:~#
从这里可以看到证书过期时间是到2023年3月23日。

查看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.key
root@vms28:~#
root@vms28:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep NotNot Before: Nov  3 19:44:13 2021 GMTNot After : Nov  3 19:44:15 2022 GMT
root@vms28:~#

这里可以看到过期时间在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.key
root@vms29:~#
root@vms29:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep NotNot Before: Nov  3 19:40:46 2021 GMTNot After : Nov  3 19:40:46 2022 GMT
root@vms29:~#

这里可以看到过期时间在2022年11月3日。

2.模拟证书过期

把所有系统的时间改为2023年3月27日,在xshell的撰写栏输入命令 。

timedatectl set-ntp false ; date -s "2023-03-27 10:00:00" ; hwclock -w

目的是能够让命令在两台机器上同时执行,这样两台机器的时间可以保持一致。

在vms28上确认当前时间

root@vms28:~# date
Mon Mar 27 10:00:13 CST 2023
root@vms28:~#

再次执行kubectl命令。

root@vms28:~# kubectl get nodes
Unable 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:22Z
root@vms28:~#

可以看到现在kubectl已经没法正常使用了,提示证书过期。

3.轮换master上证书

在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:~#

在master(vms28.rhce.cc)再次查看证书过期日期。

root@vms28:~# kubeadm certs check-expiration


可以看到过期时间现在已经是1年后了,即到2024年3月26日过期。

当前kubernetes各组件所使用的kubeconfig在/etc/kubernetes/里。

root@vms28:~# ls /etc/kubernetes/
admin.conf controller-manager.conf kubelet.conf  manifests  pki  scheduler.conf  tmp
root@vms28:~#

这些文件里所用到的证书均是之前过期的证书,所以需要把所有的这些kubeconfig文件(后缀为conf)删除重新生成。

root@vms28:~# rm -rf /etc/kubernetes/*.conf
root@vms28:~#
root@vms28:~# ls /etc/kubernetes/
manifests  pki  tmp
root@vms28:~#

为这些组件重新生成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 file
root@vms28:~#

查看是否生成出来了新的配置文件。

root@vms28:~# ls /etc/kubernetes/
admin.conf controller-manager.conf  kubelet.conf  manifests  pki  scheduler.conf  tmp
root@vms28:~#

这里也生成了kubelet所需要的kubeconfig文件,就是上面的kubelet.conf。

重新拷贝管理员所用的新的kubeconfig文件。

root@vms28:~# cp /etc/kubernetes/admin.conf ~/.kube/config
root@vms28:~#

重启kube-scheduler。

root@vms28:~# docker rm -f $(docker ps | awk '/kube-scheduler /{print $1}')
d28a97590ac2
root@vms28:~#

等待kube-scheduler彻底启动起来,即状态为1/1。

root@vms28:~# kubectl get pods -n kube-system | grep scheduler
kube-scheduler-vms28.rhce.cc               1/1     Running   ...
root@vms28:~#

4.轮换kubelet证书

轮换master上的kubelet证书

查看kubelet当前所使用的证书。

root@vms28:~# ls /var/lib/kubelet/pki/
kubelet-client-2021-11-04-03-44-16.pem  kubelet-client-current.pem  kubelet.crt  kubelet.key
root@vms28:~#

这里kubelet-client-current.pem是软连接到kubelet-client-2021-11-04-03-44-16.pem的,使用的仍然是旧证书。

因为前面已经重新生成了kubelet.conf,现在重启kubelet。

root@vms28:~# systemctl restart kubelet
root@vms28:~# ls /var/lib/kubelet/pki/
kubelet-client-2021-11-04-03-44-16.pem  kubelet-client-current.pem  kubelet.key
kubelet-client-2023-03-27-10-05-44.pem  kubelet.crt
root@vms28:~#

这里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.pem
root@vms28:~#

此时kubelet-client-current.pem是软连接到kubelet-client-2023-03-27-10-05-44.pem的。

在master上查看证书签名请求(简称为CSR)。

root@vms28:~# kubectl get csr
NAME        AGE    SIGNERNAME       REQUESTOR     REQUESTEDDURATION   CONDITION
csr-rn8xc   2m8s   kubernetes.io/kube-apiserver-client-kubelet   system:node:vms28.rhce.cc   <none>              Pending
root@vms28:~#

然后批准此CSR。

root@vms28:~# kubectl certificate approve csr-rn8xc
certificatesigningrequest.certificates.k8s.io/csr-rn8xc approved
root@vms28:~#

查看当前kubelet证书的过期时间。

root@vms28:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep NotNot Before: Nov  3 19:44:13 2021 GMTNot After : Mar 26 02:04:42 2024 GMT
root@vms28:~#

这里显示过期时间到2023年3月26日。

轮换worker上的kubelet证书

查看当前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.key
root@vms29:~#

这里显示的还是之前的旧的证书。
在master(vms28)上生成worker所需要的kubelet.conf临时放在/tmp下,这里先清空/tmp里的内容

root@vms28:~# rm -rf /tmp/* ;  ls /tmp/
root@vms28:~#

生成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 file
root@vms28:~#
root@vms28:~# ls /tmp/
kubelet.conf
root@vms28:~#

把此文件拷贝到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:~#

切换到vms29,重启kubelet

root@vms29:~# systemctl restart kubelet
root@vms29:~#

再次查看证书

root@vms29:~# ls /var/lib/kubelet/pki/
kubelet-client-2021-11-04-03-45-46.pem  kubelet-client-current.pem  kubelet.key
kubelet-client-2023-03-27-10-12-18.pem  kubelet.crt
root@vms29:~#

此时已经生成了新的证书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.pem
root@vms29:~#

查看kubelet证书的过期时间。

root@vms29:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text  |grep NotNot Before: Nov  3 19:44:13 2021 GMTNot After : Mar 26 02:10:27 2024 GMT
root@vms29:~#

这里显示过期时间为2024年3月26日。

切换到master(vms28)上,查看CSR。

root@vms28:~# kubectl get csr
NAME        AGE    SIGNERNAME                                    REQUESTOR                   REQUESTEDDURATION   CONDITION
csr-hnjzh   32s    kubernetes.io/kube-apiserver-client-kubelet   system:node:vms29.rhce.cc   <none>              Pending
csr-rn8xc   7m5s   kubernetes.io/kube-apiserver-client-kubelet   system:node:vms28.rhce.cc   <none>              Approved
root@vms28:~#

批准vms29的这个证书签名请求CSR。

root@vms28:~# kubectl certificate approve csr-hnjzh
certificatesigningrequest.certificates.k8s.io/csr-hnjzh approved
root@vms28:~#

查看现在所有的CSR。

root@vms28:~# kubectl get csr
NAME        AGE     SIGNERNAME                                    REQUESTOR                   REQUESTEDDURATION   CONDITION
csr-hnjzh   51s     kubernetes.io/kube-apiserver-client-kubelet   system:node:vms29.rhce.cc   <none>              Approved
csr-rn8xc   7m24s   kubernetes.io/kube-apiserver-client-kubelet   system:node:vms28.rhce.cc   <none>              Approved
root@vms28:~#

所有的CSR已经全部批准。
如果有多台worker的话,使用类似的方法操作。

4.测试

在master上创建pod1.yaml内容如下。

root@vms28:~# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:run: pod1name: pod1
spec:containers:- image: nginximagePullPolicy: IfNotPresentname: pod1resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}
root@vms28:~#

创建此pod。

root@vms28:~# kubectl apply -f pod1.yaml
pod/pod1 created
root@vms28:~# kubectl get pods
NAME   READY   STATUS              RESTARTS   AGE
pod1   0/1     ContainerCreating   0          2s
root@vms28:~# kubectl get pods -o wide
NAME    READY   STATUS   RESTARTS   AGE     IP                NODE
pod1    1/1     Running   0          6s    10.244.178.11   vms29.rhce.cc
root@vms28:~#

可以看到pod正常运行。

kubernetes(1.23)证书过期如何续期相关推荐

  1. 三种监控 Kubernetes 集群证书过期方案

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 Kubernetes 中大量用到了证书, 比如 ca证书.以及 kubelet.apiserver.prox ...

  2. kubernetes集群证书过期处理

    1.kubernetes集群证书过期: 操作命令: # kubectl get nodes Unable to connect to the server: x509: certificate has ...

  3. 如何处理 Kubeadm 搭建的集群证书过期问题

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  4. Kubernetes 认证证书过期处理

    1.问题现象 1.1 现象1 kubesphere 安装的jenkins,因为在页面上操作没有响应,我想重启下,结果发现删除原来的容器后,没法自动重新创建容器.如下图: 里面的pod删除了,不会自动生 ...

  5. Kubernetes 证书过期

    问题描述: Unable to connect to the server: x509: certificate has expired or is not yet valid 状况如图所示: 解决方 ...

  6. kubeadm 安装kubernetes kube-api证书过期解决方案

    kubeadm 安装kubernetes kube-api证书过期解决方案 problem describection Unable to connect to the server: x509: c ...

  7. php微信支付证书过期,微信支付API证书到期后如何续期?

    商户API证书默认期限为1年,到期后需要商户执行API证书续期操作才可以继续使用商户平台的相关API接口. 处理方法: 1.登录商户平台(pay.weixin.qq.com) 如果登录有疑问,请参考h ...

  8. kubeadm修改默认证书有效期,解决证书过期问题

    kubeadm 修改默认证书有效期 前言 出于安全考虑,k8s 团队推荐定期更新版本,因此kubeadm生成的证书,有效期默认在代码中写死为1年,一旦证书过期,k8s集群将会崩溃,因此,续期 or 升 ...

  9. k8s-kubeadm证书过期续订解决方法

    1.实验目的 通过kubeadm安装的kubernetes集群各个组件所使用证书的期限为1年,本实验练习的是到期之后如何续期. 2.实验环境 ubernetes环境及版本 整个实验三台机器192.16 ...

最新文章

  1. 零起点学算法10——求圆柱体的表面积
  2. Angel:深度学习在腾讯广告推荐系统中的实践
  3. vi命令,印在杯子上,还是印在脑子里。
  4. 前端学习(2607):vue指令
  5. [剑指offer][JAVA]面试题第[20]题[表示数值的字符串][状态机]
  6. iOS 控制section不悬停 --- iOS开发系列 ---项目中成长的知识八
  7. python类型提示模块包_Python checktypes包_程序模块 - PyPI - Python中文网
  8. java json传值到前台_json前后台传值
  9. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_11_Thread类的常用方法_sleep...
  10. 第二节:各种路由约束(动态路由、静态路由、组合路由、正则约束、命名空间约束、区域内路由)...
  11. 2019蓝桥杯决赛Java_2019年蓝桥杯省赛总结
  12. excel多个工作表合并怎么操作
  13. 两种方法去除页眉页脚:基于OCR识别后的文本/基于图片切割
  14. 心电算法(Discuss of ECG Analysis Algorithm)
  15. 昆石VOS2009/VOS3000 2.1.6.00 Web接口说明书
  16. 什么是大数据分析 主要应用于哪些行业?
  17. 《解剖PetShop》系列之五(Bruce Zhang)
  18. risc-v 栈分析
  19. include,include_once,require,require_once的区别
  20. day03_注释丶关键字丶标识符丶常量

热门文章

  1. 求解圆周率PI的近似值
  2. 【深度学习框架】|Keras|完成一个手写体识别任务
  3. win10批量替换文件里的字符
  4. wait()以及wait(status)\ waitpid()
  5. 点石互动--石头之:如何让你的页面被搜索引擎收录(系列二)
  6. cdlinux u盘启动怎么制作教程
  7. 翻译“寿星天文历”有感
  8. 什么编程语言可以与 Excel 结合?
  9. python七彩蟒蛇代码_Python实现七彩蟒蛇绘制实例代码
  10. 嵌入式系统硬件抽象层(HAL BSP)的设计思想--第一部分