Ищите секреты из диспетчера секретов gcloud напрямую как secretGenerator с помощью kustomize

Я настраиваю свой Kubernetes кластер с использованием kubectl -k(настроить). Как и любой другой подобный механизм, во время развертывания я полагаюсь на некоторые секреты. Я хочу пойти по путиsecretGenerator особенность kustomize чтобы получить мои секреты из файлов или переменных среды.

Однако управление указанными файлами или переменными среды безопасным и переносимым образом оказалось проблемой. Тем более, что у меня есть 3 отдельных пространства имен для тестирования, стадии и производства, каждое из которых требует разного набора секретов.

Поэтому я подумал, что у меня должен быть способ управлять секретами официальным способом моего облачного провайдера (облачная платформа Google - секретный менеджер).

Так как бы secretGenerator как выглядит доступ к секретам, хранящимся в секретном менеджере?

Мое наивное предположение будет примерно таким:

secretGenerator:
 - name: juicy-environment-config
   google-secret-resource-id: projects/133713371337/secrets/juicy-test-secret/versions/1
   type: some-google-specific-type
  • Это вообще возможно?
  • Как бы выглядел пример?
  • Где это задокументировано?
  • Если это невозможно, каковы мои альтернативы?

1 ответ

Решение

Я не знаю плагина для этого. Система плагинов в Kustomize несколько новая (добавлена ​​около 6 месяцев назад), так что пока нет тонны в дикой природе, а Secrets Manager всего несколько недель назад. Вы можете найти документы по адресу https://github.com/kubernetes-sigs/kustomize/tree/master/docs/plugins, чтобы написать их. Это связано с несколькими плагинами Go для управления секретами, так что вы, вероятно, можете взять один из них и переработать его в GCP API.

Для этого есть плагин Go (я помогал его написать), но плагины не поддерживались до более поздних версий Kustomize, поэтому вам нужно установить Kustomize напрямую и запустить его как kustomize build <path> | kubectl apply -f - скорее, чем kubectl -k. В любом случае, это хорошая идея, IMO, поскольку в более новых версиях Kustomize есть много других полезных функций, чем та, которая встроена в kubectl.

Как видно из примеров, после того, как вы установили плагин (или вы можете запустить его в Docker, см. Readme), вы можете определить файлы, подобные следующим, и передать их в систему контроля версий:

my-secret.yaml

apiVersion: crd.forgecloud.com/v1
kind: EncryptedSecret
metadata:
  name: my-secrets
  namespace: default
source: GCP
gcpProjectID: my-gcp-project-id
keys:
- creds.json
- ca.crt

В вашем kustomization.yaml вы бы добавили

generators:
- my-secret.yaml

и когда ты бежишь kustomize build он автоматически получит ваши секретные значения из Google Secret Manager и выведет Kubernetes secret объекты.