tocdepth

2

Настройка интеграции с секретами из Secret Manager

С помощью инструкции вы настроите в кластере Managed Kubernetes интеграцию с секретами, которые хранятся в сервисе Secret Manager.

Перед началом работы

  1. Создайте секрет в Secret Manager в формате JSON.

    Пример секрета в JSON-формате

    {
      "key1":"value1",
      "key2":"value2"
    }
    
  2. Создайте кластер с публичным IP и группу узлов.

  3. Назначьте на сервисный аккаунт, выбранный при создании кластера, роль scsm.user.

  4. Установите плагин External Secrets Operator.

  5. Подключитесь к кластеру.

Шаг 1. Создайте ресурс для связи с Secret Manager

Вы можете создать ресурс с типом ClusterSecretStore или SecretStore:

  • ClusterSecretStore позволяет оперировать секретами в любом пространстве имен кластера.

  • SecretStore — только в пространстве имен, в котором SecretStore создан. В этом случае для каждого пространства имен можно создать отдельный SecretStore.

  1. Создайте файл cloudrusm-store.yaml и сохраните следующую спецификацию:

    apiVersion: external-secrets.io/v1beta1
    kind: ClusterSecretStore
    metadata:
      name: cloudrusm-store
    spec:
      provider:
        cloudrusm:
          auth:
            secretRef:
              accessKeyIDSecretRef:
                name: cloud-auth-secret
                namespace: kube-system
                key: CLIENT_ID
              accessKeySecretSecretRef:
                name: cloud-auth-secret
                namespace: kube-system
                key: SECRET_ID
            productInstanceID: <идентификатор_продукта>
    

    Где productInstanceIDидентификатор продукта из Secret Manager.

    В примере выше используется спецификация для создания ClusterSecretStore. Если вы хотите использовать SecretStore, предварительно создайте Secret для сервисного аккаунта, который выбрали при создании кластера. Укажите в Secret и SecretStore одинаковое пространство имен.

    Примеры спецификаций:

    Secret

    apiVersion: v1
    kind: Secret
    metadata:
      name: <название_секрета>
      namespace: <пространство_имен>
      labels:
        type: cloudrusm
    type: Opaque
    stringData:
      key: '<Key_ID_сервисного_аккаунта>'
      secret: '<Key_Secret_сервисного_аккаунта>'
    

    SecretStore

    apiVersion: external-secrets.io/v1beta1
    kind: SecretStore
    metadata:
      name: cloudrusm-store
      namespace: <пространство_имен>
    spec:
      provider:
        cloudrusm:
          auth:
            secretRef:
              accessKeyIDSecretRef:
                name: <название_секрета>
                key: client_id
              accessKeySecretSecretRef:
                name: <название_секрета>
                key: client_secret
            productInstanceID: <идентификатор_продукта>
    
  2. В терминале или PowerShell выполните команду:

    kubectl create -f cloudrusm-store.yaml
    

    Результат:

    clustersecretstore/cloudrusm-store created
    
  3. Проверьте статус:

    kubectl -n kube-system get clustersecretstore
    

    Результат:

    NAME              AGE   STATUS   CAPABILITIES   READY
    cloudrusm-store   7s    Valid    ReadOnly       True
    

Шаг 2. Создайте ExternalSecret для извлечения секрета из Secret Manager

  1. Создайте файл cloudrusm-external-secret.yaml и сохраните следующую спецификацию:

    apiVersion: external-secrets.io/v1beta1
    kind: ExternalSecret
    metadata:
      name: cloudrusm-external-secret
      namespace: <пространство_имен>
    spec:
      refreshInterval: 10s
      secretStoreRef:
        name: cloudrusm-store
        kind: <тип_ресурса>
      target:
        name: my-secret
        creationPolicy: Owner
      dataFrom:
        - extract:
            key: <key-UUID>
    

    Где:

    • metadata.namespace — пространство имен, в которое необходимо разместить секрет из Secret Manager.

    • spec.target.name — произвольное название нового секрета. External Secret Operator создаст ExternalSecret и поместит в него параметры секрета из Secret Manager.

    • spec.secretStoreRef.kind — ClusterSecretStore или SecretStore в зависимости от созданного на первом шаге ресурса.

    • spec.dataFrom.extract.keyUUID секрета из Secret Manager.

  2. В терминале или PowerShell выполните команду:

    kubectl create -f cloudrusm-external-secret.yaml
    

    Результат:

    externalsecret/cloudrusm-external-secret created
    
  3. Проверьте статус:

    kubectl get externalsecrets.external-secrets.io
    

    Результат:

    NAME                        STORE             REFRESH INTERVAL   STATUS         READY
    cloudrusm-external-secret   cloudrusm-store   10s                SecretSynced   True
    
  4. Проверьте, что секрет присутствует в кластере:

    kubectl get secrets my-secrets
    

    Результат:

    NAME         TYPE     DATA   AGE
    my-secrets   Opaque   2      3m9s
    

Шаг 3. Удалите ресурсы

Если вы закончили работать с примером:

  1. Удалите кластер.

  2. Удалите секрет.

Запустили Evolution free tier
для Dev & Test
Получить