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" ...

image

### 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

image

三、核心原因

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

image

posted @ 2026-01-09 16:06  太阳的阳ฅ  阅读(15)  评论(0)    收藏  举报