Kubernetes 为什么从我的主机使用gcloud命令而不是gcloud交互式shell如此困难?

Kubernetes 为什么从我的主机使用gcloud命令而不是gcloud交互式shell如此困难?,kubernetes,google-cloud-platform,gcloud,Kubernetes,Google Cloud Platform,Gcloud,也许我只是有点困惑,但基本上我正试图通过我自己的主机(Mac)终端而不是提供的gcloud交互shell使用gcloudcli来建立我的工作流程 我正在通过运行以下命令与IAM成员进行身份验证: gcloud身份验证登录 它会将我带到Google Cloud登录页面,我成功地通过了该页面的身份验证,然后在我的shell中获得以下内容: You are now logged in as [MY_EMAIL@gmail.com]. Your current project is [mypropert

也许我只是有点困惑,但基本上我正试图通过我自己的主机(Mac)终端而不是提供的gcloud交互shell使用
gcloud
cli来建立我的工作流程

我正在通过运行以下命令与IAM成员进行身份验证:

gcloud身份验证登录

它会将我带到Google Cloud登录页面,我成功地通过了该页面的身份验证,然后在我的shell中获得以下内容:

You are now logged in as [MY_EMAIL@gmail.com].
Your current project is [myproperty-1537056464248].  You can change this setting by running:

  $ gcloud config set project PROJECT_ID
在此之后,我尝试发出以下命令:

gcloud container clusters create somename
我得到以下错误消息:

ERROR: (gcloud.container.clusters.create) ResponseError: code=400, message=Project "myproperty-1537056464248" has no network named "default".
我的IAM用户具有以下角色:

  • Kubernetes引擎群集管理
  • 所有者
我只想避免使用gcloud交互式shell,这样我就可以:

  • 通过命令行创建集群
  • 将docker构建推送到Google容器注册表
  • 列表群集
  • 创建豆荚
  • 等等
  • 但这些IAM政策并没有像我预期的那样真正起作用


    我应该改用服务帐户吗?

    您遇到了两个明显的错误:

  • 第一条错误消息表示您的项目缺少“默认”网络
  • 您可以通过以下方式检查项目的网络:

    $ gcloud compute networks list
    NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
    default  AUTO         REGIONAL
    
    如果您创建一个全新的项目,它应该有一个“默认”网络

    或者,您可以使用以下选项指定现有网络:

    gcloud container clusters create somename --network=put-existing-network-here
    
  • 第二个错误是项目中缺少“compute.networks.get”权限 您可以使用“gcloud projects get iam policy project\u ID”验证项目中的实际角色。查找IAM用户的角色“所有者”,如下所示:

    $ gcloud projects get-iam-policy PROJECT_ID
    - members:
      - user:username@somedomain.com
      role: roles/owner
    

    新项目应该有一个名为
    default
    的网络,但我不知何故最终得到了一个根本没有任何网络的网络(这使我看到了同样的错误)

    创建一个后

    gcloud compute networks create default
    
    我能够创建一个GKE集群,如下所示:

    gcloud container clusters create mattscluster --zone us-west2 --machine-type e2-standard-2
    

    在SDK中,重新检查您使用的是最新版本“$gcloud components update”;错误消息提示可能在当前项目中找不到“默认”网络,因此您可以尝试以下操作:“$gcloud container clusters create test cluster--num nodes=3--subnetwork=default”…确保指出创建的网络名称。关于在项目上使用IAM的权限,您可以按角色限制/允许操作。。在您的情况下,我认为所有者rol可以发布项目中的所有命令。更多信息:@J.Rojas谢谢,这让我意识到谷歌已经把我的旧(删除的)项目设置好了(这就是问题所在)。所以我更新了它,但是现在我在创建集群时遇到了一个新问题:
    ERROR:
    即使我分配了以下角色:
    Compute Admin,Compute Instance Admin(v1)、Compute Network Admin、Kubernetes Engine Cluster Admin、Editor、Owner
    给IAM用户。事实证明,gcloud已将我的默认项目设置为我的旧项目(我几天前删除的项目),我刚刚更新了它,使其使用新项目进行设置。不幸的是,现在当我使用以下命令创建集群时:
    gcloud容器集群创建somename--network=default
    我得到了一个可怕的错误:
    错误:(gcloud.container.clusters.create)ResponseError:code=403,message=Google Compute Engine:Required'Compute.networks.get'permission for'projects/myproperty-237306/global/networks/default'。
    ju,项目中有权限角色;因此,您的用户具有所有者角色,这是出乎意料的(我认为),但是如果我是您,我应该使用google doc()描述的角色之一进行设置,其中包含您的案例所需的“compute.networks.get”权限。例如:roles/compute.instanceAdmin。如果不起作用,你可以和他们一起打开一个内部案例。IAM角色一开始有点棘手。@bob_cobb的答案更新了,包括如何检查项目的IAM角色。@Everton这实际上帮助我进一步调试我的问题。最终,我不得不重新启用服务帐户,因为在某个时候它被删除了。非常感谢。