Как представить пользовательскую учетную запись службы GCP рабочим нагрузкам kubernetes? - PullRequest
0 голосов
/ 08 июня 2018

Я настраиваю высокодоступный кластер kubernetes, используя GKE и terraform.Несколько кластеров будут выполнять несколько развертываний в кластере, и я ожидаю, что большинство развертываний будет в настраиваемом пространстве имен, главным образом по причинам изоляции.

Один из наших открытых вопросов - как управлять учетными записями служб GCP в кластере..

Я могу создать кластер с настраиваемой учетной записью службы GCP и настроить разрешения, чтобы он мог извлекать изображения из GCR, вести журнал на стек-драйвер и т. Д. Я думаю, что эта учетная запись настраиваемой службы будет использоваться узлами GKE.вместо учетной записи службы вычислений по умолчанию.Пожалуйста, исправьте меня, если я ошибаюсь в этом вопросе!

Каждому развертыванию необходим доступ к разному набору ресурсов GCP (облачное хранилище, хранилище данных, облачное хранилище данных и т. Д.), И я бы хотел, чтобы каждое развертывание имелоэто собственная учетная запись службы GCP, поэтому мы можем контролировать разрешения.Я также хотел бы, чтобы запущенные модули не имели доступа к учетной записи службы GCP, доступной узлу, на котором запущены модули.

Возможно ли это?

Я рассмотрел некоторые варианты, но яЯ не уверен в целесообразности или желательности:

  1. Учетная запись службы GCP для развертывания может быть добавлена ​​в кластер в качестве секрета kubernetes, развертывания могут смонтировать ее в виде файла и установить GOOGLE_DEFAULT_CREDENTAILSчтобы указать на него
  2. Может быть, доступ к API метаданных для экземпляра может быть запрещен для модулей или может быть изменена учетная запись службы, возвращенная API метаданных?
  3. Может быть, есть GKE (илиkubernetes) родной способ управления учетной записью службы, представленной для pods?

1 Ответ

0 голосов
/ 08 июня 2018

Вы на правильном пути.Учетные записи службы GCP могут использоваться в GKE для POD для назначения разрешений ресурсам GCP.

Создание учетной записи:

cloud iam service-accounts create ${SERVICE_ACCOUNT_NAME} 

Добавление разрешений IAM для учетной записи службы:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role='roles/${ROLE_ID}'

Создание файла JSON для учетной записи службы:

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

Создание секрета с этим JSON:

kubectl create secret generic echo --from-file service-account.json

Создание развертывания для приложения с использованием этого секрета:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      name: echo
    spec:
      containers:
        - name: echo
          image: "gcr.io/hightowerlabs/echo"
          env:
            - name: "GOOGLE_APPLICATION_CREDENTIALS"
              value: "/var/run/secret/cloud.google.com/service-account.json"
            - name: "PROJECT_ID"
              valueFrom:
                configMapKeyRef:
                  name: echo
                  key: project-id
            - name: "TOPIC"
              value: "echo"
          volumeMounts:
            - name: "service-account"
              mountPath: "/var/run/secret/cloud.google.com"
      volumes:
        - name: "service-account"
          secret:
            secretName: "echo"

Если вы хотите использовать различные разрешения для отдельных развертываний, вам необходимо создать несколько учетных записей службы GCP с различными разрешениями, сгенерировать для них токены JSON и назначить их для развертываний в соответствии с вашими планами.POD будет иметь доступ в соответствии с подключенными учетными записями службы, а не для обслуживания учетной записи, назначенной узлу.

Для получения дополнительной информации вы можете просмотреть ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...