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

时间:2018-03-02 19:02:39

标签: kubernetes google-kubernetes-engine

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

$ kubectl get pod

我收到了这样的错误:

  

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

相同的命令在GCP云shell和

的输出上运行良好
$ gcloud auth list

符合预期:

  

Credentialed Accounts
       ACTIVE ACCOUNT
       * foo@bar.com

我也试图创建clusterrolebinding,但得到类似的错误。

4 个答案:

答案 0 :(得分:20)

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

您可以使用

禁用客户端证书
gcloud config unset container/use_client_certificate

然后使用

重新生成kubectl配置
gcloud container clusters get-credentials my-cluster

或者,您只需在Google云端控制台的群集设置中重新启用旧版授权,或使用以下命令:

gcloud container clusters update [CLUSTER_NAME] --enable-legacy-authorization

答案 1 :(得分:6)

我知道此问题现已解决,但我想补充一些有关此问题可能发生的原因,因为它可能对遇到类似问题的人有用。

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

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

中定义

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

在:

  

来自服务器的错误(禁止):禁止使用pod:用户"客户端"不能   在群集范围列出pod:未知用户"客户端"

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

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

gcloud config unset container/use_client_certificate

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

有关此here的一些信息。

答案 2 :(得分:1)

发现gcloud配置存在一些问题。这个命令解决了它:

gcloud config unset container/use_client_certificate

答案 3 :(得分:1)

除了设置

gcloud config unset container / use_client_certificate

还要确保没有将此env变量设置为True

CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE