kubeadm 证书过期处理

目录

  1. 免责申明

  2. 说明

  3. renew API server 等证书

    1. kubeadm 配置文件导出

  4. renew master 节点 kubelet 证书

  5. renew 其他节点证书

  6. 参考文档

免责申明

本记录仅可用于测试环境,不保证可完全修复集群,有些操作是自己摸索的不代表正确。

说明

因为经常要做 Kubernetes 相关的测试,于是环境里有很多集群,有时候长时间不开机,集群默认 1 年的证书就过期了,过期后 kubelet 还有 api Server 等都无法正常启动,下面记录下修复过程。

renew API server 等证书

登录 master 节点,使用下列命令直接 renew 所有证书:

然后重启 docker,正常来说 api server 之类的 pod 便可以正常启动。

kubeadm.conf 配置中证书已经被 kubeadm 续期了,证书的部分内容如下:

使用 kubectl --kubeconfig /etc/kubernetes/admin.conf get node 命令可以看到所有节点。将此 config 复制到用户目录方便使用。

kubeadm 配置文件导出

一般部署 kubeadm 时都会准备一个用于初始化的 kubeadm config 文件,文件中包含集群自定义的配置,比如:

如果集群部署时用的全部是默认配置,则 kubeadm 可能使用默认的配置,当 API Server 可用后,需要从下列 configmap 中导出 kubeadm-config.yaml 文件:

renew master 节点 kubelet 证书

之后 systemctl restart kubelet,观察到下列错误,提示 kubelet 证书过期:

/etc/kubernetes/kubelet.conf 中指定了 CA 证书信息以及 kubelet 使用的证书和秘钥,CA 证书是 10 年的还未过期,kubelet 证书已过期,需要修复。

先对原来的文件进行备份:

使用 kubeadm 生成新的 kubelet.conf,此配置会自动附加新的 kubelet 证书:

之后查看到 master 节点为 Ready:

renew 其他节点证书

接着使用相似操作,在 master 节点(包含 ca 根证书的节点)为其他 worker 节点创建 kubelet 配置文件:

创建完后依次 scp 到相应 worker 节点,然后重启 kubelet 服务:

最终可以看到所有节点恢复正常:

参考文档

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/#kubelet-client-cert

这有帮助吗?