1.实验目的

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

2.实验环境

ubernetes环境及版本
整个实验三台机器192.168.32.128作为master,192.168.32.129/130是node,kubernetes的版本是1.23.0。
在这里插入图片描述
在这里插入图片描述
所使用系统为centos7.6

3.实验步骤

1.查看证书过期时间
在master上查看各证书的过期时间
[root@master ~r]# kubeadm certs check-expiration
在这里插入图片描述

从这里可以看到证书过期时间是到2023年9月23日。

查看master(192.168.32.128)上kubelet证书的过期时间。
[root@master ~]# ls /var/lib/kubelet/pki/
[root@master ~]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not
在这里插入图片描述

这里可以看到过期时间在2023年9月3日。
查看node1(192.168.32.129)上kubelet证书的过期时间。
[root@k8s-node1 ~]# ls /var/lib/kubelet/pki/
[root@k8s-node1 ~]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not
在这里插入图片描述

这里可以node1看到过期时间在2023年9月3日。
查看node2(192.168.32.130)上kubelet证书的过期时间。
[root@k8s-node2 ~]# ls /var/lib/kubelet/pki/
[root@k8s-node2 ~]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not
在这里插入图片描述

这里可以看到node2过期时间在2023年9月3日。

备份相关文件目录
cp -r /etc/kubernetes/ /tmp/backup/ # 静态pods配置以及证书
cp -r /var/lib/ kubernetes /tmp/backup.crr #证书pem存放目录

2.模拟证书过期
把所有系统的时间改为2024年9月5日,在xshell的撰写栏输入命令 。
[root@master ~]# timedatectl set-ntp false ; date -s “2024-09-5 10:00:00” ; hwclock -w
[root@k8s-node1 ~]# timedatectl set-ntp false ; date -s “2024-09-5 10:00:00” ; hwclock -w
[root@k8s-node2 ~]# timedatectl set-ntp false ; date -s “2024-09-5 10:00:00” ; hwclock -w

在master上确认当前时间
在这里插入图片描述再次执行kubectl命令。
[root@master ~]# kubectl get nodes
在这里插入图片描述可以看到现在kubectl已经没法正常使用了,提示证书过期。

3.轮换master上证书
在master(192.168.32.1128)续签所有证书。
查看没续签之前的证书日期:
在这里插入图片描述在这里插入图片描述开始续签:
[root@master kubernetes]# kubeadm certs renew all
在这里插入图片描述在master(192.168.32.128)再次查看证书过期日期。
[root@master kubernetes]# kubeadm certs check-expiration
在这里插入图片描述可以看到过期时间现在已经是1年后了,即到2054年9月5日过期。
查看/etc/kubernetes/pki/证书是否更新了。
[root@master kubernetes]# ll -a /etc/kubernetes/pki/
在这里插入图片描述可以看到证书都重新生成了,并且日期是改变了的。

当前kubernetes各组件所使用的kubeconfig在/etc/kubernetes/里。
[root@master kubernetes]# ll -a /etc/kubernetes/
在这里插入图片描述这些文件里所用到的证书均是之前过期的证书,所以需要把所有的这些kubeconfig文件(后缀为conf)删除重新生成。
[root@master kubernetes]# rm -rf /etc/kubernetes/*.conf
[root@master kubernetes]# ls
manifests pki

为这些组件重新生成kubeconfig文件。
注意版本号
[root@master kubernetes]# kubeadm init --kubernetes-version=v1.23.0 phase kubeconfig all

查看是否生成出来了新的配置文件
[root@master kubernetes]# ll -a /etc/kubernetes/
在这里插入图片描述这里也生成了kubelet所需要的kubeconfig文件,就是上面的kubelet.conf。

重新拷贝管理员所用的新的kubeconfig文件。
备份下/root/kube/config 文件:
cp /root/kube/config /tmp/kube.old/config
替换:
[root@master kubernetes]# cp /etc/kubernetes/admin.conf ~/.kube/config

重启kube-scheduler。
[root@master kubernetes]# docker ps -a | grep kube-scheduler | awk ‘{print $1}’
eb081970183f
7061ee08ac11
[root@master kubernetes]# docker rm -f eb081970183f 7061ee08ac11
eb081970183f
7061ee08ac11

等待kube-scheduler彻底启动起来,即状态为1/1。
[root@master kubernetes]# kubectl get pods -n kube-system | grep scheduler

4.轮换kubelet证书
轮换master上的kubelet证书
查看kubelet当前所使用的证书。
[root@master kubernetes]# ll -a /var/lib/kubelet/pki/
在这里插入图片描述可以看到此处kubelet当前使用的证书还是2022-9-3的,使用的是已经过期的证书,需要生成新的证书。
通过kubeadm alpha certs renew all更新的 k8s 证数,是不会更新 kubelet.conf 的证书的。所以此处的证书重启kubelet cho重新生成。
因为前面已经重新生成了kubelet.conf,现在重启kubelet。
[root@master kubernetes]# systemctl restart kubelet
[root@master kubernetes]# ll -a /var/lib/kubelet/pki/
在这里插入图片描述这里kubelet-client-2024-09-05-10-36-28.pem是新颁发的证书。
此时kubelet-client-current.pem是软连接到kubelet-client-2024-09-05-10-36-28.pem的。

在master上查看证书签名请求(简称为CSR)。
[root@master kubernetes]# kubectl get csr
在这里插入图片描述然后批准此CSR。
[root@master kubernetes]# kubectl certificate approve csr-vg9bd
certificatesigningrequest.certificates.k8s.io/csr-vg9bd approved

查看当前kubelet证书的过期时间。
[root@master kubernetes]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not
在这里插入图片描述这里显示过期时间到2025年9月5日。
5.轮换node上的kubelet证书
查看当前node1上的kubelet证书
[root@k8s-node1 ~]# ls /var/lib/kubelet/pki/
在这里插入图片描述这里显示的还是之前的旧的证书。
在master(192.168.32.128)上生成worker所需要的kubelet.conf临时放在/tmp下
[root@master tmp]# mkdir -p /tmp/worker

生成node1所需要的kubelet.conf文件。

标红处注意更改成自己的信息
[root@master worker]# kubeadm init --kubernetes-version=v1.23.0 phase kubeconfig kubelet --node-name k8s-node1 --kubeconfig-dir /tmp/worker/
[kubeconfig] Writing “kubelet.conf” kubeconfig file
在这里插入图片描述把此文件拷贝到node1(192.168.32.129)上的/etc/kubernetes/目录里覆盖原来的kubelet.conf。
先备份原先node的kubelet.conf文件:
[root@k8s-node1 kubernetes]# mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.old

[root@master worker]# scp /tmp/worker/kubelet.conf root@192.168.32.129:/etc/kubernetes/

切换到node1,重启kubelet
[root@k8s-node1 kubernetes]# systemctl restart kubelet
再次查看证书
[root@k8s-node1 kubernetes]# ll -a /var/lib/kubelet/pki/
在这里插入图片描述此时已经生成了新的证书kubelet-client-2024-09-05-11-09-57.pem且kubelet-client-current.pem是连接到此证书的。
查看kubelet证书的过期时间。
[root@k8s-node1 kubernetes]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not
在这里插入图片描述这里显示过期时间为2025年9月5日。

切换到master(192.168.32.128)上,查看CSR。
[root@master worker]# kubectl get csr
在这里插入图片描述[root@master worker]# kubectl certificate approve csr-hppq2

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

6.测试

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

[root@master worker]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
containers:

  • image: nginx
    imagePullPolicy: IfNotPresent
    name: pod1
    resources: {}
    dnsPolicy: ClusterFirst
    restartPolicy: Always
    status: {}

创建此pod。
[root@master worker]# kubectl apply -f pod1.yaml
pod/pod1 created

[root@master worker]# kubectl get pods -owide
在这里插入图片描述pod正常运行。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐