首页 文章

与容器引擎的kubectl oauth2身份验证失败

提问于
浏览
0

我在部署管道中使用以下命令来设置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是新集群的默认版本 . gcloud将container / use_client_certificate属性的默认值更改为false . 这使得gcloud容器集群创建和gcloud容器集群get-credentials命令配置kubectl默认使用Google OAuth2凭据而不是旧客户端证书 .

我可以通过使用这些命令恢复到客户端证书身份验证来修复它

gcloud config set container/use_client_certificate True
export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True

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

2 回答

  • 1

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

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

    对不起它不像你(和我们)希望的那样透明和无摩擦 .

  • 1

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

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

相关问题