Kubernetes GKE上的pod在GCE上创建磁盘的权限

Kubernetes GKE上的pod在GCE上创建磁盘的权限,kubernetes,google-cloud-platform,google-compute-engine,google-kubernetes-engine,google-iam,Kubernetes,Google Cloud Platform,Google Compute Engine,Google Kubernetes Engine,Google Iam,我正在做一份kubernetes的工作,作为一名舵手预安装挂机在GKE上。 该作业使用google/cloudsdkimage,我希望它创建一个计算引擎持久磁盘 这是它的规范: spec: restartPolicy: OnFailure containers: - name: create-db-hook-container image: google/cloud-sdk:latest command: ["gclou

我正在做一份
kubernetes
的工作,作为一名
舵手
预安装
挂机在GKE上。 该作业使用
google/cloudsdk
image,我希望它创建一个计算引擎持久磁盘

这是它的
规范

    spec:
      restartPolicy: OnFailure
      containers:
      - name: create-db-hook-container
        image: google/cloud-sdk:latest
        command: ["gcloud"]
        args: ["compute", "disks", "create", "--size={{ .Values.volumeMounts.gceDiskSize  }}", "--zone={{ .Values.volumeMounts.gceDiskZone }}", "{{ .Values.volumeMounts.gceDiskName }}"]
但是,此操作失败,出现以下错误:

brazen-lobster-create-pd-hook-nc2v9 create-db-hook-container ERROR: 
(gcloud.compute.disks.create) Could not fetch resource: brazen-lobster-create-pd-hook-nc2v9 
create-db-hook-container  
- Insufficient Permission: Request had insufficient authentication scopes. 
brazen-lobster-create-pd-hook-nc2v9 create-db-hook-container
显然,我必须授予
gcloud.compute.disks.create
权限

我的问题是,我必须向谁授予此许可

这是一个GCP IAM权限,因此我假设它不能专门授予
k8s
资源(?),因此不能在
k8s
RBAC的上下文中处理,对吗

edit:我创建了一个
ComputeDiskCreate
自定义角色,该角色包含两个权限:

  • gcloud.compute.disks.create
  • gcloud.compute.disks.list
我已将其附加到服务帐户

服务-2340842080428@container-engine robot.uam.gserviceaccount.com
我的
IAM
谷歌云控制台已命名

Kubernetes发动机服务代理


但是结果仍然是一样的。

在GKE中,集群中的所有节点实际上都是计算引擎VM实例。他们在创建时被分配了一个服务帐户,以向其他服务验证他们的身份。您可以通过检查相应的节点池来检查分配给节点的服务帐户

默认情况下,GKE节点被分配计算引擎默认服务帐户,看起来像
PROJECT\u编号-compute@developer.gserviceaccount.com
,除非您在创建群集/节点池时设置了另一个

对其他Google服务(如本例中的
compute.disks.create
端点)的调用将来自节点,并使用相应的服务帐户凭据进行身份验证

因此,您应该向节点的服务帐户添加
gcloud.compute.disks.create
权限(可能是
PROJECT\u编号-compute@developer.gserviceaccount.com
)在开发人员控制台中


编辑:在进行任何身份验证之前,节点访问给定Google服务的能力由其自身定义。这是在节点池创建时定义的,无法编辑。您需要创建一个新的节点池,并确保授予它
https://www.googleapis.com/auth/compute
访问计算引擎方法的范围。然后,您可以指示您的特定pod。

您不通过Kubernetes持久卷系统创建磁盘有什么原因吗?我想避免PVs/PVCs(这将是一个一次性过程),因此我选择了纯
k8s
卷-->。除了
gcloud compute disk create
,还有其他方法可以创建实际的持久磁盘吗?没有,pvc系统就是为了自动为您创建卷的。我尝试了您的建议,甚至将整个
compute Storage Admin
角色分配给了计算引擎默认角色。现在我获得了
-权限不足:请求的身份验证范围不足。
有什么想法吗?pkaramol@,我已更新了我的答案以解决身份验证范围问题。