Kim*_*sen 23 ssl-certificate kubernetes
我的 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
Run Code Online (Sandbox Code Playgroud)
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/上的文档描述了如何更新,但它仅在 API 服务器未过期时才有效。我试过做一个
kubeadm alpha cert renew all
Run Code Online (Sandbox Code Playgroud)
并重新启动,但这只会使整个集群失败,所以我回滚到快照(我的集群在 VMware 上运行)。
集群正在运行,所有容器似乎都在工作,但我无法通过 kubectl 访问它,因此我无法真正部署或查询。
我的 kubernetes 版本是 1.14.2。
Kim*_*sen 49
所以解决方案是(首先备份)
$ 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,kubelet.conf,scheduler.conf} ~/
$ kubeadm init phase kubeconfig all
$ reboot
Run Code Online (Sandbox Code Playgroud)
然后
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
Run Code Online (Sandbox Code Playgroud)
这为我完成了工作,感谢您的提示:)
该主题也在以下内容中讨论:
Kubernetes v1.15提供了“使用 kubeadm 进行证书管理”的文档:
kubeadm alpha certs check-expiration
Run Code Online (Sandbox Code Playgroud)
kubeadm alpha certs renew命令手动更新证书。总的来说,对于Kubernetes v1.14,我发现这个过程最有帮助:
小智 5
我使用的是 Kubernetes v15.1 并按照上面的说明更新了我的证书,但我仍然遇到相同的错误。/etc/kubernetes/kubelet.conf仍然引用过期/旧的“客户端证书数据” 。
经过一番研究,我发现如果证书更新未设置为 true, kubeadm 不会更新/etc/kubernetes/kubelet.conf文件。所以请注意 1.17 以下版本的 kubeadm 的一个 bug(https://github.com/kubernetes/kubeadm/issues/1753)。
仅当使用certificate-renewal=true 完成集群升级时,kubeadm 才会升级。所以我必须手动删除/etc/kubernetes/kubelet.conf并重新生成它,kubeadm init phase kubeconfig kubelet最终解决了我的问题。
尝试通过以下方式更新证书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
您可以在 K8s 官方文档中找到更多相关信息。
| 归档时间: |
|
| 查看次数: |
26138 次 |
| 最近记录: |