kubernetes 继续获取权限错误gcloud.container.clusters.get-credentials

atmip9wb  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(9)|浏览(103)

我正在尝试将CircleCi与gcloud Kubernetes引擎集成。
1.我创建了一个具有Kubernetes Engine Developer和Storage Admin角色的服务帐户。
1.创建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天时间来解决这个问题...

vxqlmq5t

vxqlmq5t1#

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

授予GKE Cloud Build访问权限

要在Kubernetes集群中部署应用程序,Cloud Build需要Kubernetes Engine Developer Identity and Access Management Role。

获取项目编号:

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

更多信息可以在这里找到。

2exbekwf

2exbekwf2#

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

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

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

owfi6suc

owfi6suc3#

在我的情况下,这两个步骤解决了我的问题:
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

wyyhbhjk

wyyhbhjk4#

上述错误的详细信息在此帮助中心文章中进行了解释。
要添加Kubernetes Engine Service帐户(如果您没有),请运行以下命令,以正确地重新创建具有“Kubernetes Engine Service Agent”角色的Kubernetes Service帐户,

gcloud services enable container.googleapis.com
qnyhuwrf

qnyhuwrf5#

步骤1:gcloud init
步骤2:选择[2]创建新配置
步骤3:输入配置名称。名称以小写字母开头,仅包含小写字母a-z、数字0-9和连字符'-':kubernetes-service-account
第4步:选择您要用于执行此配置操作的帐户:[2]使用新帐户登录
第5步:是否继续(Y/N)?y
第6步:复制粘贴链接到brwoser,并使用用于创建Google Cloud帐户的ID登录
第7步:复制登录后google提供的验证码,并粘贴到控制台。
第8步:选择要使用的云项目:用途:
第9步:是否要配置默认计算区域和分区?(是/否)是
第10步:请输入数字选项或文本值(必须与列表项完全匹配):8
您的Google Cloud SDK已配置完毕,可以使用了!

jv4diomz

jv4diomz6#

我有这个问题使用gcloud与我的主要所有者帐户(!)
修复它的方法是在命令中包含--zone--project参数以获取kubectl凭据。

suzh9iv8

suzh9iv87#

我在不同的情况下面临这个问题,下面列出它,希望它能帮助到别人。

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.
ryevplcw

ryevplcw8#

当我尝试连接到我新创建的集群时,我得到了相同的错误:

gcloud container clusters get-credentials <foo-cluster> --zone europe-central2-a --project <foo-project>
Fetching cluster endpoint and auth data.
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Required "container.clusters.get" permission(s) for "projects/foo-project/zones/europe-central2-a/clusters/foo-cluster".

我尝试了几件事:
1.我启用了Kuberentes API -没有成功
1.我添加了一个密钥到服务帐户,并使用下载的密钥登录:

gcloud auth activate-service-account --key-file=<path-to-the-downloaded-json-file>/foo-project-xxxx.json
Activated service account credentials for: [[email protected]]

1.我跑:

gcloud components update

1.然而,我在检索数据时遇到了问题,所有kubectl命令都给出了TLS握手超时,例如:kubectl get namespace出现错误:

Unable to connect to the server: net/http: TLS handshake timeout

1.这是我再次尝试的时候:

gcloud container clusters get-credentials <foo-cluster> --zone europe-central2-a --project <foo-project>

和它的工作

Fetching cluster endpoint and auth data.
    kubeconfig entry generated for foo-project.
t8e9dugd

t8e9dugd9#

我犯了这个错误。问题是,我已经用一个谷歌帐户配置了gloud,我正试图连接到我在另一个谷歌帐户上创建的集群。

解决方案:只需重置gcloud配置并添加新的google帐户即可。

做:

gcloud init

并按照您在终端中看到的步骤重置和添加新帐户。

相关问题