Kubernetes: использование оператора CustomResourceDefinition + для создания секретов доступа к БД

Я планирую создать специальное "развертывание" развертывания на k8s (один "развертывание" на кластер). Его роль заключается в том, чтобы вытащить спецификации из центрального места, создать манифесты k8s и применить их. Конечным результатом должно быть несколько развертываний, каждое в своем собственном пространстве имен со службой и входом, а также секрет, содержащий учетные данные БД.

Я не хочу напрямую передавать и управлять деталями БД. Вместо этого я думал о создании CustomResourceDefinition 'dbservice', который будет содержать имя службы БД среди остальных. Затем настройте оператор k8s, который бы:

  1. Возьмите (монитор) такой ресурс 'dbservice'.
  2. Проверьте с услугой размещения БД, если такая услуга уже существует. Если нет, он создаст его с некоторыми спецификациями из пользовательского ресурса.
  3. Получите имя хоста, пароль, пользователя, имя базы данных и порт и сохраните их в секрете, который будет использоваться при развертывании (envvar).

Сюда:

  1. Каждое развертывание будет ждать своего секрета БД и не запустится до тех пор, пока секрет не будет создан, что означает, что БД готова
  2. Мне бы не пришлось управлять службами БД вручную.
  3. Мне бы не пришлось передавать пароли по проводам.

Что должно произойти, чтобы это работало (согласно моему плану):

  1. Оператору понадобятся разрешения для связи с провайдером хостинга БД (возможно, он получит доступ к другому хранимому секрету k8s с помощью ключа API).
  2. У оператора должны быть разрешения на создание секретов во всех пространствах имен.

Поскольку я довольно новичок в k8s и devops в целом, я хотел убедиться, что этот подход вменяемый, а не анти-паттерн.

2 ответа

Решение

Это абсолютно разумно, и вроде бы оно уже реализовано https://github.com/mumoshu/aws-secret-operator но в качестве бэкэнда используется менеджер секретов AWS вместо БД

UPD: еще одно подобное решение появилось только сегодня: https://godaddy.github.io/2019/04/16/kubernetes-external-secrets/

Hashicorp Vault может сделать нечто подобное для некоторых поставщиков БД - ознакомьтесь с документацией здесь. Существует также концепция сервисного брокера, который может создавать облачные ресурсы для вас - см., Например, Azure Service Broker. В целом, это звучит довольно круто, поэтому, если оба решения не работают для вас - продолжайте и создайте его!

Другие вопросы по тегам