簡體   English   中英

GCP Kube.netes 不使用服務帳戶來拉取 docker 個圖像

[英]GCP Kubernetes not using service account for pulling docker images

我在 Kube.netes 托管集群中使用最新版本的 google-kube.netes (1.22.8-gke.202)。 我還有一個自定義服務帳戶,可以訪問“Artifact Registry Reader”scope,應該授予它從存儲庫中提取私有圖像的權限 - 調用此custom-service-account

我已驗證節點本身在 Compute Engine 中具有鏈接到它們的custom-service-account服務帳戶。 Kube.netes 設置了一個服務帳戶,該帳戶通過工作負載身份鏈接到具有相同名稱的 IAM 服務帳戶。 但是,當我嘗試生成一個從我的私人存儲庫中提取的 pod 時,它會無限期地失敗。

Events:
  Type     Reason             Age                   From                Message
  ----     ------             ----                  ----                -------
  Warning  FailedScheduling   21m (x3 over 24m)     default-scheduler   0/2 nodes are available: 2 node(s) were unschedulable.
  Warning  FailedScheduling   19m                   default-scheduler   no nodes available to schedule pods
  Normal   NotTriggerScaleUp  18m (x25 over 24m)    cluster-autoscaler  pod didn't trigger scale-up: 1 node(s) had taint {reserved-pool: true}, that the pod didn't tolerate
  Normal   Scheduled          18m                   default-scheduler   Successfully assigned default/test-service-a-deployment-5757fc5797-b54gx to gke-personal-XXXX--personal-XXXX--ac9a05b6-16sb
  Normal   Pulling            17m (x4 over 18m)     kubelet             Pulling image "us-central1-docker.pkg.dev/personal-XXXX/my-test-repo/my-test-repo-business-logic:latest"
  Warning  Failed             17m (x4 over 18m)     kubelet             Failed to pull image "us-central1-docker.pkg.dev/personal-XXXX/my-test-repo/my-test-repo-business-logic:latest": rpc error: code = Unknown desc = failed to pull and unpack image "us-central1-docker.pkg.dev/personal-XXXX/my-test-repo/my-test-repo-business-logic:latest": failed to resolve reference "us-central1-docker.pkg.dev/personal-XXXX/my-test-repo/my-test-repo-business-logic:latest": failed to authorize: failed to fetch anonymous token: unexpected status: 403 Forbidden
  Warning  Failed             17m (x4 over 18m)     kubelet             Error: ErrImagePull
  Warning  Failed             16m (x6 over 18m)     kubelet             Error: ImagePullBackOff
  Normal   BackOff            3m27s (x65 over 18m)  kubelet             Back-off pulling image "us-central1-docker.pkg.dev/personal-XXXX/my-test-repo/my-test-repo-business-logic:latest"

我還通過 ssh 進入了節點本身,至少在默認情況下使用常規docker pullcrictl pull看到了同樣的錯誤。

所以,我的具體問題是:

  • GCP 如何將服務帳戶憑據注入嘗試啟動圖像的 Kube.netes/Docker worker? 是否預計常規 docker 命令似乎沒有這些憑據?
  • 除了繼承 pod 上的服務帳戶之外,我是否需要手動為 Kube.netes 引導一些額外的身份驗證?

編輯: 這里的結果

> gcloud container clusters describe personal-XXXX-gke --zone us-central1-a --format="value(workloadIdentityConfig.workloadPool)"
personal-XXXX.svc.id.goog

> gcloud container node-pools describe personal-XXXX-gke-node-pool --cluster personal-XXXX-gke --format="value(config.workloadMetadataConfig.mode)" --zone us-central1-a
GKE_METADATA

> kubectl describe serviceaccount --namespace default be-service-account
Name:                be-service-account
Namespace:           default
Labels:              <none>
Annotations:         iam.gke.io/gcp-service-account: custom-service-account@personal-XXXX.iam.gserviceaccount.com
Image pull secrets:  <none>
Mountable secrets:   be-service-account-token-jmss9
Tokens:              be-service-account-token-jmss9
Events:              <none>

> gcloud iam service-accounts get-iam-policy custom-service-account@personal-XXXX.iam.gserviceaccount.com
bindings:
- members:
  - serviceAccount:personal-XXXX.svc.id.goog[default/be-service-account]
  role: roles/iam.workloadIdentityUser
etag: BwXjqJ9DC6A=
version: 1

在檢查對工件注冊表的訪問時,請按照本文檔檢查權限和范圍。

根據集群的創建方式,添加了各種范圍。 https://cloud.google.com/kube.netes-engine/docs/how-to/access-scopes#create_with_sa

在我的例子中,我從控制台 (UI) 創建了 Autopilot 集群,並做了你所做的一切 w.r.t 鏈接服務帳戶 - 結果應用的默認服務帳戶沒有獲得 scope 雲平台。

我最終使用正確的服務帳戶(非默認)為我的自動駕駛節點重新創建了集群。 https://cloud.google.com/sdk/gcloud/reference/container/clusters/create#--scopes 最有可能將 CLI 用於未來的創作。

暫無
暫無

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

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