VK Cloud logo

Использование External Secrets Operator

Используйте аддон External Secrets Operator, чтобы настроить синхронизацию с секретами Kubernetes, которые хранятся в менеджере секретов VK Cloud.

Подготовительные шаги

  1. Создайте кластер актуальной версии, если это еще не сделано.
  2. Установите и настройте kubectl, если это еще не сделано.
  3. Подключитесь к кластеру при помощи kubectl.
  4. Установите аддон External Secrets Operator, если это еще не сделано.
  5. Включите доступ по API, если это еще не сделано.

1. Создайте секрет в менеджере секретов

Создайте секрет с идентификатором external-secret в менеджере секретов VK Cloud и добавьте в него произвольные ключи.

2. Создайте секрет Kubernetes

  1. Создайте пространство имен external-secrets-operator, если это еще не сделано:

    kubectl create namespace external-secrets-operator
  2. Создайте манифест password.yaml, который будет хранить пароль для доступа к менеджеру секретов VK Cloud:

    apiVersion: v1kind: Secretmetadata:  name: password  namespace: external-secrets-operatortype: Opaquedata:  password: <ПАРОЛЬ_ОТ_ЛК>

    Здесь <ПАРОЛЬ_ОТ_ЛК> — пароль от вашего личного кабинета VK Cloud в кодировке base64.

  3. Примените созданный манифест в кластере:

    kubectl apply -f password.yaml

3. Создайте SecretStore

  1. Перейдите в личный кабинет VK Cloud.

  2. Нажмите на имя пользователя в шапке страницы и выберите Настройки проекта.

  3. Перейдите на вкладку Доступ по API и скопируйте следующие значения:

    • Project ID;
    • User Domain Name;
    • Username.
  4. Создайте манифест secretstore.yaml — объект типа SecretStore, который описывает, как подключиться к менеджеру секретов VK Cloud:

    apiVersion: external-secrets.io/v1kind: SecretStoremetadata:  name: secret-store  namespace: external-secrets-operatorspec:  provider:    vk:      projectID: <PROJECT_ID>      url: <AUTH_URL>      auth:        domain: <USER_DOMAIN_NAME>        username: <USERNAME>        password:          key: password          name: password

    Здесь:

    • <PROJECT_ID>, <USER_DOMAIN_NAME> и <USERNAME> — значения, которые вы скопировали из настроек проекта.
    • <AUTH_URL> — адрес в зависимости от региона:
      • https://msk.cloud.vk.com для региона Москва;
      • https://kz.cloud.vk.com для региона Казахстан.
  5. Примените созданный манифест в кластере:

    kubectl apply -f secretstore.yaml

4. Создайте ExternalSecret

  1. Создайте манифест externalsecret.yaml — объект типа ExternalSecret, который описывает, из какого SecretStore загружать секрет и как его обновлять:

    apiVersion: external-secrets.io/v1kind: ExternalSecretmetadata:  name: external-secret  namespace: external-secrets-operatorspec:  refreshInterval: 5m  secretStoreRef:    name: secret-store    kind: SecretStore  target:    name: external-secret    creationPolicy: Owner  data:    - secretKey: <ИМЯ_КЛЮЧА_В_СЕКРЕТЕ>      remoteRef:        key: <ID_СЕКРЕТА>        property: <КЛЮЧ_СЕКРЕТА>

    Здесь:

    • <ИМЯ_КЛЮЧА_В_СЕКРЕТЕ> — имя ключа в создаваемом секрете Kubernetes. Пример: password.
    • <ID_СЕКРЕТА> — идентификатор секрета, который вы создали ранее в менеджере секретов VK Cloud.
    • <КЛЮЧ_СЕКРЕТА> — ключ в секрете в менеджере секретов VK Cloud, значение которого необходимо синхронизировать с секретом Kubernetes.

    Например, в менеджере секретов VK Cloud с идентификатором external-secret хранятся такие пары значений: key1: value1, key2: value2, key3: value3. Если вы хотите, чтобы в секрете Kubernetes обновлялось значение value2, в поле property укажите key2:

    key: external-secretproperty: key2
  2. Примените созданный манифест в кластере:

    kubectl apply -f externalsecret.yaml

В Kubernetes будет создан новый объект типа Secret с именем external-secret. Аддон будет каждые пять минут проверять значение указанного поля в секрете в менеджере секретов VK Cloud. Если значение изменится, аддон автоматически обновит его в секрете Kubernetes.

5. Создайте ExternalSecret для синхронизации всех ключей секрета

  1. Создайте манифест externalsecretall.yaml. С его помощью вы сможете синхронизовать все пары значений из секрета, который вы создали в менеджере секретов VK Cloud.

    apiVersion: external-secrets.io/v1kind: ExternalSecretmetadata:  name: external-secret-all  namespace: external-secrets-operatorspec:  refreshInterval: 5m  secretStoreRef:    name: secret-store    kind: SecretStore  target:    name: external-secret-all    creationPolicy: Owner  dataFrom:    - extract:        key: <ID_СЕКРЕТА>
  2. Примените созданный манифест в кластере:

    kubectl apply -f externalsecretall.yaml

В Kubernetes будет создан новый объект типа Secret с именем external-secret-all. Аддон будет каждые пять минут проверять значение всех ключей секрета в менеджере секретов VK Cloud. Если их значения изменятся, аддон автоматически обновит их в секрете Kubernetes.

6. Проверьте работу аддона

  1. Убедитесь, что External Secrets Operator синхронизировал секреты, выполнив команду:

    kubectl -n external-secrets-operator get secret

    В выводе команды должны быть ранее созданные секреты с именами external-secret и external-secret-all:

    NAME                       TYPE     DATA    AGEexternal-secret            Opaque   1       ...external-secret-all        Opaque   2       ...external-secrets-webhook   Opaque   4       ...password                   Opaque   1       ...
  2. Просмотрите содержимое секретов:

    kubectl -n external-secrets-operator get secret external-secret -o yamlkubectl -n external-secrets-operator get secret external-secret-all -o yaml

Удалите неиспользуемые ресурсы

Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы Kubernetes, созданные для проверки работы аддона External Secrets Operator, вам больше не нужны, удалите их:

  1. Удалите пространство имен external-secrets-operator и связанные с ним ресурсы:

    kubectl delete namespace external-secrets-operator
  2. Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.