过期后续订kubernetes pki

时间:2019-05-27 06:44:40

标签: kubernetes ssl-certificate

我的kubernetes PKI已过期(确切地说是API服务器),我找不到更新它的方法。我得到的错误是

May 27 08:43:51 node1 kubelet[8751]: I0527 08:43:51.922595    8751 server.go:417] Version: v1.14.2
May 27 08:43:51 node1 kubelet[8751]: I0527 08:43:51.922784    8751 plugins.go:103] No cloud provider specified.
May 27 08:43:51 node1 kubelet[8751]: I0527 08:43:51.922800    8751 server.go:754] Client rotation is on, will bootstrap in background
May 27 08:43:51 node1 kubelet[8751]: E0527 08:43:51.925859    8751 bootstrap.go:264] Part of the existing bootstrap client certificate is expired: 2019-05-24 13:24:42 +0000 UTC
May 27 08:43:51 node1 kubelet[8751]: F0527 08:43:51.925894    8751 server.go:265] failed to run Kubelet: unable to load bootstrap
kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/上的文档描述了如何续订,但仅在API服务器未过期的情况下才有效。我试图做

kubeadm alpha cert renew all

进行重新引导,但这只是使整个群集失败,因此我回滚到快照(我的群集正在VMware上运行)。

集群正在运行,所有容器似乎都可以工作,但是我无法通过kubectl访问它,因此我无法真正进行部署或查询。任何有关续订的文档或指南都会有很大帮助

8 个答案:

答案 0 :(得分:3)

在以下主题中也讨论了该主题:


Kubernetes v1.15 提供了“使用kubeadm进行证书管理”的文档:

kubeadm alpha certs check-expiration
  • 自动证书更新:
    • kubeadm在控制平面升级期间续订所有证书。
  • 手动证书续订:
    • 您可以随时使用kubeadm alpha certs renew命令手动续订证书。
    • 此命令使用存储在/ etc / kubernetes / pki中的CA(或front-proxy-CA)证书和密钥执行更新。

Kubernetes v1.14的总体,我发现此过程最有用:

答案 1 :(得分:2)

我正在使用Kubernetes v15.1并如上所述更新了我的证书,但是仍然出现相同的错误。 /etc/kubernetes/kubelet.conf 仍指过期/旧的“客户端证书数据”。

经过一些研究,我发现如果证书续签未设置为true,则kubeadm不会更新 /etc/kubernetes/kubelet.conf 文件。因此,请注意版本1.17(https://github.com/kubernetes/kubeadm/issues/1753)以下的kubeadm的错误。

kubeadm仅在使用certificate-renewal = true完成集群升级时才进行升级。因此,我不得不手动删除 /etc/kubernetes/kubelet.conf 并使用kubeadm init phase kubeconfig kubelet重新生成,最终解决了我的问题。

答案 2 :(得分:1)

尝试通过kubeadm init phase certs命令进行证书续订。

您可以通过以下命令检查证书的过期时间:

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

openssl x509 -in /etc/kubernetes/pki/apiserver-kubelet-client.crt -noout -text

首先,确保您具有k8s证书清单/etc/kubernetes/pki/*的最新备份。

删除apiserver.*目录中的apiserver-kubelet-client.*/etc/kubernetes/pki/证书文件。

通过kubeadm init phase certs命令生成新证书:

sudo kubeadm init phase certs apiserver

sudo kubeadm init phase certs apiserver-kubelet-client

重新启动kubeletdocker守护程序:

sudo systemctl restart docker; sudo systemctl restart kubelet

您可以在官方的K8 documentation中找到更多相关信息。

答案 3 :(得分:1)

所以解决方案是(首先备份)

$ cd /etc/kubernetes/pki/
$ mv {apiserver.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,front-proxy-ca.crt,front-proxy-client.crt,front-proxy-client.key,front-proxy-ca.key,apiserver-kubelet-client.key,apiserver.key,apiserver-etcd-client.crt} ~/
$ kubeadm init phase certs all --apiserver-advertise-address <IP>
$ cd /etc/kubernetes/
$ mv {admin.conf,controller-manager.conf,mv kubelet.conf,scheduler.conf} ~/
$ kubeadm init phase kubeconfig all
$ reboot

然后

$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

那为我做了工作,感谢您的提示:)

答案 4 :(得分:1)

[root@nrchbs-slp4115 ~]# kubectl get apiservices |egrep metrics
v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        125m


[root@nrchbs-slp4115 ~]# kubectl get svc -n kube-system
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns         ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   20d
metrics-server   ClusterIP   10.99.2.11   <none>        443/TCP                  125m


[root@nrchbs-slp4115 ~]# kubectl get ep -n kube-system
NAME                      ENDPOINTS                                               AGE
kube-controller-manager   <none>                                                  20d
kube-dns                  10.244.0.5:53,10.244.0.6:53,10.244.0.5:53 + 3 more...   20d
kube-scheduler            <none>                                                  20d
metrics-server            10.244.2.97:443                                         125m
[root@nrchbs-slp4115 ~]#

答案 5 :(得分:1)

这将更新/etc/kubernetes/ssl下的所有证书

kubeadm alpha certs renew all --config=/etc/kubernetes/kubeadm-config.yaml

并执行以下操作以重新启动服务器命令:

kill -s SIGHUP $(pidof kube-apiserver)
kill -s SIGHUP $(pidof kube-controller-manager)
kill -s SIGHUP $(pidof kube-scheduler)

答案 6 :(得分:1)

为了在第一个母版上的第二个母版上更新后我正在寻找答案的同时,帮助其他人使用Multi-Master设置,我这样做是从另一个问题中找到的:

kubeadm仅在使用certificate-renewal = true完成集群升级时才进行升级。因此,我不得不手动删除/etc/kubernetes/kubelet.conf并使用kubeadm初始阶段kubeconfig kubelet重新生成它,最终解决了我的问题。

答案 7 :(得分:0)

我使用config.yaml来配置Master,因此对我来说,答案是:

sudo -i
mkdir -p ~/k8s_backup/etcd
cd /etc/kubernetes/pki/
mv {apiserver.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,front-proxy-ca.crt,front-proxy-client.crt,front-proxy-client.key,front-proxy-ca.key,apiserver-kubelet-client.key,apiserver.key,apiserver-etcd-client.crt} ~/k8s_backup
cd /etc/kubernetes/pki/etcd
mv {healthcheck-client.crt,healthcheck-client.key,peer.crt,peer.key,server.crt,server.key} ~/k8s_backup/etcd/
kubeadm init phase certs all --ignore-preflight-errors=all --config /etc/kubernetes/config.yaml

cd /etc/kubernetes
mv {admin.conf,controller-manager.conf,kubelet.conf,scheduler.conf} ~/k8s_backup
kubeadm init phase kubeconfig all --config /etc/kubernetes/config.yaml --ignore-preflight-errors=all

我会重新启动

shutdown now -r