- tocdepth
2
Настройка интеграции с секретами из Secret Manager
С помощью инструкции вы настроите в кластере Managed Kubernetes интеграцию с секретами, которые хранятся в сервисе Secret Manager.
Перед началом работы
Создайте секрет в Secret Manager в формате JSON.
Пример секрета в JSON-формате
{ "key1":"value1", "key2":"value2" }
Создайте кластер с публичным IP и группу узлов.
Назначьте на сервисный аккаунт, выбранный при создании кластера, роль scsm.user.
Шаг 1. Создайте ресурс для связи с Secret Manager
Вы можете создать ресурс с типом ClusterSecretStore или SecretStore:
ClusterSecretStore позволяет оперировать секретами в любом пространстве имен кластера.
SecretStore — только в пространстве имен, в котором SecretStore создан. В этом случае для каждого пространства имен можно создать отдельный SecretStore.
Создайте файл
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: <идентификатор_продукта>
В терминале или PowerShell выполните команду:
kubectl create -f cloudrusm-store.yaml
Результат:
clustersecretstore/cloudrusm-store created
Проверьте статус:
kubectl -n kube-system get clustersecretstore
Результат:
NAME AGE STATUS CAPABILITIES READY cloudrusm-store 7s Valid ReadOnly True
Шаг 2. Создайте ExternalSecret для извлечения секрета из Secret Manager
Создайте файл
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.key
— UUID секрета из Secret Manager.
В терминале или PowerShell выполните команду:
kubectl create -f cloudrusm-external-secret.yaml
Результат:
externalsecret/cloudrusm-external-secret created
Проверьте статус:
kubectl get externalsecrets.external-secrets.io
Результат:
NAME STORE REFRESH INTERVAL STATUS READY cloudrusm-external-secret cloudrusm-store 10s SecretSynced True
Проверьте, что секрет присутствует в кластере:
kubectl get secrets my-secrets
Результат:
NAME TYPE DATA AGE my-secrets Opaque 2 3m9s
для Dev & Test