在没有证书的情况下恢复 Kubernetes 集群

Recovering Kubernetes cluster without certs

我在实验室中遇到了以下情况,想看看是否可以恢复。集群已损坏,但这是意料之中的事情,因为我正在测试破坏集群后还能恢复到什么程度。

环境: 库伯内斯 1.16.3 Kubespray

我正在做一些实验,没有关于这个集群的任何数据,但我仍然很好奇它是否有可能恢复。我有一个健康的 3 节点 etcd 集群,具有原始配置(所有名称空间、工作负载、配置映射等)。我没有控制平面的原始 SSL 证书。

我从集群中删除了所有节点(kubeadm 重置)。我有原始清单和 kubelet 配置并尝试重新初始化主节点。它比我想象的要成功得多,但不是我想要的。 kubeadm init 成功后,kubelet 和control plane 容器成功启动,但没有创建相应的pods。我能够将 kube API 与 kubectl 一起使用,并查看节点、命名空间、部署等

在 kube-system 命名空间中,所有守护进程仍然存在,但 pods 不会以以下消息开头:

49m         Warning   FailedCreate        daemonset/kube-proxy                                Error creating: Timeout: request did not complete within requested timeout

kubelet 记录以下重新控制平面pods

Jul 21 22:30:02 k8s-master-4 kubelet[13791]: E0721 22:30:02.088787   13791 kubelet.go:1664] Failed creating a mirror pod for "kube-scheduler-k8s-master-4_kube-system(3e128801ef687b022f6c8ae175c9c56d)": Timeout: request did not complete within requested timeout
Jul 21 22:30:53 k8s-master-4 kubelet[13791]: E0721 22:30:53.089517   13791 kubelet.go:1664] Failed creating a mirror pod for "kube-controller-manager-k8s-master-4_kube-system(da5cfae13814fa171a320ce0605de98f)": Timeout: request did not complete within requested timeout

在 kubeadm reset/init 过程中,我已经有了一些步骤,所以我可以到达现在的位置(删除服务帐户以重置令牌,删除一些配置映射(kuebadm 等))

我的问题是 - 是否可以在没有证书的情况下恢复控制平面。如果它复杂但仍然可能的过程我仍然想知道。

感谢所有帮助

亨罗

is it possible to recover the control plane without the certs.

是的,应该可以。证书是必需的,但它们不必与您最初创建集群时使用的证书完全相同。所有certificates including the CA can be rotated across the board. The kubelet even supports certificate auto-rotation。不过,配置需要在任何地方都匹配。这意味着 CA 需要与创建 CSR 的 CA 相同,并且证书 keys/certs 需要从相同的 CSR 创建。

此外,所有组件都需要使用相同的 CA,并且能够通过 API 服务器(kube-controller-manager、kube-scheduler 等)进行身份验证。我不完全确定您看到的日志,但看起来 kube-controller-manager 和 kube-scheduler 无法进行身份验证和加入集群。所以我会看看他们的证书配置:

  • /etc/kubernetes/kube-controller-manager.conf
  • /etc/kubernetes/kube-scheduler.conf

此外,您会在 /etc/kubernetes/pki

下找到需要验证的每个 PKI 组件

✌️