更新 kubernetes 过期证书
作者:互联网
问题描述
在Kubernetes Cluster中,在集群初时化时创建的证书1年到期。到期之后,集群的各个组件之间将无法访问
环境概述
属性 | 信息 |
---|---|
系统环境 | CentOS Linux release 7.7.1908 (Core) |
软件版本 | Kubernetes v1.19.8 |
证书管理相关文档
官方文档 - 使用 kubeadm 进行证书管理 https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/ [官方文档 - kubeadm alpha 使用说明 https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-alpha/
解决办法
通过延长证书期限即可解决问题…………无需重新生成证书。
第一步、备份配置文件(主机节点
cp -drv /etc/kubernetes /etc/kubernetes.backup
第二步、延长证书期限(主机节点)
单节点
可以直接运行 kubeadm alpha certs renew all --config kubeadm.yaml
完成证书更新。然后替换 kubelet 配置
多 master 节点证书更新
所有 master 节点依次完成如下命令
etcd 心跳证书: kubeadm alpha certs renew etcd-healthcheck-client --config kubeadm-config.yaml etcd peer 证书: kubeadm alpha certs renew etcd-peer --config kubeadm-config.yaml etcd server 证书: kubeadm alpha certs renew etcd-server --config kubeadm-config.yaml front-proxy-client 证书: kubeadm alpha certs renew front-proxy-client --config kubeadm-config.yaml apiserver-etcd-client 证书 kubeadm alpha certs renew apiserver-etcd-client --config kubeadm-config.yaml apiserver-kubelet-client 证书 kubeadm alpha certs renew apiserver-kubelet-client --config kubeadm-config.yaml apiserver 证书 kubeadm alpha certs renew apiserver --config kubeadm-config.yaml
不同的 master 节点使用的 kubeadm 配置有细微的差异,执行更新证书是,每个 master 在 --config
后面使用原来集群创建时,当前 master 对应的 kubeadm 配置文件。
第三步、更新配置文件(主机节点)
# 移除旧配置 rm -rf /etc/kubernetes/admin.conf rm -rf /etc/kubernetes/kubelet.conf rm -rf /etc/kubernetes/controller-manager.conf rm -rf /etc/kubernetes/scheduler.conf # 生成新配置(而实际上是更新客户端证书) kubeadm init phase kubeconfig all --config ${kubeadm.yaml配置文件}
第四步、重启服务(所有节点)
systemctl restart kubelet.service
第五步、验证集群状态
清理前次的 kubectl 权限信息:rm -rf $HOME/.kube
。
重新配置 kubectl 权限信息:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 验证 etcd:查看 etcd 中某个节点的 docker 日志,日志中所有 etcd peer 均 active 且加入到同一个集群
- 验证 kubernetes 集群:运行
kubectl cluster-info
和kubectl get nodes
符合预期。 - 确性 kubernetes 系统相关的服务运行正常 (核心是
kube-apiserver
,kube-controller-manager
,kube-proxy
,kube-flannel
):kubectl get pods -n kube-system
- 检查 pod 的运行状态:
kubectl get pods --all-namespaces
可能的问题
Part of the existing bootstrap client certificate is expired: 2020-01-19 15:10:17 +0000 UTC
:确认全部证书更新,并且证书更新好后,更新了 kubernetes 配置- api server 日志:
Unable to authenticate the request due to an error: [x509: certificate has expired or is not yet valid, x509: certificate has expired or is not yet valid]
。可能原因有:证书过期;证书部分更新;master 上包含了代理配置,导致对 apiserver 的请求走了代理,证书认证通不过(运行unset http_proxy;unset ftp_proxy;unset socks_proxy;unset https_proxy
,取消代理配置)。
标签:kubernetes,证书,过期,--,etcd,kubeadm,config 来源: https://www.cnblogs.com/deny/p/16373633.html