首页 > 解决方案 > kubectl "error: You must be logged in to the server (Unauthorized)" 使用 kubectx,而直接使用相同的配置则没有错误

问题描述

当我尝试:在此处的示例中配置几个与此类连接的 KUBECONFIG 环境条目时,我遇到了一个奇怪的行为:

export KUBECONFIG=/Users/user/Work/company/project/setup/secrets/dev-qz/users/admin.conf:/Users/user/Work/company/project/setup/secrets/dev-wer/users/admin.conf:/Users/user/Work/company/project/setup/secrets/test-wer/users/admin.conf:/Users/user/Work/company/project/setup/secrets/test/users/admin.conf:/Users/user/Work/company/project/setup/secrets/dev-jg/users/admin.conf:/Users/user/Work/company/project/setup/secrets/preprod/users/admin.conf:/Users/user/Work/company/project/setup/secrets/dev/users/admin.conf:/Users/user/Work/company/project/setup/secrets/dev-fxc/users/admin.conf:/Users/user/Work/company/project/setup/secrets/cluster-setup/users/admin.conf:/Users/user/Work/company/project/setup/secrets/test-fxc/users/admin.conf:/Users/user/Work/company/project/setup/secrets/test-jg/users/admin.conf:/Users/user/Work/company/project/setup/secrets/test-qz/users/admin.conf

这就是正在发生的事情:如果我选择kubectx集群(不是列表中的每个集群,而是任何一个集群),当我尝试时kubectl get po我会收到:error: You must be logged in to the server (Unauthorized)。但是,如果尝试到达同一个集群,将其直接传递给 kubectl 命令,--kubeconfig=<path to the config>它就可以工作。我对此很苦恼,只想知道其他人是否也面临这种问题以及如何解决

标签: kuberneteskubectl

解决方案


最终我发现了问题。@mario 向我建议的 flatten 命令帮助我更好地调试情况。

基本上,in memoryorin file合并完成了它应该做的事情:创建一个 kubeconfig,其中包含每个 kubeconfig 文件的所有 uniq 参数。除非一个或多个 kubeconfig 具有标识相同组件的相同标签,否则这非常有效。在这种情况下,last按顺序获胜。因此,如果您有以下示例:

grep -Rn 'name: kubernetes-admin$' infra/secrets/*/users/admin.conf
infra/secrets/cluster1/users/admin.conf:16:- name: kubernetes-admin
infra/secrets/cluster2/users/admin.conf:17:- name: kubernetes-admin
infra/secrets/cluster3/users/admin.conf:16:- name: kubernetes-admin

cluster1并且cluster2不会工作,而cluster3会完美地工作,顺便说一句,由于订单。这个问题的解决方案是通过重命名标识用户的标签来避免非 uniq 字段(对于上面的示例)。一旦完成此更改,一切都会完美运行。


推荐阅读