当我使用gcloud sdk在我的本地shell上运行一个简单的命令时 .
$ kubectl get pod
我收到这样的错误:
来自服务器的错误(禁止):禁止使用pod:用户“client”无法列出群集范围内的pod:未知用户“client”
相同的命令在GCP Cloud shell上运行正常,并且输出
$ gcloud auth list
如预期的那样:
Credentialed Accounts ACTIVE ACCOUNT * foo@bar.com
我也试图创建clusterrolebinding,但得到类似的错误 .
4 回答
在群集设置中禁用旧版授权时会发生这种情况,因为您使用的客户端证书是旧版身份验证方法 . 所以看起来正在发生的是客户端身份验证成功但授权失败,正如预期的那样 . (错误消息中的“未知用户”,令人困惑,似乎意味着授权系统不知道用户,而不是认证系统 . )
您可以禁用客户端证书的使用
然后用 . 重新生成你的kubectl配置
或者,您只需在Google Cloud 端控制台的群集设置中重新启用旧版授权即可 .
我知道这个问题现在已经解决,但我想补充一些关于为什么会出现此问题的信息,因为它可能对遇到类似问题的人有用 .
Kubernetes Engine用户可以使用Google OAuth2访问令牌对Kubernetes API进行身份验证,这意味着当用户创建新群集时,Kubernetes Engine会配置kubectl以向群集验证用户身份 .
还可以使用包括使用群集证书和/或用户名和密码的传统方法对群集进行身份验证 . 这在
gcloud config
中定义 .例如Cloud Shell中的gcloud的配置可能与其他地方的gcloud的安装不同,例如在家庭工作站上 .
的:
错误表明gcloud
config set container/use_client_certificate
设置为True
,即gcloud期望客户端群集证书对群集进行身份验证(这是错误消息中引用的'client') .正如@Yanwei所发现的那样,通过在glcoud配置中发出以下命令来取消设置container / use_client_certificate,结束了对旧证书或凭证的需求,并防止出现错误消息:
如果您在家庭工作站或其他地方使用旧版本的gcloud,则可能更有可能出现此类问题 .
有关此here的一些信息 .
发现gcloud配置存在一些问题 . 这个命令解决了它:
除了设置
gcloud config unset container / use_client_certificate
还要确保没有将此env变量设置为True
CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE