You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes api-server证书过期认证失败求助:集群升级后证书异常

解决Kubernetes API Server证书过期认证失败问题

嘿,哥们儿,我刚好踩过这个K8s证书过期的坑,咱们一步步来把它解决掉!

问题根源先理清楚

你的情况太典型了:Kubernetes 1.19之前的版本,默认生成的证书有效期都是1年。你2017年4月13日搭建1.6集群时生成的证书,到2018年4月13日刚好到期。虽然后来升级到1.8时生成了新证书,但显然操作没做完整,API Server这类核心组件还在沿用旧的过期证书,直接导致了认证失败——就是你看到的[authentication.go:64] Unable to authenticate the request due to an error: [x509: certificate has expired...]报错。

一步步解决问题

1. 先确认过期的证书

登录到集群的Master节点,先去默认证书目录/etc/kubernetes/pki/检查,用下面的命令查看API Server证书的有效期:

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep Not

输出里的Not After如果是2018年4月13日左右,那实锤就是证书过期了。

2. 备份旧证书(重要!)

在操作之前,一定要先备份当前的证书目录,防止操作失误无法回滚:

cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak

3. 重新生成完整的核心证书集

因为升级1.8时证书生成不完整,咱们用kubeadm重新生成所有核心证书。首先得先停掉依赖这些证书的核心组件:

systemctl stop kube-apiserver
systemctl stop kube-controller-manager
systemctl stop kube-scheduler

然后执行kubeadm的证书生成命令(1.8版本支持init phase子命令):

kubeadm init phase certs all

这个命令会重新生成API Server、API Server-Kubelet客户端、Front-Proxy客户端等所有核心组件需要的证书。

4. 更新kubeconfig配置文件

证书更新后,还要同步更新admin.conf、kubelet.conf这些配置文件里的证书引用,不然kubectl和kubelet还是会用旧证书:

kubeadm init phase kubeconfig all

别忘了把新的admin.conf复制到当前用户的kube目录,保证kubectl能正常使用:

cp /etc/kubernetes/admin.conf ~/.kube/config

5. 重启所有核心组件和kubelet

现在把刚才停掉的组件重启,让它们加载新证书:

systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl restart kubelet

6. 验证修复效果

执行kubectl get nodes命令,如果能正常返回集群节点列表,说明认证已经恢复正常了。再去看API Server的日志,确认authentication.go:64的报错已经消失。

后续预防建议

  • 因为K8s 1.19之前的版本证书默认只有1年有效期,建议你写个简单的脚本定期检查证书到期时间,提前1个月发出提醒,避免再次踩坑。
  • 下次升级集群时,升级完成后一定要检查所有核心证书的有效期,确保kubeadm完成了完整的证书更新操作。

内容的提问来源于stack exchange,提问作者NoobSkywalker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:28:22