k8s重启后kubectl get nodes: Unable to connect to the server: x509: certificate has expired or is not ye

出现以下问题,极有可能是apiserver 证书过期导致:

1,kuboard/k8s无法正常拉取镜像。

2,kuboard/k8s重启后执行 kubectl get nodes报错:

Unable to connect to the server: x509: certificate has expired or is not yet valid

查看证书是否过期:

执行:openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not

提示如下则为证书过期:

k8s自带的apiserver证书是一年的有效期。

/etc/kubernetes/pki/apiserver.crt           #1年有效期
/etc/kubernetes/pki/front-proxy-ca.crt        #10年有效期
/etc/kubernetes/pki/ca.crt              #10年有效期
/etc/kubernetes/pki/apiserver-etcd-client.crt    #1年有效期
/etc/kubernetes/pki/front-proxy-client.crt      #1年有效期
/etc/kubernetes/pki/etcd/server.crt         #1年有效期
/etc/kubernetes/pki/etcd/ca.crt           #10年有效期
/etc/kubernetes/pki/etcd/peer.crt          #1年有效期
/etc/kubernetes/pki/etcd/healthcheck-client.crt  #1年有效期
/etc/kubernetes/pki/apiserver-kubelet-client.crt  #1年有效期

使用命令统一查看证书过期时间:

kubeadm  certs check-expiration 

 

解决办法,更换证书:

1,下载脚本:

百度网盘 - 共享邀请链接

2,添加可执行权限:chmod +x update-kubeadm-cert.sh

3,重启systemctl restart kubelet。

查看集群状态:

systemctl status kubelet

kubectl get nodes, kubectl get pods

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是由于 kubectl 客户端无法验证 Kubernetes API Server 证书颁发机构 (CA) 导致的。这可能是由于以下原因之一: - Kubernetes API Server 证书由自己签名,而不是由受信任的 CA 签名。 - Kubernetes API Server 证书由一个不受信任的 CA 签名。 - 证书链不完整或不正确导致客户端无法验证证书的有效性。 要解决这个问题,可以考虑以下几个步骤: 1. 确认你的 kubectl 版本与 Kubernetes 集群版本相匹配。如果版本不匹配可能会导致此问题。 2. 确认你的 Kubernetes API Server 的证书链完整且正确。你可以使用以下命令来检查证书: ``` openssl s_client -connect <api-server>:<port> ``` 在连接成功后,你应该能够看到证书链的详细信息。确保证书链完整,没有任何错误。 3. 如果 Kubernetes API Server 的证书由一个不受信任的 CA 签名,则需要将该 CA 的证书添加到 kubectl 客户端的受信任 CA 列表中。可以使用以下命令将 CA 证书添加到 kubectl 中: ``` kubectl config set-cluster <cluster-name> --certificate-authority=<path/to/ca.crt> --server=<https://api-server:port> ``` 请将 `<cluster-name>` 替换为你的集群名称,`<path/to/ca.crt>` 替换为 CA 证书的路径,`<https://api-server:port>` 替换为 Kubernetes API Server 地址和端口。 4. 如果 Kubernetes API Server 证书由自己签名,则需要创建自己的 CA 并签署证书。可以使用以下命令生成自签名的 CA 证书: ``` openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -subj "/CN=<cluster-name>-ca" -days 3650 -out ca.crt ``` 然后,可以使用以下命令为 Kubernetes API Server 生成证书: ``` openssl genrsa -out apiserver.key 2048 openssl req -new -key apiserver.key -subj "/CN=<api-server>" | openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver.crt -days 365 ``` 请将 `<cluster-name>` 替换为你的集群名称,`<api-server>` 替换为 Kubernetes API Server 主机名。 生成证书后,可以将 CA 证书和 Kubernetes API Server 证书添加到 kubectl 中: ``` kubectl config set-cluster <cluster-name> --certificate-authority=<path/to/ca.crt> --server=<https://api-server:port> kubectl config set-credentials <username> --client-certificate=<path/to/apiserver.crt> --client-key=<path/to/apiserver.key> kubectl config set-context <context-name> --cluster=<cluster-name> --user=<username> kubectl config use-context <context-name> ``` 请将 `<cluster-name>` 替换为你的集群名称,`<path/to/ca.crt>` 替换为 CA 证书的路径,`<https://api-server:port>` 替换为 Kubernetes API Server 地址和端口,`<username>` 替换为你的用户名,`<path/to/apiserver.crt>` 和 `<path/to/apiserver.key>` 分别替换为生成的 Kubernetes API Server 证书和私钥的路径,`<context-name>` 替换为你的上下文名称。 以上是解决此问题的常见步骤,具体步骤可能因不同的环境而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值