【问题标题】:kubectl oauth2 authentication with container engine fails容器引擎的 kubectl oauth2 身份验证失败
【发布时间】:2016-12-26 16:30:26
【问题描述】:

我在我的部署管道中使用以下命令来设置 kubectl 以与容器引擎一起使用

gcloud auth activate-service-account ***@***.iam.gserviceaccount.com --key-file /var/go/.gcloud/***.json
gcloud config set account ***@***.iam.gserviceaccount.com
gcloud config set project gcloud-projectx
gcloud container clusters get-credentials gke-cluster --zone europe-west1-c

由于最近在运行 kubectl 版本时进行了 gcloud 更新,因此失败并出现以下错误

Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.4", GitCommit:"dd6b458ef8dbf24aff55795baa68f83383c9b3a9", GitTreeState:"clean", BuildDate:"2016-08-01T16:45:16Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}
error: You must be logged in to the server (the server has asked for the client to provide credentials)

使用 Google Cloud SDK 122.0.0 和 kubectl-linux-x86_64 1.3.4,而 Google Cloud SDK 119.0.0 和 kubectl-linux-x86_64 1.2.5 输出

Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.5", GitCommit:"25eb53b54e08877d3789455964b3e97bdd3f3bce", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.5", GitCommit:"b0deb2eb8f4037421077f77cb163dbb4c0a2a9f5", GitTreeState:"clean", BuildDate:"2016-08-11T20:21:58Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}

gcloud 和 kubectl 工具最近已更改为使用 OAuth2 身份验证而不是客户端证书,这会导致问题。

2016 年 8 月 17 日

Kubernetes v1.3.5 是新集群的默认版本。云 将 container/use_client_certificate 属性默认值更改为 错误的。这使得 gcloud 容器集群创建和 gcloud 容器集群 get-credentials 命令配置 kubectl 使用 默认情况下 Google OAuth2 凭据而不是旧客户端 证书。

我可以通过使用这些命令恢复到客户端证书身份验证来修复较新版本的问题

gcloud config set container/use_client_certificate True
export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True

我的问题是如何让 OAuth2 身份验证正常工作,这样我就不必回退到客户端证书身份验证?我原以为这会透明且没有错误地发生。

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    截至 2016 年 10 月,您可以使用命令 gcloud container clusters get-credentials your-cluster-name 从 Google Cloud Platform 检索和设置令牌。

    要检查是否为kubectl 命令设置了令牌,请发出命令 kubectl config view | grep access-token

    【讨论】:

      【解决方案2】:

      Kubectl 配置为使用 Application Default Credentials 向 Kubernetes 主节点进行身份验证。要指定您希望它使用的服务帐户,请将GOOGLE_APPLICATION_CREDENTIALS 设置为您的密钥文件的位置。所以对你来说:

      export GOOGLE_APPLICATION_CREDENTIALS=/var/go/.gcloud/***.json
      

      很抱歉,它不像您(和我们)希望的那样透明和顺畅。

      【讨论】:

      • 这确实解决了这个问题。谢谢。
      • 我仍然无法让它工作。您能否发布您用于身份验证的完整命令序列?
      • 最终会解决这个问题吗?我认为kubectl 不应该依赖这个,那个或者gcloud 应该设置变量
      猜你喜欢
      • 2016-04-27
      • 1970-01-01
      • 2021-01-05
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      相关资源
      最近更新 更多