不断获取权限错误 gcloud.container.clusters.get-credentials
Keep getting permissions error gcloud.container.clusters.get-credentials
我正在尝试将 CircleCi 与 gcloud Kubernetes 引擎集成。
- 我创建了一个具有 Kubernetes Engine 开发人员和存储管理员角色的服务帐户。
- 创建了 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 天...
我相信这不是 CI 服务帐户,而是用于管理您的 GKE 集群的 k8s 服务帐户,它的电子邮件应该是这样的(肯定有人删除了它):
k8s-service-account@<project-id>.iam.gserviceaccount.com
您可以重新创建它并授予它项目所有者权限。
上述错误的详细信息在 this help center 文章中有解释。
要添加 Kubernetes Engine 服务帐户(如果您没有),请运行以下命令,以便正确地重新创建具有 "Kubernetes Engine Service Agent" 角色的 Kubernetes 服务帐户,
gcloud services enable container.googleapis.com
第 1 步:gcloud 初始化
第 2 步:Select [2] 创建新配置
第 3 步:输入配置名称。名称以小写字母开头,并且
仅包含小写字母 a-z、数字 0-9 和连字符“-”:kubernetes-service-account
第 4 步:选择您要用于执行操作的帐户
此配置:[2] 使用新帐户登录
第 5 步:是否要继续 (Y/n)? y
第 6 步:将 link 复制粘贴到 brwoser 并使用用于创建您的 google 云帐户
的 ID 登录
第7步:登录后复制google提供的验证码,粘贴到控制台。
第 8 步:选择要使用的云项目:
第 9 步:是否要配置默认计算区域和区域? (Y/n)? y
第 10 步:请输入数字选择或文本值(必须与列表项完全匹配):8
您的 Google Cloud SDK 已配置完毕,可以使用了!
这是一个旧线程,如果使用 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。
就我而言,这两个步骤解决了我的问题:
- 在命令中,
gcloud container clusters get-credentials my-cluster-1 --zone=asia-south1-a --
project=thelab-240901
--project
应该有 projectID 值,而不是项目名称
- 在您的 travis 帐户中,转到您的项目存储库 -> 更多选项 -> 设置 -> 环境变量。现在确保您只有一组 encrypted_iv 和 encrypted_key 环境变量,如下所示:
如果您加密了不同的服务帐户(json 密钥文件),这可能会添加一组以上的 encrypted_iv 和 encrypted_key 环境变量。因此,删除所有这些变量并重新创建加密密钥,可以使用 travis encrypt-file --pro yourServiceAccountJSONFile.json --add
我在不同的情况下遇到过这个问题,在下面列出它希望它能帮助别人。
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.
我在将 gcloud 与我的主要所有者帐户 (!) 结合使用时遇到了这个问题
修复的是在命令中包含 --zone
和 --project
参数以获取 kubectl 凭据。
我正在尝试将 CircleCi 与 gcloud Kubernetes 引擎集成。
- 我创建了一个具有 Kubernetes Engine 开发人员和存储管理员角色的服务帐户。
- 创建了 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 天...
我相信这不是 CI 服务帐户,而是用于管理您的 GKE 集群的 k8s 服务帐户,它的电子邮件应该是这样的(肯定有人删除了它):
k8s-service-account@<project-id>.iam.gserviceaccount.com
您可以重新创建它并授予它项目所有者权限。
上述错误的详细信息在 this help center 文章中有解释。
要添加 Kubernetes Engine 服务帐户(如果您没有),请运行以下命令,以便正确地重新创建具有 "Kubernetes Engine Service Agent" 角色的 Kubernetes 服务帐户,
gcloud services enable container.googleapis.com
第 1 步:gcloud 初始化
第 2 步:Select [2] 创建新配置
第 3 步:输入配置名称。名称以小写字母开头,并且 仅包含小写字母 a-z、数字 0-9 和连字符“-”:kubernetes-service-account
第 4 步:选择您要用于执行操作的帐户 此配置:[2] 使用新帐户登录
第 5 步:是否要继续 (Y/n)? y
第 6 步:将 link 复制粘贴到 brwoser 并使用用于创建您的 google 云帐户
的 ID 登录第7步:登录后复制google提供的验证码,粘贴到控制台。
第 8 步:选择要使用的云项目:
第 9 步:是否要配置默认计算区域和区域? (Y/n)? y
第 10 步:请输入数字选择或文本值(必须与列表项完全匹配):8
您的 Google Cloud SDK 已配置完毕,可以使用了!
这是一个旧线程,如果使用 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。
就我而言,这两个步骤解决了我的问题:
- 在命令中,
gcloud container clusters get-credentials my-cluster-1 --zone=asia-south1-a --
project=thelab-240901
--project
应该有 projectID 值,而不是项目名称
- 在您的 travis 帐户中,转到您的项目存储库 -> 更多选项 -> 设置 -> 环境变量。现在确保您只有一组 encrypted_iv 和 encrypted_key 环境变量,如下所示:
如果您加密了不同的服务帐户(json 密钥文件),这可能会添加一组以上的 encrypted_iv 和 encrypted_key 环境变量。因此,删除所有这些变量并重新创建加密密钥,可以使用 travis encrypt-file --pro yourServiceAccountJSONFile.json --add
我在不同的情况下遇到过这个问题,在下面列出它希望它能帮助别人。
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.
我在将 gcloud 与我的主要所有者帐户 (!) 结合使用时遇到了这个问题
修复的是在命令中包含 --zone
和 --project
参数以获取 kubectl 凭据。