2025年kubeadm更新k8s证书

作者:Administrator 发布时间: 2025-12-21 阅读量:6 评论数:0

1、kubeamd的证书过期现象说明

一、背景介绍
使用 kubeadm 安装的 Kubernetes 集群,运行一段时间后执行 kubectl 命令突然出现以下报错:

Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2025-09-22T15:05:09+08:00 is after 2025-09-20T04:04:02Z
报错原因是 Kubernetes 集群证书已经过期(默认有效期 365 天),处理方法是对 Kubernetes 集群证书进行更新以重置有效期,本文将介绍单节点集群环境的具体处理过程。

2、详细操作

二、相关概念
Kubernetes 集群证书是用于在 Kubernetes 集群中实现安全通信的关键组件,主要用于在集群的各个组件之间建立信任和进行身份验证。

Kubernetes 集群证书包括:

CA(证书颁发机构)证书:用于签名其他证书,是信任链的根
API Server 证书:用于 API Server 的 TLS 认证
kubelet 证书:用于 kubelet 与 API Server 之间的通信
kube-proxy 证书:用于 kube-proxy 与 API Server 之间的通信
etcd 证书:用于 etcd 集群内部节点之间的通信
服务账户证书:用于服务账户与 API Server 之间的通信
kubeadm 是 Kubernetes 集群的启动和初始化工具,它在创建集群时生成 Kubernetes 集群证书,并默认设置有效期为一年。


三、处理过程
1、备份证书
cd /etc/kubernetes && mkdir bak && cp -r pki *.conf bak
2、检测证书
检测 Master 节点组件证书
# kubeadm 20 之前的版本使用本命令
kubeadm alpha certs check-expiration
 
# kubeadm 20 之后的版本使用本命令
kubeadm certs check-expiration


检测 Node 节点 kubelet 证书
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates


、更新证书
更新 Master 节点组件证书
# kubeadm 20 之前的版本使用本命令
kubeadm alpha certs renew all
 
# kubeadm 20 之后的版本使用本命令
kubeadm certs renew all
 
🔔 有效期将被重置为 365 天


更新 Node 节点 kubelet 证书
# 生成新的私钥和 CSR
openssl genrsa -out /var/lib/kubelet/pki/kubelet-client.key 2048
openssl req -new \
-key /var/lib/kubelet/pki/kubelet-client.key \
-out /var/lib/kubelet/pki/kubelet-client.csr \
-subj "/CN=system:node:<node-name>/O=system:nodes"
 
# 使用 CA 签发新证书
openssl x509 -req \
-in /var/lib/kubelet/pki/kubelet-client.csr \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial \
-out /var/lib/kubelet/pki/kubelet-client-$(date +%F).pem \
-days 36500
 
# 更新证书
ln -sf /var/lib/kubelet/pki/kubelet-client-$(date +%F).pem /var/lib/kubelet/pki/kubelet-client-current.pem

4、更新 Kubeconfig
cd ~/.kube && mv config config-bak
yes | cp /etc/kubernetes/admin.conf config
 
🔔 若不更新 Kubeconfig,执行 kubectl 命令会出现报错:error: You must be logged in to the server (Unauthorized)
5、重启服务
# 重启 kubelet 服务
systemctl restart kubelet
 
# 重启 kube-apiserver、kube-controller-manage、kube-scheduler 容器
docker ps | grep kube-apiserver | grep -v pause | awk '{print $1}' | xargs -i docker restart {}
docker ps | grep kube-controller-manage | grep -v pause | awk '{print $1}' | xargs -i docker restart {}
docker ps | grep kube-scheduler | grep -v pause | awk '{print $1}' | xargs -i docker restart {}
 
🔔 使用 kubeadm 安装的集群,Master 节点的核心组件都是以静态 Pod 的方式运行的,因此重启服务可以采用重启对应容器的方式
6、验证效果
通过执行 kubectl  命令或检测证书,验证集群证书是否更新成功。

评论