1、K3s默认证书有效期为一年,如下所示
[root@10 tls]# date
2027年 11月 25日 星期四 00:00:21 CST
[root@10 tls]# for i in `ls /home/docker_customized/k3s/server/tls/*.crt`; do echo $i; openssl x509 -enddate -noout -in $i; done
/home/docker_customized/k3s/server/tls/client-admin.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/client-auth-proxy.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/client-ca.crt
notAfter=Nov 22 02:10:56 2032 GMT
/home/docker_customized/k3s/server/tls/client-cloud-controller.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/client-controller.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/client-k3s-controller.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/client-kube-apiserver.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/client-kube-proxy.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/client-scheduler.crt
notAfter=Nov 25 02:10:56 2023 GMT
/home/docker_customized/k3s/server/tls/request-header-ca.crt
notAfter=Nov 22 02:10:56 2032 GMT
/home/docker_customized/k3s/server/tls/server-ca.crt
notAfter=Nov 22 02:10:56 2032 GMT
/home/docker_customized/k3s/server/tls/serving-kube-apiserver.crt
notAfter=Nov 25 02:10:56 2023 GMT
2、我们尝试更改系统时间而使证书过期(模拟一年后证书过期情况)
[root@10 k3s]# date -s 2027-11-25
2027年 11月 25日 星期四 00:00:00 CST
[root@10 k3s]# kubectl get no
Unable to connect to the server: x509: certificate has expired or is not yet valid
看到修改时间后证书已经过期
3、尝试重启k3s使其证书轮换
[root@10 k3s]# systemctl restart k3s
[root@10 k3s]# kubectl get no
Unable to connect to the server: x509: certificate has expired or is not yet valid
[root@10 tls]# date
2027年 11月 25日 星期四 00:01:10 CST
[root@10 tls]# ls -hl
总用量 112K
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-admin.crt
-rw------- 1 root root 227 11月 25 00:00 client-admin.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-auth-proxy.crt
-rw------- 1 root root 227 11月 25 00:00 client-auth-proxy.key
-rw-r--r-- 1 root root 526 11月 25 2022 client-ca.crt
-rw------- 1 root root 227 11月 25 2022 client-ca.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-cloud-controller.crt
-rw------- 1 root root 227 11月 25 00:00 client-cloud-controller.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-controller.crt
-rw------- 1 root root 227 11月 25 00:00 client-controller.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-k3s-controller.crt
-rw------- 1 root root 227 11月 25 00:00 client-k3s-controller.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-kube-apiserver.crt
-rw------- 1 root root 227 11月 25 00:00 client-kube-apiserver.key
-rw------- 1 root root 227 11月 25 2022 client-kubelet.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-kube-proxy.crt
-rw------- 1 root root 227 11月 25 00:00 client-kube-proxy.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:00 client-scheduler.crt
-rw------- 1 root root 227 11月 25 00:00 client-scheduler.key
-rw-r--r-- 1 root root 1.8K 11月 25 2022 dynamic-cert.json
-rw-r--r-- 1 root root 550 11月 25 2022 request-header-ca.crt
-rw------- 1 root root 227 11月 25 2022 request-header-ca.key
-rw-r--r-- 1 root root 526 11月 25 2022 server-ca.crt
-rw------- 1 root root 227 11月 25 2022 server-ca.key
-rw------- 1 root root 1.7K 11月 25 2022 service.key
-rw-r--r-- 1 root root 1.2K 11月 25 00:00 serving-kube-apiserver.crt
-rw------- 1 root root 227 11月 25 00:00 serving-kube-apiserver.key
-rw------- 1 root root 227 11月 25 2022 serving-kubelet.key
drwx------ 2 root root 84 11月 25 2022 temporary-certs
可以看到重启无效,ca证书未重新生成
4、删除证书,重启k3s
[root@10 tls]# pwd
/home/docker_customized/k3s/server/tls
[root@10 tls]# rm -rf *
[root@10 tls]# ls
[root@10 tls]#
[root@10 tls]# systemctl restart k3s
5、查看ca证书是否生成
[root@10 tls]# ls -hl
总用量 112K
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-admin.crt
-rw------- 1 root root 227 11月 25 00:03 client-admin.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-auth-proxy.crt
-rw------- 1 root root 227 11月 25 00:03 client-auth-proxy.key
-rw-r--r-- 1 root root 526 11月 25 00:03 client-ca.crt
-rw------- 1 root root 227 11月 25 00:03 client-ca.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-cloud-controller.crt
-rw------- 1 root root 227 11月 25 00:03 client-cloud-controller.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-controller.crt
-rw------- 1 root root 227 11月 25 00:03 client-controller.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-k3s-controller.crt
-rw------- 1 root root 227 11月 25 00:03 client-k3s-controller.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-kube-apiserver.crt
-rw------- 1 root root 227 11月 25 00:03 client-kube-apiserver.key
-rw------- 1 root root 227 11月 25 00:03 client-kubelet.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-kube-proxy.crt
-rw------- 1 root root 227 11月 25 00:03 client-kube-proxy.key
-rw-r--r-- 1 root root 1.1K 11月 25 00:03 client-scheduler.crt
-rw------- 1 root root 227 11月 25 00:03 client-scheduler.key
-rw-r--r-- 1 root root 1.8K 11月 25 00:03 dynamic-cert.json
-rw-r--r-- 1 root root 550 11月 25 00:03 request-header-ca.crt
-rw------- 1 root root 227 11月 25 00:03 request-header-ca.key
-rw-r--r-- 1 root root 526 11月 25 00:03 server-ca.crt
-rw------- 1 root root 227 11月 25 00:03 server-ca.key
-rw------- 1 root root 1.7K 11月 25 00:03 service.key
-rw-r--r-- 1 root root 1.2K 11月 25 00:03 serving-kube-apiserver.crt
-rw------- 1 root root 227 11月 25 00:03 serving-kube-apiserver.key
-rw------- 1 root root 227 11月 25 00:03 serving-kubelet.key
drwx------ 2 root root 84 11月 25 00:03 temporary-certs
发现所有证书均重新生成
6、查看集群状态是否正常
[root@10 tls]# kubectl get no
Unable to connect to the server: x509: certificate signed by unknown authority
发现证书“未知授权机构签署的证书”,那么这个问题出在了哪里呢。
注意上面使用的是kubectl命令,所以是kubeconfig文件没有替换为最新的,kubeclt默认是被kubeconfig路径为:/root/.kube/config
[root@10 tls]# ls -hl /root/.kube/config
-rw------- 1 root root 1.1K 11月 25 2022 /root/.kube/config
果然没被替换
那k3s 默认kubeconfig路径在这里:
[root@10 tls]# ls -hl /etc/rancher/k3s/
总用量 4.0K
-rw------- 1 root root 1.1K 11月 25 00:04 k3s.yaml
可以看到这个文件是新生成的,那只要拷贝到/root/.kube/config就大功告成了
7、拷贝新的kubeconfig
[root@10 tls]# cp /etc/rancher/k3s/k3s.yaml /root/.kube/config
cp:是否覆盖"/root/.kube/config"? yes
[root@10 tls]# kubectl get no
NAME STATUS ROLES AGE VERSION
10.202.62.178 Ready master 5y1d v1.17.17+k3s-ee1837a5
8、检查其他组件是否正常
coredns
[INFO] plugin/reload: Running configuration MD5 = 4665410bf21c8b272fcfd562c482cb82
CoreDNS-1.6.9
linux/amd64, go1.14.1, 1766568
E1124 16:13:15.316139 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.4/tools/cache/reflector.go:105: Failed to list *v1.Endpoints: Unauthorized
E1124 16:13:15.318914 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.4/tools/cache/reflector.go:105: Failed to list *v1.Namespace: Unauthorized
E1124 16:13:15.319298 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.4/tools/cache/reflector.go:105: Failed to list *v1.Service: Unauthorized
E1124 16:13:16.319234 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.4/tools/cache/reflector.go:105: Failed to list *v1.Endpoints: Unauthorized
E1124 16:13:16.322041 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.4/tools/cache/reflector.go:105: Failed to list *v1.Namespace: Unauthorized
E1124 16:13:16.324034 1 reflector.go:153] pkg/mod/k8s.io/client-go@v0.17.4/tools/cache/reflector.go:105: Failed to list *v1.Service: Unauthorized
发现coredns日志报错
[root@10 tls]# kubectl get secret -n kube-system
NAME TYPE DATA AGE
attachdetach-controller-token-gwnw4 kubernetes.io/service-account-token 3 5y1d
certificate-controller-token-cz7sj kubernetes.io/service-account-token 3 5y1d
clusterrole-aggregation-controller-token-hzsz2 kubernetes.io/service-account-token 3 5y1d
coredns-token-k4np2 kubernetes.io/service-account-token 3 5y1d
cronjob-controller-token-gjmwh kubernetes.io/service-account-token 3 5y1d
看到coredns secret依旧使用的旧的
[root@10 tls]# kubectl delete secret coredns-token-k4np2 -n kube-system
secret "coredns-token-k4np2" deleted
[root@10 tls]# kubectl get secret -n kube-system
NAME TYPE DATA AGE
attachdetach-controller-token-gwnw4 kubernetes.io/service-account-token 3 5y1d
certificate-controller-token-cz7sj kubernetes.io/service-account-token 3 5y1d
clusterrole-aggregation-controller-token-hzsz2 kubernetes.io/service-account-token 3 5y1d
coredns-token-ckbp4 kubernetes.io/service-account-token 3 2s
cronjob-controller-token-gjmwh kubernetes.io/service-account-token 3 5y1d
[root@10 tls]# docker logs -f 4382b2b8eb7e
.:53
[INFO] plugin/reload: Running configuration MD5 = 4665410bf21c8b272fcfd562c482cb82
CoreDNS-1.6.9
linux/amd64, go1.14.1, 1766568
其他k8s组件操作类似
至此证书轮换已完成