【问题标题】:Keep getting permissions error gcloud.container.clusters.get-credentials不断获取权限错误 gcloud.container.clusters.get-credentials
【发布时间】:2023-04-07 16:13:01
【问题描述】:

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

  1. 我创建了一个具有 Kubernetes Engine 开发人员和存储管理员角色的服务帐号。
  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 天...

【问题讨论】:

    标签: kubernetes gcloud circleci google-kubernetes-engine


    【解决方案1】:

    我在使用 gcloud 和我的主要所有者帐户时遇到了这个问题 (!)

    解决的问题是在命令中包含 --zone--project 参数以获取 kubectl 凭据。

    【讨论】:

      【解决方案2】:

      我在不同的情况下遇到了这个问题,在下面列出它希望它对某人有所帮助。

      1. If you did a fresh installation of google-cloud-sdk then you must login 
      with gcloud using the below command.
      
      gcloud auth login
      
      The above command will open ur browser and ask for login with your GCP account.
      
      2. Sometimes provisioning is not reflected. Hence i revoke my provision and granted access (In this case my role is Owner) again. Then it worked. 
      

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        【讨论】:

          【解决方案4】:

          这是一个旧线程,如果使用 cloud build,这就是今天处理此问题的方式:

          授予 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找到。

          【讨论】:

          • 工作,非常感谢
          【解决方案5】:

          第 1 步:gcloud 初始化

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

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

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

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

          第 6 步:复制粘贴链接到浏览器并使用用于创建您的谷歌云帐户的 ID 登录

          第七步:登录后复制google提供的验证码粘贴到控制台。

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

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

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

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

          【讨论】:

            【解决方案6】:

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

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

            gcloud services enable container.googleapis.com
            

            【讨论】:

              【解决方案7】:

              我认为这不是 CI 服务帐户,而是用于管理 GKE 集群的 k8s 服务帐户,其电子邮件应如下所示(一定是有人删除了它):

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

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

              【讨论】:

              • 我没有这样的账户。也许你参考了这个账号:“service-448608612002@container-engine-robot.iam.gserviceaccount.com”?
              • 您需要创建它。不,不是那个。
              • 假设我创建了它,我该如何处理它?谁会使用它?
              • 这将使用它gcloud --quiet container clusters get-credentials ${GOOGLE_CLUSTER_NAME}
              • 我删除了该帐户并使用相同的名称和角色再次创建了它。突然它起作用了...... gcloud 错误。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-12-09
              • 1970-01-01
              • 2019-06-03
              • 1970-01-01
              • 1970-01-01
              • 2018-09-10
              相关资源
              最近更新 更多