我正在尝试将CircleCi与gcloud Kubernetes引擎集成。
我的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天...
答案 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)
就我而言,这两个步骤解决了我的问题:
gcloud container clusters get-credentials my-cluster-1 --zone=asia-south1-a --
project=thelab-240901
--project
应具有 projectID 值,而不是项目名称
如果您加密了不同的服务帐户(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
您可以重新创建它并为其授予项目所有者权限。
答案 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已配置好并可以使用!