Kubernetes: использование оператора CustomResourceDefinition + для создания секретов доступа к БД
Я планирую создать специальное "развертывание" развертывания на k8s (один "развертывание" на кластер). Его роль заключается в том, чтобы вытащить спецификации из центрального места, создать манифесты k8s и применить их. Конечным результатом должно быть несколько развертываний, каждое в своем собственном пространстве имен со службой и входом, а также секрет, содержащий учетные данные БД.
Я не хочу напрямую передавать и управлять деталями БД. Вместо этого я думал о создании CustomResourceDefinition 'dbservice', который будет содержать имя службы БД среди остальных. Затем настройте оператор k8s, который бы:
- Возьмите (монитор) такой ресурс 'dbservice'.
- Проверьте с услугой размещения БД, если такая услуга уже существует. Если нет, он создаст его с некоторыми спецификациями из пользовательского ресурса.
- Получите имя хоста, пароль, пользователя, имя базы данных и порт и сохраните их в секрете, который будет использоваться при развертывании (envvar).
Сюда:
- Каждое развертывание будет ждать своего секрета БД и не запустится до тех пор, пока секрет не будет создан, что означает, что БД готова
- Мне бы не пришлось управлять службами БД вручную.
- Мне бы не пришлось передавать пароли по проводам.
Что должно произойти, чтобы это работало (согласно моему плану):
- Оператору понадобятся разрешения для связи с провайдером хостинга БД (возможно, он получит доступ к другому хранимому секрету k8s с помощью ключа API).
- У оператора должны быть разрешения на создание секретов во всех пространствах имен.
Поскольку я довольно новичок в 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. В целом, это звучит довольно круто, поэтому, если оба решения не работают для вас - продолжайте и создайте его!