kubectl get nodes时,Unable to connect to the server: x509: certificate signed by unknown authority

使用kubeadm reset之后,重新初始化之后,使用kubectl get pods命令时,出现:

[***@k8s-master-*** ***]$ kubectl get pods
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

解决方法:
之前初始化时,执行kubeadm init --kubernetes-version=v1.11.0 --apiserver-advertise-address=... 命令创建集群。提示执行以下几个命令:

 mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看发现,kubeadm reset时没有删除.kube目录下的文件,这里手动删除,然后再按上述步骤执行一遍,即可解决问题。
如下:

[***@k8s-master-*** ~]$ rm -rf .kube
[***@k8s-master-*** ~]$ mkdir -p .kube
[***@k8s-master-*** .kube]$ cd .kube
[***@k8s-master-*** .kube]$ sudo cp /etc/kubernetes/admin.conf config
[***@k8s-master-*** .kube]$ sudo chown $(id -u):$(id -g) config
[***@k8s-master-*** ~]$ kubectl get pods
No resources found.
[***@k8s-master-*** ~]$ kubectl get nodes
NAME              STATUS     ROLES     AGE       VERSION
k8s-master-***   NotReady   master    1d        v1.11.0

现在就可以将从节点加入集群了

参考(https://blog.csdn.net/woay2008/article/details/93250137

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值