我在部署管道中使用以下命令来设置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属性的默认值更改为 假。这使得gcloud容器集群创建和gcloud 容器集群get-credentials命令配置要使用的kubectl 默认情况下,Google OAuth2凭据代替旧版客户端 证书。
我可以通过使用这些命令恢复到客户端证书身份验证来修复新版本
gcloud config set container/use_client_certificate True
export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True
我的问题是如何让OAuth2身份验证工作,所以我不必回退到客户端证书身份验证?我原本以为这会透明地发生而且没有错误。
答案 0 :(得分:1)
Kubectl配置为使用Application Default Credentials向Kubernetes主机进行身份验证。要指定要使用的服务帐户,请将GOOGLE_APPLICATION_CREDENTIALS
设置为密钥文件的位置。所以对你:
export GOOGLE_APPLICATION_CREDENTIALS=/var/go/.gcloud/***.json
对不起它不像你(和我们)希望的那样透明和无摩擦。
答案 1 :(得分:1)
截至2016年10月,您可以使用命令
gcloud container clusters get-credentials your-cluster-name
从Google Cloud Platform检索和设置令牌。
要检查是否为kubectl
命令设置了令牌,请发出命令
kubectl config view | grep access-token