我的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访问它,因此我无法真正进行部署或查询。任何有关续订的文档或指南都会有很大帮助
答案 0 :(得分:3)
在以下主题中也讨论了该主题:
Kubernetes v1.15 提供了“使用kubeadm进行证书管理”的文档:
kubeadm alpha certs check-expiration
kubeadm alpha certs renew
命令手动续订证书。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
重新启动kubelet
和docker
守护程序:
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