Разрешения для модуля на GKE на создание диска на GCE

Я раскручиваю kubernetes работу как helm pre-install крючок для GKE. В задании используется google/cloud-sdk образ, и я хочу, чтобы он создавал постоянный диск вычислительного движка.

Вот его spec:

    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, верно?

изменить: я создал ComputeDiskCreate настраиваемую роль, которая включает два разрешения:

  • gcloud.compute.disks.create
  • gcloud.compute.disks.list

Я привязал его к сервисному аккаунту

service-2340842080428@container-engine-robot.uam.gserviceaccount.com что моя IAM облачная консоль Google дала имя

Сервисный агент Kubernetes Engine

но результат все тот же.


comment
Есть ли причина, по которой вы не создаете диск через систему постоянных томов Kubernetes?   -  person coderanger    schedule 22.11.2019
comment
Я хочу избежать PV / PVC (это будет одноразовый процесс), поэтому я выбрал чистые k8s тома - ›kubernetes.io/docs/concepts/storage/volumes/#gcepersistentdisk. Есть ли способ создать настоящий постоянный диск, кроме gcloud compute disk create?   -  person pkaramol    schedule 22.11.2019
comment
Нет, для этого и предназначена система ПВХ, чтобы автоматически создавать объем для вас.   -  person coderanger    schedule 22.11.2019


Ответы (1)


В GKE все узлы в кластере фактически являются экземплярами ВМ Compute Engine. Им назначается учетная запись службы во время создания, чтобы аутентифицировать их для других служб. Вы можете проверить учетную запись службы, назначенную узлам, проверив соответствующий пул узлов.

По умолчанию узлам GKE назначается учетная запись службы Compute Engine по умолчанию, которая выглядит как [email protected], если вы не установите другую учетную запись во время создания пула кластера / узла.

Вызовы к другим службам Google (например, к конечной точке compute.disks.create в данном случае) будут поступать с узла и аутентифицироваться с использованием соответствующих учетных данных учетной записи службы.

Поэтому вам следует добавить разрешение gcloud.compute.disks.create в учетную запись службы ваших узлов (вероятно, [email protected]) в консоли разработчика IAM-страница.

РЕДАКТИРОВАТЬ: до любой аутентификации простая возможность узла получить доступ к данной службе Google определяется его область доступа. Это определяется во время создания пула узлов и не может быть изменено. Вам нужно будет создать новый пул узлов и убедиться, что вы предоставили ему https://www.googleapis.com/auth/compute область доступа для методов Compute Engine. Затем вы можете указать своему конкретному модулю запускаться на этих конкретных узлах .

person LundinCast    schedule 22.11.2019
comment
Я попробовал ваше предложение, я даже назначил всю Compute Storage Admin роль роли Compute Engine по умолчанию. Теперь я получаю - Insufficient Permission: Request had insufficient authentication scopes. Любые идеи? - person pkaramol; 22.11.2019
comment
pkaramol @, я обновил свой ответ, чтобы решить проблему с областью аутентификации. - person LundinCast; 22.11.2019