容器技术
ubuntu使用APT安装docker并指定版本
Helm部署与使用
Helm常用命令
从Helm仓库创建应用流程示例
Helm部署与使用
K8S中部署mysql-ha高可用集群
helm启动mysql-ha
helm几个常用仓库
Kubernetes使用helm部署Mysql-Ha
k8s入门:Helm 构建 MySQL
docker批量修改tag(批量push)
k8s之yaml文件详解
将 MySQL 通过 bitpoke/mysql-operator 部署到 k8s 内部
k8s pvc扩容:pvc创建后扩容
K8S性能分析
部署Metrics Server
Kubernetes集群搭建
kubespray 部署常见问题和优化汇总
kubernetes-sigs/kubespray at release-2.15
K8S-pod配置文件详解
KubeSphere知识库
在 Kubernetes 上最小化安装 KubeSphere
卸载 KubeSphere 和 Kubernetes
KubeSphere 应用商店
修改pod中容器的时区
k8s之Pod安全策略
Harbor 登陆失败,用户名或者密码不正确。405 Not Allowed
Docker-leanote_n1
kubesphere/kubekey
Kubernetes Static Pod (静态Pod)
kubernets kube-proxy的代理 iptables和ipvs - 30岁再次出发 - 博客园
k8s生产实践之获取客户端真实IP - SSgeek - 博客园
kube-proxy ip-tables故障解决
k8s入门:Helm 构建 MySQL
docker批量修改tag(批量push)
prometheus operator 监控redis-exporter
Helm3 安装 ElasticSearch & Kibana 7.x 版本
kubernete强力删除namespace_redis删除namespace命令
EFK (Elasticsearch + Fluentd + Kibana) 日志分析系统
k8s日志收集实战(无坑)
fluentd收集k8s集群pod日志
Elasticsearch+Fluentd+Kibana 日志收集系统的搭建
TKE/EKS之configmap,secret只读挂载
K8s基于Reloader的ConfigMap/Secret热更新
使用 Reloader 实现热部署_k8s reloader
k8s使用Reloader实现更新configmap后自动重启pod
在 Kubernetes 上对 gRPC 服务器进行健康检查 | Kubernetes
Kubernetes ( k8s ) gRPC服务 健康检查 ( livenessProbe ) 与 就绪检查 ( readinessProbe )
排查kubernetes中高磁盘占用pod
helm 安装 MongoDB 集群
helm 安装 Redis 1 主 2 从 3哨兵
【k8s】使用 Reloader 实现热部署
k8s证书过期,更新后kubelet启动失败
kubeadm证书/etcd证书过期处理
三种监控 Kubernetes 集群证书过期方案
K8s 集群(kubeadm) CA 证书过期解决方案
k8s调度、污点、容忍、不可调度、排水、数据卷挂载
5分钟搞懂K8S的污点和容忍度(理论+实战)
Kubernetes进阶-8基于Istio实现微服务治理
macvlan案例配置
快速解决Dockerhub镜像站无法访问问题
info_scan开源漏洞扫描主系统部署
本文档使用 MrDoc 发布
-
+
首页
K8s 集群(kubeadm) CA 证书过期解决方案
 **Author:**Arsen **Date:**2024/07/04 ### 一、现象描述 之前有篇文章[《K8s Token 过期解决方案(Kubeadm)》](https://blog.csdn.net/IT_ZRS/article/details/128932239?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172007414316800184182362%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=172007414316800184182362&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-128932239-null-null.nonecase&utm_term=K8s%20%E8%AF%81%E4%B9%A6%E8%BF%87%E6%9C%9F%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88&spm=1018.2226.3001.4450)提到了默认生成的 Token 有效期只有 24 小时,过期后 Token 将不可用,如果想新的 Node 节点加入 K8s 集群,则需重新生成新的 Token。 今天无意间打开我虚拟机部署的 K8s 集群(通过 kubeadm 方式部署),发现 CA 证书过期了(如下图): ```sh kubectl get pods ```  于是查看我的 K8s 集群证书,显示证书都过期了(如下图): ```sh kubeadm certs check-expiration ```  **字段说明:** | 字段 | 解释 | | --- | --- | | CERTIFICATE | 证书的名称 | | EXPIRES | 证书过期的时间点 | | RESIDUAL TIME | 当前时间距离证书过期的剩余时间 | | CERTIFICATE AUTHORITY | 证书的颁发机构 | | EXTERNALLY MANAGED | 证书是否由外部系统管理 | **证书字段详解:** | CERTIFICATE | EXPIRES | RESIDUAL TIME | CERTIFICATE AUTHORITY | EXTERNALLY MANAGED | 备注 | | --- | --- | --- | --- | --- | --- | | admin.conf | Dec 12, 2023 03:36 UTC | | ca | no | Kubeconfig 文件,包含集群访问的配置 | | apiserver | Dec 12, 2023 03:36 UTC | | ca | no | Kubernetes API 服务器的证书 | | apiserver-etcd-client | Dec 12, 2023 03:36 UTC | | etcd-ca | no | API 服务器与 ETCD 之间的客户端证书 | | apiserver-kubelet-client | Dec 12, 2023 03:36 UTC | | ca | no | API 服务器与 Kubelet 之间的客户端证书 | | controller-manager.conf | Dec 12, 2023 03:36 UTC | | ca | no | Kubernetes 控制器管理器的 Kubeconfig 文件 | | etcd-healthcheck-client | Dec 12, 2023 03:36 UTC | | etcd-ca | no | 用于 ETCD 健康检查的客户端证书 | | etcd-peer | Dec 12, 2023 03:36 UTC | | etcd-ca | no | ETCD 节点间的对等通信证书 | | etcd-server | Dec 12, 2023 03:36 UTC | | etcd-ca | no | ETCD 服务器的证书 | | front-proxy-client | Dec 12, 2023 03:36 UTC | | front-proxy-ca | no | 前端代理的客户端证书 | | scheduler.conf | Dec 12, 2023 03:36 UTC | | ca | no | Kubernetes 调度器的 Kubeconfig 文件 | 显然,上表中的这些证书在 `2023 年 12 月 12 日 03:36 UTC` 就已经过期,且剩余时间为`<invalid>`,表示这些证书已过期(无效),需要重新生成。 **证书颁发机构字段解释:** | CERTIFICATE AUTHORITY | EXPIRES | RESIDUAL TIME | EXTERNALLY MANAGED | 备注 | | --- | --- | --- | --- | --- | | **ca** | Dec 09, 2032 03:36 UTC | 8年 | no | Kubernetes 的主证书颁发机构 | | **etcd-ca** | Dec 09, 2032 03:36 UTC | 8年 | no | ETCD 的证书颁发机构 | | **front-proxy-ca** | Dec 09, 2032 03:36 UTC | 8年 | no | 前端代理的证书颁发机构 | ### 二、解决方案 **1、对过期证书进行备份,并删除旧的证书** ```sh cp -rp /etc/kubernetes /etc/kubernetes.bak ``` **2、重新生成证书** ```sh kubeadm certs renew all ```  **3、备份旧的配置文件,并重新生成新的配置文件** ```sh mv /etc/kubernetes/*.conf /tmp/ kubeadm init phase kubeconfig all ```  **4、更新 kubectl 配置** ```sh cp -rp ~/.kube/config ~/.kube/config.bak \cp /etc/kubernetes/admin.conf ~/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config ``` **5、证书过期时间确认** ```sh kubeadm certs check-expiration openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep 'Not' ```  CA 证书时间已经更新, **6、重启 kubelet** > 所有 work 节点执行,如果你的 master 节点也作为 work 节点使用,那 master 节点也需要执行重启 kubelet 的操作。 ```sh systemctl restart kubelet systemctl status kubelet ``` **7、查看集群节点状态**  发现 work 节点不健康,这个时候我们需要重新将**work 节点加入 k8s 集群**: 1)先查看集群中是否有 Token ```sh kubeadm token list ```  2)没有则重新生成 Token ```sh kubeadm token create ```  3)获取 CA 证书 Hash 值 ```sh openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' ```  4)最后就是 work 节点加入 K8s 集群 > 以 work1 节点为例,work2 节点及其他 work 节点同理。 ```sh kubeadm join 192.168.56.160:6443 --token zlj5j5.3ezp1s8drj3jgept --discovery-token-ca-cert-hash sha256:3ed701329742f7549f73cb065a8677abe8b5b8a3e25bbca7bb26f317ffcf89d4 ``` 执行后报错:  报错原因:这些文件为旧文件(过期的文件),我们备份后清理即可 ```sh cp -a /etc/kubernetes/kubelet.conf /tmp/kubelet.conf.back cp -a /etc/kubernetes/pki/ca.crt /tmp/ca.crt.back rm -f /etc/kubernetes/kubelet.conf rm -f /etc/kubernetes/pki/ca.crt ``` 清理完成后,再次将 work 节点加入集群: ```sh kubeadm join 192.168.56.160:6443 --token zlj5j5.3ezp1s8drj3jgept --discovery-token-ca-cert-hash sha256:3ed701329742f7549f73cb065a8677abe8b5b8a3e25bbca7bb26f317ffcf89d4 ```  **8、查看 k8s 集群节点健康状态** ```sh kubectl get nodes ```  **9、最后再验证以下证书过期时间** ```sh kubeadm certs check-expiration ```  无误后,K8s 集群的 CA 证书更新完毕,此时打一个快照(因为我是虚拟机),方便后续实验所用。 ### 三、集群验证 K8s 集群证书过期时间更新完毕后,且集群节点也是健康的状态,那接下来我们跑一个测试服务验证一下集群是否可用。 ```sh kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc ```   浏览器访问验证:http://192.168.56.160:31122/  再看看 pod 所在 work 节点:调度也是没问题的。  至此,K8s 集群验证完毕! —END
adouk
2024年11月2日 19:10
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码