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

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

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

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

Сюда:

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

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

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

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


person AlexGordon    schedule 16.04.2019    source источник


Ответы (2)


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

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

person Max Lobur    schedule 16.04.2019

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

person Omer Levi Hevroni    schedule 16.04.2019