该错误表示kubectl无法验证Kubernetes API server的证书,因此无法连接集群。要解决该错误,我们需要更新证书。
如果使用kubeadm创建的集群,可以通过以下方式更新证书:
1. 运行以下命令更新所有证书:
sudo kubeadm alpha certs renew all --config=kubeadm.yaml
该命令会在/etc/kubernetes/pki目录下重新生成ca证书和所有服务的客户端证书、服务端证书以及ca-client-ca-server证书等。
2. kubeadm.yaml文件是kubeadm init时使用的YAML文件,该文件中包含有关集群CA和API server的信息。如果无法找到该文件,可以重新运行:
sudo kubeadm init --config=kubeadm.yaml
这将重新生成主要证书,但不会影响现有工作负载。
3. 重新启动相关服务使新证书生效:
systemctl restart kube-apiserver kube-controller-manager kube-scheduler
# 如果是docker作为容器的话,可执行如下命令。其余容器方法类似
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 {}
4. 在其余节点上,分发新的/etc/kubernetes/pki和新的kubeconfig配置:
sudo kubeadm upgrade node experimental-control-plane
该命令会分发新的API server证书并要求所有控制平面组件重新加载证书。
5. 删除浏览器中保存的旧CA并重新访问仪表板。
6. 用户也需要更新~/.kube/config中的证书数据或重新获取kubeconfig文件。
及时更新证书是管理K8s集群安全的重要工作。熟悉证书在K8s中的作用和更新过程,可以帮助我们妥善维护证书,保证集群稳定运行。
由 kubeadm 生成的客户端证书默认只有一年有效期,我们可以通过 check-expiration 命令来检查证书是否过期:
$ kubeadm alpha certs check-expiration
Unable to connect to the server: x509: certificate has expired or is not yet valid
于 2023-06-15 15:15:11 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)