kubectl 获取节点错误:您必须登录到服务器(未经授权) - 如何修复

kubectl 获取节点错误:您必须登录到服务器(未经授权) - 如何修复

在不改变基础设施的情况下如果我执行任何 kubectl 命令,即:

kubectl get nodes

我得到了错误

You must be logged in to the server (Unauthorized) 

kubernetes 集群运行正常,我没有对其进行任何更改...有什么想法可以调试它吗?kubectl 没有 -vv od 调试标志来提供更多信息。

如果我尝试

kubectl version

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0",
(...) 
error: You must be logged in to the server (the server has asked for the client to provide credentials)

答案1

就我而言,问题是在更新 kubernates 证书后开始的,这导致现有的证书~/.kube/config中存在过时的密钥和证书值。

解决方案是更换 client-certificate-dataclient-key-data在文件中使用同名~/.kube/config更新文件中的值。/etc/kubernetes/kubelet.conf

答案2

从 Kubernetes 的较新版本开始,您可以将client-certificate-data和复制client-key-data到文件/etc/kubernetes/admin.conf中。请参阅~/.kube/config这个答案确定您的证书何时到期。

答案3

我今天也遇到了类似的问题,上面的评论帮助我解决了这个问题。我在我的场景中添加了更多细节,因为这可能会对有类似设置的人有所帮助。

我有一个单独的用户用于连接到我的 k8s 集群(它是 EC2 实例中的普通集群)。我通过添加 ClusterRoleBindings 创建了具有有限访问权限的用户 arunlal。

如果在运行 API 到集群时收到以下错误(在我的情况下是 Kubectl):

error: You must be logged in to the server (Unauthorized)

请按照下列顺序进行。

- 首先检查配置文件(本地客户端)中使用的证书

我在本地系统上有一个单独的配置,因为主配置包含有关其他 k8s 和 okd 集群凭据的详细信息。因此,我在笔记本电脑上创建了第二个配置 (/Users/arunlal/.kube/config_two)。在这种情况下,我有以下别名:

alias kctl="kubectl --kubeconfig=/Users/arunlal/.kube/config_two"

- 从此文件中您将获得我们正在使用的证书。

[[电子邮件保护]~] cat /Users/arunlal/.kube/config_two| grep -A 5 个用户
用户:
-姓名:arunlal
  用户:
    客户端证书:/Users/arunlal/.arunlal-keys/arunlal.crt
    客户端密钥:/Users/arunlal/.arunlal-keys/arunlal.key

- 一旦您在客户端配置中获得证书,您就可以使用 openssl 命令检查其有效性。

    [[电子邮件保护]~] openssl x509 -noout -dates -in /Users/arunlal/.arunlal-keys/arunlal.crt
    notBefore=2021 年 6 月 22 日 23:43:22 GMT
    notAfter=2021 年 9 月 30 日 23:43:22 GMT

- 验证有效期

创建用户时,我将天数设置为 5,这就是问题所在。我如何创建用户?

openssl genrsa -out arunlal.key 2048
openssl req -new -key arunlal.key -out arunlal.csr -subj "/CN=arunlal/O=crybit"
openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 5
kubectl config set-credentials arunlal --client-certificate=/root/arunlal-keys/arunlal.crt  --client-key=/root/arunlal-keys/arunlal.key

- 为了解决这个问题,我重新创建了证书,并增加了有效天数

openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 100

- 我们需要从 k8s 集群运行这个。

- 在本地替换了证书。

使用新证书修改了 /Users/arunlal/.arunlal-keys/arunlal.crt。

希望这能对某人有所帮助。谢谢!

〜阿伦

答案4

kubeconfig 证书可能已更改。如果您使用 terraform 部署了集群。请执行 terraform apply 以生成新的 kubeconfig 文件。

相关内容