不断获取权限错误gcloud.container.clusters.get-credentials

时间:2018-11-21 21:43:15

标签: kubernetes gcloud circleci google-kubernetes-engine

我正在尝试将CircleCi与gcloud Kubernetes引擎集成。

  1. 我用Kubernetes Engine开发人员和Storage Admin角色创建了一个服务帐户。
  2. 创建CircleCi yaml文件并配置CI。

我的yaml文件的一部分包括:

docker:
            - image: google/cloud-sdk
        environment:
            - PROJECT_NAME: 'my-project'
            - GOOGLE_PROJECT_ID: 'my-project-112233'
            - GOOGLE_COMPUTE_ZONE: 'us-central1-a'
            - GOOGLE_CLUSTER_NAME: 'my-project-bed'
        steps:
            - checkout
            - run:
                  name: Setup Google Cloud SDK
                  command: |
                      apt-get install -qq -y gettext
                      echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json
                      gcloud auth activate-service-account --key-file=${HOME}/gcloud-service-key.json
                      gcloud --quiet config set project ${GOOGLE_PROJECT_ID}
                      gcloud --quiet config set compute/zone ${GOOGLE_COMPUTE_ZONE}
                      gcloud --quiet container clusters get-credentials ${GOOGLE_CLUSTER_NAME}

除最后一个命令外,一切运行正常:

gcloud --quiet container clusters get-credentials ${GOOGLE_CLUSTER_NAME}

它不断失败并显示错误:

ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Required "container.clusters.get" permission(s) for "projects/my-project-112233/zones/us-central1-a/clusters/my-project-bed". See https://cloud.google.com/kubernetes-engine/docs/troubleshooting#gke_service_account_deleted for more info.

我试图让ci帐户担任项目所有者,但仍然出现该错误。

我尝试禁用并重新启用Kubernetes服务,但没有帮助。

任何想法如何解决这个问题?我想解决4天...

5 个答案:

答案 0 :(得分:1)

这是一个旧线程,这是今天在使用云构建的情况下处理此问题的方式:

授予 Cloud Build 对 GKE 的访问权限

要在 Kubernetes 集群中部署应用程序,Cloud Build 需要 Kubernetes Engine 开发者身份和访问管理角色。

获取项目编号:

PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')"

添加 IAM 政策绑定:

gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/container.developer

可以在here找到更多信息。

答案 1 :(得分:1)

就我而言,这两个步骤解决了我的问题:

  1. 在命令中,
gcloud container clusters get-credentials my-cluster-1 --zone=asia-south1-a -- 
project=thelab-240901

--project 应具有 projectID 值,而不是项目名称

  1. 在您的 travis 帐户中,转到您的项目存储库 -> 更多选项 -> 设置 -> 环境变量。现在确保您只有一组 encrypted_iv 和 encrypted_key 环境变量,如下所示:

enter image description here

如果您加密了不同的服务帐户(json 密钥文件),这可能会添加一组以上的 encrypted_iv 和 encrypted_key 环境变量。因此,删除所有这些变量并重新创建加密密钥,可能是使用 travis encrypt-file --pro yourServiceAccountJSONFile.json --add

答案 2 :(得分:0)

我相信这不是用来管理您的GKE集群的k8s服务帐户,而是CI服务帐户,该帐户的电子邮件应如下所示(有人必须将其删除):

k8s-service-account@<project-id>.iam.gserviceaccount.com

sa

您可以重新创建它并为其授予项目所有者权限。

recreate

答案 3 :(得分:0)

this help center文章中介绍了上述错误的详细信息。

要添加Kubernetes Engine服务帐户(如果您没有),请运行以下命令,以正确地重新创建具有“ Kubernetes Engine服务代理”角色的Kubernetes服务帐户,

gcloud services enable container.googleapis.com

答案 4 :(得分:0)

第1步:gcloud init

第2步:选择[2]创建新配置

第3步:输入配置名称。名称以小写字母开头, 仅包含小写字母a-z,数字0-9和连字符'-':kubernetes-service-account

第4步:选择您要用于执行操作的帐户 此配置:[2]使用新帐户登录

第5步:是否要继续(是/否)? y

第6步:将链接复制粘贴到brwoser并使用用于创建您的Google Cloud帐户的ID登录

第7步:登录后复制google提供的验证码,并将其粘贴到控制台中。

第8步:选择要使用的云项目:

第9步:您要配置默认的计算区域和区域吗? (是/否)? y

步骤10:请输入数字选择或文本值(必须与列表项完全匹配):8

您的Google Cloud SDK已配置好并可以使用!