Kubernetes 节点 NotReady 问题(证书过期)解决方案文档
一、问题现象
在 Kubernetes 集群中执行 `kubectl get nodes` 时,节点状态显示为 `NotReady`:

二、初步排查
### 1. 检查 kube-apiserver 状态
确认 kube-apiserver 服务本身处于运行状态,但节点仍未就绪:
[root@jy-master1 ~]# systemctl status kube-apiserver
● kube-apiserver.service
Loaded: loaded (/usr/lib/systemd/system/kube-apiserver.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2025-12-25 18:22:59 CST; 7min ago
...

### 2. 检查 kube-apiserver 日志
日志未显示明显错误,但节点通信存在异常:
[root@jy-master1 ~]# journalctl -u kube-apiserver -f
12月 25 18:30:43 jy-master1 kube-apiserver[7293]: I1225 18:30:43.860707 7293 http.go:132] "HTTP" verb="PUT" URI="/apis/coordination.k8s.io/v1/namespaces/kube-system/leases/kube-controller-manager" latency="4.238035ms" ...

### 3. 检查 apiserver 健康检查接口
访问 apiserver 的健康检查接口返回 `401 Unauthorized`,说明认证存在问题:
[root@jy-master1 ~]# curl -k https://192.168.53.10:6443/healthz
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
}
### 4. 检查证书签名请求(CSR)
节点的 kubelet 证书请求处于 `Pending` 状态,说明证书未完成签名,导致节点无法与 apiserver 正常通信:
[root@jy-master1 ~]# kubectl get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
node-csr-7RaBtu-WYexvLuTAHN62hAKN58LwseyDmRQ14sXNXt0 24h kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap <none> Pending
node-csr-eA-oRm70MHEInzyekgRDV9vPqGBGJoocrgssgWHjSZ5U 24h kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap <none> Pending

三、核心原因
Kubernetes 集群中由 kubeadm 管理的证书(包括 apiserver、kubelet 等组件证书)**过期**,导致节点与 apiserver 之间的认证失败,节点状态异常。
四、解决步骤
### 步骤1:检查证书过期状态
使用 `kubeadm` 检查集群证书的过期时间,确认证书已过期:
kubeadm certs check-expiration
### 步骤2:续期所有证书
续期 kubeadm 管理的所有证书(将有效期重置为1年):
kubeadm certs renew all
**输出示例**:
certificate embedded in the kubeconfig file /etc/kubernetes/admin.conf renewed
certificate for serving the Kubernetes API renewed
...(其他证书续期提示)
### 步骤3:续期管理员 kubeconfig 证书
(注:`super-admin.conf` 为自定义配置,此处以默认 `admin.conf` 为例)
续期管理员配置文件 `admin.conf` 中的证书:
kubeadm certs renew admin.conf
### 步骤4:重启核心组件(使新证书生效)
证书续期后,重启控制平面静态 Pod 组件(kube-apiserver、etcd 等):
# 删除静态 Pod 配置(kubelet 会自动重建,加载新证书)
rm -f /etc/kubernetes/manifests/{kube-apiserver,kube-controller-manager,kube-scheduler,etcd}.yaml
# 重启 kubelet 触发组件重建
systemctl restart kubelet
### 步骤5:批准节点 CSR 请求
批准节点的 kubelet 证书签名请求,使节点完成认证:
kubectl certificate approve $(kubectl get csr | grep Pending | awk '{print $1}')
**输出示例**:
certificatesigningrequest.certificates.k8s.io/node-csr-7RaBtu-WYexvLuTAHN62hAKN58LwseyDmRQ14sXNXt0 approved
certificatesigningrequest.certificates.k8s.io/node-csr-eA-oRm70MHEInzyekgRDV9vPqGBGJoocrgssgWHjSZ5U approved
## 五、验证结果
执行 `kubectl get nodes` 确认节点状态恢复为 `Ready`:
[root@jy-master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
jy-node1 Ready <none> 2y195d v1.27.2
jy-node2 Ready <none> 2y195d v1.27.2


浙公网安备 33010602011771号