我的GKE群集用于访问GCR的服务帐户是什么

时间:2019-02-20 08:20:28

标签: google-cloud-platform google-compute-engine google-kubernetes-engine google-container-registry google-iam

在一个GCP项目下,我有多个Google Kubernetes Engine集群。

我试图了解GKE正在使用哪个服务帐户来创建Pod,特别是,当我尝试从同一项目下的Google Container存储库中读取信息时,遇到了权限被拒绝的错误。

在“ GCP IAM和管理”页面中,我看到一些我不确定其用途的帐户:

XXX-compute@developer.gserviceaccount.com - Compute Engine default service account
XXX@cloudbuild.gserviceaccount.com  
XXX@cloudservices.gserviceaccount.com - Google APIs Service Agent   
service-XXX@compute-system.iam.gserviceaccount.com  Compute Engine Service Agent    
service-XXX@container-engine-robot.iam.gserviceaccount.com - Kubernetes Engine Service Agent    
service-XXX@containerregistry.iam.gserviceaccount.com - Google Container Registry Service Agent     
service-XXX@dlp-api.iam.gserviceaccount.com 
service-XXX@gcf-admin-robot.iam.gserviceaccount.com - Google Cloud Functions Service Agent  
PPP@appspot.gserviceaccount.com - App Engine default service account    

有些人有more info链接到它们,但是它们都没有任何有关GKE部署使用的实际提示。

3 个答案:

答案 0 :(得分:1)

对于GKE,如果您遇到任何问题(可能与API的某些更改有关),则您将拥有一个类似于“ container-engine-robot.iam.gserviceaccount.com”的帐户,可以删除以下帐户的默认帐户: GCE和GKE(在“名称”下,您将看到详细信息,并且属于每个资源),并使用gcloud command重新启用服务,以重新创建默认服务帐户(如果不只是分配“编辑”角色)然后再试一次。

答案 1 :(得分:1)

Google Kubernetes Engine (GKE) 不直接访问 Google Container Registry (GCR):一个或多个与 GKE 集群关联的节点池通过 Container Registry API 推送和拉取 Docker 映像,并通过服务帐户进行身份验证和授权。< /p>

如果您的 GKE 集群有一个节点池:

gcloud container clusters describe $GKE_CLUSTER_NAME \
--format='value(nodeConfig.serviceAccount)' \
--zone=$GKE_CLUSTER_ZONE

#=>

default

如果您的 GKE 集群有多个节点池:

gcloud container clusters describe $GKE_CLUSTER_NAME \
--zone=$GKE_CLUSTER_ZONE \
--format='value[delimiter="\n"](nodePools[].config.serviceAccount)'

#=>

default
not-default@$GCP_PROJECT_NAME.iam.gserviceaccount.com
. . .

此处默认为“Compute Engine 默认服务帐户”:$GCP_PROJECT_ID-compute@developer.gserviceaccount.com

注意:默认服务。帐户与服务不同。帐户您可以创建:以数字开头并以除 @$GCP_PROJECT_NAME.iam.gserviceaccount.com 以外的域结尾。

为了服务。帐户为了能够从 GCR pull Docker 映像,它需要至少有一个具有以下关联权限的关联角色:

  • storage.objects.get
  • storage.objects.list

您可能会遇到:

<块引用>

警告:您似乎无权访问项目 [$GCP_PROJECT_NAME] 或它不存在。

如果服务。帐户是否没有至少有一个具有以下关联权限的关联角色:

  • resourcemanager.projects.get
  • resourcemanager.projects.list

包含上述所有四种权限的策划角色是 roles/storage.objectViewer 角色。

如果您想将 Docker 镜像存储在另一个 GCP 项目中,您只需要授予 serv。帐户由 GKE 集群中的节点池使用的 roles/storage.objectViewer 角色在您想要存储 Docker 映像的项目中(更多关于 here)。

注意:您可能希望继续使用 GCP Artifact Registry (AR)。详细了解从 GCR 过渡到 AR here

答案 2 :(得分:0)

每个GKE节点都有一个与之关联的IAM服务帐户。默认情况下,将为节点提供Compute Engine默认服务帐户,您可以通过导航到Cloud Console的IAM部分找到该帐户。

如果您使用非默认的Compute Engine服务帐户,则可能需要在项目中授予服务帐户角色/storage.objectViewer角色。检查this link了解更多信息。

相关问题