未知用户"客户端"是什么意思?

Yan*_*Pan 6 kubernetes google-kubernetes-engine

当我使用gcloud sdk在我的本地shell上运行一个简单的命令时.

$ kubectl get pod
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

来自服务器的错误(禁止):禁止使用pod:用户"client"无法列出群集范围内的pod:未知用户"client"

相同的命令在GCP云shell上运行正常,并且输出

$ gcloud auth list
Run Code Online (Sandbox Code Playgroud)

如预期的那样:

Credentialed帐户
ACTIVE ACCOUNT
* foo@bar.com

我也尝试创建clusterrolebinding,但得到类似的错误.

Rob*_*een 22

在群集设置中禁用旧版授权时会发生这种情况,因为您使用的客户端证书是旧版身份验证方法.所以看起来正在发生的事情是客户端身份验证成功但授权失败,正如预期的那样.(错误消息中的"未知用户",令人困惑,似乎意味着授权系统不知道用户,而不是认证系统.)

您可以禁用客户端证书的使用

gcloud config unset container/use_client_certificate
Run Code Online (Sandbox Code Playgroud)

然后用.重新生成你的kubectl配置

gcloud container clusters get-credentials my-cluster
Run Code Online (Sandbox Code Playgroud)

或者,您只需在Google云端控制台的群集设置中重新启用旧版授权即可.


nei*_*ilH 7

我知道这个问题现在已经解决了,但我想补充一些关于为什么会出现这个问题的信息,因为它可能对遇到类似问题的人有用.

Kubernetes Engine用户可以使用Google OAuth2访问令牌对Kubernetes API进行身份验证,这意味着当用户创建新群集时,Kubernetes Engine会配置kubectl以向群集验证用户身份.

还可以使用包括使用群集证书和/或用户名和密码的传统方法对群集进行身份验证.这是在gcloud config.中定义的.

例如Cloud Shell中的gcloud的配置可能与其他地方的gcloud的安装不同,例如在家庭工作站上.

的:

来自服务器的错误(禁止):禁止使用pod:用户"client"无法列出群集范围内的pod:未知用户"client"

错误表明gcloud config set container/use_client_certificate设置为True即gcloud期望客户端群集证书向群集进行身份验证(这是错误消息中的"客户端"所指的).

正如@Yanwei发现的那样,通过在glcoud配置中发出以下命令来取消设置container/use_client_certificate,结束了对旧证书或凭证的需求,并防止出现错误消息:

gcloud config unset container/use_client_certificate
Run Code Online (Sandbox Code Playgroud)

如果您在家庭工作站或其他地方使用旧版本的gcloud,则可能更有可能出现此类问题.

有一些这方面的信息在这里.


Yan*_*Pan 1

发现 gcloud 配置有问题。这个命令解决了这个问题:

gcloud config unset container/use_client_certificate
Run Code Online (Sandbox Code Playgroud)