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.