云容器集群创建“compute.networks.get”权限错误

Cloud container clusters create `compute.networks.get` permission error

我正在尝试使用 GKE 创建集群。我有一个我已经在使用的项目。

当我运行

gcloud container clusters create cluster1

我得到以下信息:

错误:(gcloud.container.clusters.create)ResponseError:代码=403,消息=Google计算引擎:'projects//global/networks/default'.

需要'compute.networks.get'权限

当我使用网络时也会发生同样的事情 UI。我的服务帐户和我的用户都有所有者角色。

我尝试了以下方法来使集群创建命令起作用:

  1. 我尝试为现有服务帐户的项目添加策略绑定:
gcloud projects add-iam-policy-binding <my-project> \
    --member serviceAccount:<my-user>@<my-project>.iam.gserviceaccount.com \
    --role  roles/compute.admin
  1. 我读到启用容器 api 需要服务

gcloud services enable container.googleapis.com

  1. 重新开始。我删除了服务帐户,创建了一个新帐户并使用以下命令激活了信用:
gcloud auth activate-service-account <my-user>@<my-project>.iam.gserviceaccount.com --key-file ${GOOGLE_APPLICATION_CREDENTIALS}
  1. 我还尝试使用我的帐户用户进行身份验证:
gcloud auth login

None 这些工作,我无法创建集群

我认为您应该设置计算引擎服务帐户权限:

 gcloud projects add-iam-policy-binding <my-project> \
--member [PROJECT_NUMBER]-compute@developer.gserviceaccount.com \
--role  roles/compute.admin

我想我会在这里回答我自己的问题。来自 service account docs

When you create a new Cloud project using GCP Console and if Compute Engine API is enabled for your project, a Compute Engine Service account is created for you by default. It is identifiable using the email:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

我以某种方式删除了默认创建的服务帐户和可能的关联角色。我想这就是为什么我不能再在我的项目下创建集群的原因了。我决定最好开始一个新项目,而不是试图弄清楚如何重新创建。之后,集群创建 API 并且控制台工作正常。

调试:

gcloud container subnets list-usable --project service-project --network-project shared-vpc-project

如果您在输出中收到警告:

WARNING: Failed to get metadata from network project. GCE_PERMISSION_DENIED: 
Google Compute Engine: Required 'compute.projects.get' permission for 
'projects/shared-vpc-project'

这意味着您的 google 宿主项目中的托管 gke 服务帐户不存在。

要解决转至托管项目 api 并启用 Kubernetes Engine API。如果已启用,请将其禁用并重新启用。