Настройка интеграции с секретами из Secret Manager
С помощью инструкции вы настроите в кластере Managed Kubernetes интеграцию с секретами, которые хранятся в сервисе Secret Manager.
Перед началом работы
Создайте секрет в Secret Manager в формате JSON.
Пример секрета в JSON-форматеСоздайте кластер с публичным IP и группу узлов.
Назначьте на сервисный аккаунт, выбранный при создании кластера, роль scsm.user.
Шаг 1. Создайте ресурс для связи с Secret Manager
Вы можете создать ресурс с типом ClusterSecretStore или SecretStore:
ClusterSecretStore позволяет оперировать секретами в любом пространстве имен кластера.
SecretStore — только в пространстве имен, в котором SecretStore создан. В этом случае для каждого пространства имен можно создать отдельный SecretStore.
Создайте файл cloudrusm-store.yaml и сохраните следующую спецификацию:
apiVersion : external-secrets.io/v1beta1kind : ClusterSecretStoremetadata :name : cloudrusm-storespec :provider :cloudrusm :auth :secretRef :accessKeyIDSecretRef :name : cloud-auth-secretnamespace : kube-systemkey : CLIENT_IDaccessKeySecretSecretRef :name : cloud-auth-secretnamespace : kube-systemkey : SECRET_IDproductInstanceID : <идентификатор_продукта>Где productInstanceID — идентификатор продукта из Secret Manager.
В примере выше используется спецификация для создания ClusterSecretStore. Если вы хотите использовать SecretStore, предварительно создайте Secret для сервисного аккаунта, который выбрали при создании кластера. Укажите в Secret и SecretStore одинаковое пространство имен.
Примеры спецификаций:
Secret SecretStoreSecret SecretStoreВ терминале или PowerShell выполните команду:
kubectl create -f cloudrusm-store.yamlРезультат:
clustersecretstore/cloudrusm-store createdПроверьте статус:
kubectl -n kube-system get clustersecretstoreРезультат:
NAME AGE STATUS CAPABILITIES READYcloudrusm-store 7s Valid ReadOnly True
Шаг 2. Создайте ExternalSecret для извлечения секрета из Secret Manager
Создайте файл cloudrusm-external-secret.yaml и сохраните следующую спецификацию:
apiVersion : external-secrets.io/v1beta1kind : ExternalSecretmetadata :name : cloudrusm-external-secretnamespace : <пространство_имен>spec :refreshInterval : 10ssecretStoreRef :name : cloudrusm-storekind : <тип_ресурса>target :name : my-secretcreationPolicy : OwnerdataFrom :- 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 READYcloudrusm-external-secret cloudrusm-store 10s SecretSynced TrueПроверьте, что секрет присутствует в кластере:
kubectl get secrets my-secretsРезультат:
NAME TYPE DATA AGEmy-secrets Opaque 2 3m9s
Шаг 3. Удалите ресурсы
Если вы закончили работать с примером:
- Перед началом работы
- Шаг 1. Создайте ресурс для связи с Secret Manager
- Шаг 2. Создайте ExternalSecret для извлечения секрета из Secret Manager
- Шаг 3. Удалите ресурсы