Deckhouse Kubernetes Platform (DKP) поддерживает нативную интеграцию с несколькими облачными сервисами Yandex Cloud. Это позволяет подключать внешний мониторинг, безопасно работать с секретами и автоматизировать синхронизацию данных между инфраструктурой и кластером.
В данном разделе описаны шаги по настройке следующих интеграций:
- с Yandex Lockbox через External Secrets Operator;
- с Yandex Managed Service for Prometheus.
Интеграция с Yandex Lockbox
DKP поддерживает интеграцию с Yandex Lockbox с помощью оператора External Secrets Operator (ESO). Это позволяет автоматически синхронизировать секреты из Lockbox с секретами Kubernetes в кластере.
Для интеграции выполните следующие шаги:
-
Создайте сервисный аккаунт, необходимый для работы External Secrets Operator:
yc iam service-account create --name eso-service-account
-
Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл:
yc iam key create --service-account-name eso-service-account --output authorized-key.json
-
Назначьте сервисному аккаунту роли
lockbox.editor
,lockbox.payloadViewer
иkms.keys.encrypterDecrypter
для доступа ко всем секретам каталога:folder_id=<идентификатор каталога> yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role lockbox.editor yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role lockbox.payloadViewer yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role kms.keys.encrypterDecrypter
Для более тонкой настройки ознакомьтесь с управлением доступом в Yandex Lockbox.
-
Установите External Secrets Operator с помощью Helm-чарта согласно инструкции.
Обратите внимание, что вам может понадобиться задать
nodeSelector
,tolerations
и другие параметры. Для этого используйте файл./external-secrets/values.yaml
после распаковки Helm-чарта.Скачайте и распакуйте чарт:
helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/external-secrets/chart/external-secrets \ --version 0.5.5 \ --untar
Установите Helm-чарт:
helm install -n external-secrets --create-namespace \ --set-file auth.json=authorized-key.json \ external-secrets ./external-secrets/
Где:
authorized-key.json
— название файла с авторизованным ключом из шага 2.
-
Создайте хранилище секретов SecretStore, содержащее секрет
sa-creds
:d8 k -n external-secrets apply -f - <<< ' apiVersion: external-secrets.io/v1alpha1 kind: SecretStore metadata: name: secret-store spec: provider: yandexlockbox: auth: authorizedKeySecretRef: name: sa-creds key: key'
Где:
sa-creds
— название Secret, содержащего авторизованный ключ. Этот секрет должен появиться после установки Helm-чарта.key
— название ключа в поле.data
секрета выше.
-
Проверьте статус External Secrets Operator:
d8 k -n external-secrets get po
Пример вывода:
NAME READY STATUS RESTARTS AGE external-secrets-55f78c44cf-dbf6q 1/1 Running 0 77m external-secrets-cert-controller-78cbc7d9c8-rszhx 1/1 Running 0 77m external-secrets-webhook-6d7b66758-s7v9c 1/1 Running 0 77m
Проверьте статус созданного хранилища секретов:
d8 k -n external-secrets get secretstores.external-secrets.io
Пример вывода:
NAME AGE STATUS secret-store 69m Valid
-
Создайте секрет Yandex Lockbox со следующими параметрами:
- Имя —
lockbox-secret
. - Ключ — введите неконфиденциальный идентификатор
password
. - Значение — введите конфиденциальные данные для хранения
p@$$w0rd
.
- Имя —
-
Создайте объект ExternalSecret, указывающий на секрет
lockbox-secret
в хранилищеsecret-store
:d8 k -n external-secrets apply -f - <<< ' apiVersion: external-secrets.io/v1alpha1 kind: ExternalSecret metadata: name: external-secret spec: refreshInterval: 1h secretStoreRef: name: secret-store kind: SecretStore target: name: k8s-secret data: - secretKey: password remoteRef: key: <ИДЕНТИФИКАТОР_СЕКРЕТА> property: password'
Где:
spec.target.name
— имя нового секрета. External Secret Operator создаст этот секрет в кластере Deckhouse Kubernetes Platform и поместит в него параметры секрета Yandex Lockboxlockbox-secret
.spec.data[].secretKey
— название ключа в поле.data
секрета, который создаст External Secret Operator.spec.data[].remoteRef.key
— идентификатор созданного ранее секрета Yandex Lockboxlockbox-secret
. Например,e6q28nvfmhu539******
.spec.data[].remoteRef.property
— ключ, указанный ранее, для секрета Yandex Lockboxlockbox-secret
.
-
Убедитесь, что новый ключ
k8s-secret
содержит значение секретаlockbox-secret
:d8 k -n external-secrets get secret k8s-secret -ojson | jq -r '.data.password' | base64 -d
В выводе команды будет содержаться значение ключа
password
секретаlockbox-secret
, созданного ранее:p@$$w0rd
Интеграция с Yandex Managed Service for Prometheus
С помощью данной интеграции вы можете использовать Yandex Managed Service for Prometheus в качестве внешнего хранилища метрик, например, для долгосрочного хранения.
Для записи метрик (PrometheusRemoteWrite) выполните следующие шаги:
- Создайте сервисный аккаунт с ролью
monitoring.editor
. - Создайте API-ключ для сервисного аккаунта.
-
Создайте ресурс PrometheusRemoteWrite:
d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1 kind: PrometheusRemoteWrite metadata: name: yc-remote-write spec: url: <URL_ЗАПИСИ_МЕТРИК> bearerToken: <API_КЛЮЧ> EOF
Где:
<URL_ЗАПИСИ_МЕТРИК>
— URL со страницы Yandex Monitoring/Prometheus/Запись метрик.<API_КЛЮЧ>
— API-ключ, созданный на предыдущем шаге. Например,AQVN1HHJReSrfo9jU3aopsXrJyfq_UHs********
.
Также вы можете указать дополнительные параметры в соответствии с документацией.
Подробнее с данной функциональностью можно ознакомиться в документации Yandex Cloud.
Для чтения метрик через Grafana:
- Создайте сервисный аккаунт с ролью
monitoring.viewer
. - Создайте API-ключ для сервисного аккаунта.
-
Создайте ресурс GrafanaAdditionalDatasource:
apiVersion: deckhouse.io/v1 kind: GrafanaAdditionalDatasource metadata: name: managed-prometheus spec: type: prometheus access: Proxy url: <URL_ЧТЕНИЕ_МЕТРИК_ЧЕРЕЗ_GRAFANA> basicAuth: false jsonData: timeInterval: 30s httpMethod: POST httpHeaderName1: Authorization secureJsonData: httpHeaderValue1: Bearer <API_КЛЮЧ>
Где:
<URL_ЧТЕНИЕ_МЕТРИК_ЧЕРЕЗ_GRAFANA>
— URL со страницы Yandex Monitoring/Prometheus/Чтение метрик через Grafana.<API_КЛЮЧ>
— API-ключ, созданный на предыдущем шаге. Например,AQVN1HHJReSrfo9jU3aopsXrJyfq_UHs********
.
Также вы можете указать дополнительные параметры в соответствии с документацией.
Подробнее с данной функциональностью можно ознакомиться в документации Yandex Cloud.