簡體   English   中英

不斷獲取權限錯誤 gcloud.container.clusters.get-credentials

[英]Keep getting permissions error gcloud.container.clusters.get-credentials

我正在嘗試將 CircleCi 與 gcloud Kubernetes 引擎集成。

  1. 我創建了一個具有 Kubernetes 引擎開發人員和存儲管理員角色的服務帳戶。
  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天...

我相信這不是 CI 服務帳戶,而是用於管理您的 GKE 集群的 k8s 服務帳戶,它的電子郵件應該是這樣的(肯定是有人刪除了它):

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

薩

您可以重新創建它並授予它項目所有者權限。

重新創造

第 1 步:gcloud 初始化

第 2 步:選擇 [2] 創建新配置

第 3 步:輸入配置名稱。 名稱以小寫字母開頭,僅包含小寫字母 az、數字 0-9 和連字符“-”:kubernetes-service-account

第 4 步:選擇您要用於執行此配置操作的帳戶:[2] 使用新帳戶登錄

第 5 步:您想繼續嗎(是/否)?

第 6 步:將鏈接復制粘貼到 brwoser 並使用用於創建您的谷歌雲帳戶的 ID 登錄

第七步:登錄后復制google提供的驗證碼粘貼到控制台。

第 8 步:選擇要使用的雲項目:

步驟 9:您要配置默認的計算區域和區域嗎? (是/否)?

第 10 步:請輸入數字選項或文本值(必須完全匹配列表項):8

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

這是一個舊線程,這是今天在使用雲構建的情況下處理此問題的方式:

授予 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

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

就我而言,這兩個步驟解決了我的問題:

  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

本幫助中心文章中解釋了上述錯誤的詳細信息。

要添加 Kubernetes Engine 服務帳戶(如果您沒有),請運行以下命令,以便正確重新創建具有“Kubernetes Engine 服務代理”角色的 Kubernetes 服務帳戶,

gcloud services enable container.googleapis.com

我在不同的場景中遇到了這個問題,在下面列出它希望對某人有所幫助。

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 憑據。

嘗試連接到我新創建的集群時,我遇到了同樣的錯誤:

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 - 沒有成功

  2. 我向服務帳戶添加了一個密鑰並使用下載的密鑰登錄:

     gcloud auth activate-service-account --key-file=<path-to-the-downloaded-json-file>/foo-project-xxxx.json Activated service account credentials for: [xxxx-compute@developer.gserviceaccount.com]
  3. 我跑:

     gcloud components update
  4. 但是,我在檢索數據時遇到了問題,所有 kubectl 命令都給出了 TLS 握手超時,例如: kubectl get namespace was given an error:

     Unable to connect to the server: net/http: TLS handshake timeout
  5. 這是我再次嘗試的時候:

     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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM