Для управления ресурсами в Google Cloud с помощью Deckhouse Kubernetes Platform необходимо создать Service Account.

Провайдер поддерживает работу только с одним диском в шаблоне виртуальной машины. Убедитесь, что шаблон содержит только один диск.

Создание Service Account

Подробную инструкцию по созданию Service Account можно найти в документации провайдера.

Созданный service account key невозможно восстановить, только удалить и создать новый.

Настройка через Google Cloud Console

Перейдите в Google Cloud Console, выберите проект и создайте новый Service Account (также можно выбрать уже существующий).

Созданному Service Account должны быть присвоены несколько обязательных ролей:

Compute Admin
Service Account User
Network Management Admin

Роли можно присвоить на этапе создания Service Account либо изменить.

Чтобы получить service account key в JSON-формате, на странице в колонке «Actions» нажмите на три вертикальные точки и выберите «Manage keys». Затем нажмите «Add key» → «Create new key» → «Key type» → «JSON».

Настройка через Google Cloud CLI

Установите и инициализируйте Google Cloud CLI, следуя официальной инструкции.

Для создания Service Account через интерфейс командной строки выполните следующие шаги:

  1. Экспортируйте переменные окружения:

    export PROJECT_ID=sandbox
    export SERVICE_ACCOUNT_NAME=deckhouse
    
  2. Выберите project:

    gcloud config set project $PROJECT_ID
    
  3. Создайте Service Account:

    gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME
    
  4. Присвойте роли созданному Service Account:

    for role in roles/compute.admin roles/iam.serviceAccountUser roles/networkmanagement.admin;
    do gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
       --role=${role}; done
    

    Список необходимых ролей:

    roles/compute.admin
    roles/iam.serviceAccountUser
    roles/networkmanagement.admin
    
  5. Выполните проверку ролей Service Account:

    gcloud projects get-iam-policy ${PROJECT_ID} --flatten="bindings[].members" --format='table(bindings.role)' \
          --filter="bindings.members:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
    
  6. Создайте service account key:

    gcloud iam service-accounts keys create --iam-account ${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
          ~/service-account-key-${PROJECT_ID}-${SERVICE_ACCOUNT_NAME}.json
    

Использование созданного Service Account

Полученный service account key указывается в секции provider.serviceAccountJSON: "<SERVICE_ACCOUNT_JSON>" ресурса GCPClusterConfiguration.

Пример:

apiVersion: deckhouse.io/v1
kind: GCPClusterConfiguration
layout: WithoutNAT
sshKey: "<SSH_PUBLIC_KEY>"
subnetworkCIDR: 10.36.0.0/24
masterNodeGroup:
  replicas: 1
  zones:
  - europe-west3-b
  instanceClass:
    machineType: n1-standard-4
    image: projects/ubuntu-os-cloud/global/images/ubuntu-2404-noble-amd64-v20240523a
    diskSizeGb: 50
nodeGroups:
- name: static
  replicas: 1
  zones:
  - europe-west3-b
  instanceClass:
    machineType: n1-standard-4
    image: projects/ubuntu-os-cloud/global/images/ubuntu-2404-noble-amd64-v20240523a
    diskSizeGb: 50
    additionalNetworkTags:
    - tag1
    additionalLabels:
      kube-node: static
provider:
  region: europe-west3
  serviceAccountJSON: "<SERVICE_ACCOUNT_JSON>"