Синхронизация с секретами Yandex Managed Service for Kubernetes
С помощью инструмента External Secrets Operator
Существует несколько схем интеграции
Чтобы настроить синхронизацию секретов:
- Установите External Secrets Operator и настройте Yandex Lockbox.
- Настройте кластер Managed Service for Kubernetes.
- Создайте External Secret.
Если созданные ресурсы вам больше не нужны, удалите их.
Также инфраструктуру для синхронизации секретов Yandex Lockbox с секретами кластера Managed Service for Kubernetes можно развернуть через Terraform с помощью готового файла конфигурации.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость ресурсов для синхронизации секретов входит:
- Плата за использование мастера Managed Service for Kubernetes (см. тарифы Managed Service for Kubernetes).
- Плата за вычислительные ресурсы и диски группы узлов Managed Service for Kubernetes (см. тарифы Yandex Compute Cloud).
- Плата за хранение и операции с секретом (см. тарифы Yandex Lockbox).
Создайте инфраструктуру
-
Если у вас еще нет сети, создайте ее.
-
Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Managed Service for Kubernetes и группа узлов.
-
- Сервисный аккаунт для ресурсов Kubernetes с ролью editor на каталог, в котором создается кластер Managed Service for Kubernetes.
- Сервисный аккаунт для узлов Managed Service for Kubernetes с ролью container-registry.images.puller на каталог с реестром Docker-образов. От его имени узлы Managed Service for Kubernetes будут скачивать из реестра необходимые Docker-образы.
Совет
Вы можете использовать один и тот же сервисный аккаунт для всех операций.
-
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер Managed Service for Kubernetes и группу узлов. При создании кластера Managed Service for Kubernetes укажите ранее созданные сервисные аккаунты для ресурсов и узлов и группы безопасности.
-
Создайте секрет Yandex Lockbox со следующими параметрами:
- Имя —
lockbox-secret
. - Ключ — введите неконфиденциальный идентификатор
password
. - Значение — введите конфиденциальные данные для хранения
p@$$w0rd
.
Сохраните идентификатор секрета, он понадобится в дальнейшем.
- Имя —
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации кластера Managed Service for Kubernetes k8s-cluster-and-lockbox.tf
.В этом файле описаны:
-
Сеть.
-
Секрет Yandex Lockbox.
-
Кластер Managed Service for Kubernetes.
-
Сервисный аккаунт для ресурсов и узлов Managed Service for Kubernetes.
-
Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
-
Укажите в файле конфигурации:
- Идентификатор каталога.
- Версию Kubernetes для кластера Managed Service for Kubernetes и групп узлов.
- Имя сервисного аккаунта для ресурсов и узлов Managed Service for Kubernetes.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
Сохраните выведенный в терминале идентификатор созданного секрета, он понадобится в дальнейшем.
Настройте окружение
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
. -
Установите утилиту
jq
:sudo apt update && sudo apt install jq
-
Установите kubectl
и настройте его на работу с созданным кластером.
Установите External Secrets Operator и настройте Yandex Lockbox
- Установите External Secrets Operator согласно инструкции.
- Назначьте сервисному аккаунту, который вы создали при установке External Secrets Operator, роль
lockbox.payloadViewer
на созданный ранее секретlockbox-secret
.
Настройте кластер Managed Service for Kubernetes
-
Создайте пространство имен
ns
, в котором будут размещены объекты External Secrets Operator:kubectl create namespace ns
-
Создайте секрет
yc-auth
с ключомsa-key.json
, который вы создали при установке External Secrets Operator:kubectl --namespace ns create secret generic yc-auth \ --from-file=authorized-key=sa-key.json
-
Создайте хранилище секретов SecretStore
, содержащее секретyc-auth
:kubectl --namespace ns apply -f - <<< ' apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: secret-store spec: provider: yandexlockbox: auth: authorizedKeySecretRef: name: yc-auth key: authorized-key'
Создайте External Secret
-
Создайте объект ExternalSecret
, указывающий на секретlockbox-secret
в хранилищеsecret-store
:kubectl --namespace ns apply -f - <<< ' apiVersion: external-secrets.io/v1beta1 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'
Где:
key
— идентификатор созданного ранее секрета Yandex Lockboxlockbox-secret
.spec.target.name
— имя нового ключа:k8s-secret
. External Secret Operator создаст этот ключ и поместит в него параметры секретаlockbox-secret
.
-
Убедитесь, что новый ключ
k8s-secret
содержит значение секретаlockbox-secret
:kubectl --namespace ns get secret k8s-secret \ --output=json | \ jq --raw-output ."data"."password" | \ base64 --decode
В выводе команды будет содержаться значение ключа
password
секретаlockbox-secret
:p@$$w0rd
Удалите созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Managed Service for Kubernetes.
- Если вы зарезервировали для кластера Managed Service for Kubernetes публичный статический IP-адрес, удалите его.
- Удалите секрет
lockbox-secret
.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-