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

Woj*_*Zet 7 kubernetes

基础设施没有变化如果我执行任何 kubectl 命令,即:

kubectl get nodes
Run Code Online (Sandbox Code Playgroud)

我有错误

You must be logged in to the server (Unauthorized) 
Run Code Online (Sandbox Code Playgroud)

而且我有工作的 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)
Run Code Online (Sandbox Code Playgroud)

Aru*_*hok 9

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

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

如果在运行 API 到集群时出现以下错误(在我的例子中是 Kubectl):

error: You must be logged in to the server (Unauthorized)
Run Code Online (Sandbox Code Playgroud)

请按照以下顺序进行操作。

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

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

alias kctl="kubectl --kubeconfig=/Users/arunlal/.kube/config_two"
Run Code Online (Sandbox Code Playgroud)

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

[arunlal.as@crybit.com ~] cat /Users/arunlal/.kube/config_two| grep -A 5 个用户
用户:
- 姓名:阿伦拉尔
  用户:
    客户端证书:/Users/arunlal/.arunlal-keys/arunlal.crt
    客户端密钥:/Users/arunlal/.arunlal-keys/arunlal.key

- 在客户端配置中获取证书后,您可以使用 openssl 命令检查有效性。

    [arunlal.as@crybit.com ~] 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
Run Code Online (Sandbox Code Playgroud)

- 为了解决这个问题,我重新创建了更多天数的证书

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。

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

〜阿伦


Sac*_*ram 9

更新证书后我得到了同样的结果:

kubeadm alpha certs renew all

然后我不得不跟随

$ cd ~/.kube

# Archive the old config file containing the out of date certificates
$ mv config conf.archive.2021

# Copy the new configuration file created using kubeadm
$ cp /etc/kubernetes/admin.conf config

# apply permissions to your current admin user and group
$ sudo chown $(id -u):$(id -g) config
Run Code Online (Sandbox Code Playgroud)

库伯内特版本:1.19

参考


小智 7

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

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

  • 对我来说,“/etc/kubernetes/kubelet.conf”中的新密钥具有 pem 文件的路径。我必须执行 `sudo base64 -w 0 /var/lib/kubelet/pki/kubelet-client-current.pem` 并将其输出粘贴到 `~/.kube/config` 中以获取匹配的密钥。 (3认同)

小智 5

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


Woj*_*Zet 0

已修复 - 所有证书均已更改后。检查你的 ~/.kube/config 如果你有这个

  • 你在 ~/kube/config 中更改了什么?为什么证书会改变? (2认同)