Мы используем Kubernetes в Google Kubernetes Engine - в настоящее время у нас есть секреты, добавляемые вручную с помощью секретного интерфейса командной строки kubectl.
Чтобы сделать управление секретами более безопасным и простым для всей команды, мы установили Хашикорп Хранилище экземпляр в отдельном кластере.
Как подключить хранилище Vault k / v к секретам Kubernetes?
Я ищу что-то подобное
volumes:
- name: commonsecrets
secret:
source: vault
secretName: commonsecrets
items:
- key: SOME_API_KEY
path: apikey.txt
- key: SOME_CERTIFICATE
path: certificate.pub
Первое, что нужно четко сказать: Кубернеты Secret
Объект / ресурс API! = Хашикорп Хранилище секреты, которые можно использовать с Кубернеты. Если вы используете first =, вы не используете последнее.
Так что в принципе нет возможности управлять Kubernetes Secrets
пользователя Hashicorp Vault. Вместо использования кубернетов Secret
объект для хранения конфиденциальных данных, потребляемых вашим Pods
вы используете для этой цели Hahicorp Vault. Поскольку секреты хранилища могут быть введены непосредственно в Pods
, вам не нужно дополнительно монтировать их как тома, как в вашем примере.
Если вы хотите интегрировать Хашикорп Хранилище экземпляр, установленный на отдельном кластере, описывается вся настройка Вот.
Если вы хотите развернуть приложение с жестко запрограммированным внешним адресом Vault, официальный Документация Hashicorp Vault также объясняет, как это сделать:
Самый простой способ для модуля в кластере обратиться к Vault - это жестко запрограммированный сетевой адрес, определенный в коде приложения или предоставленный как переменная среды. Мы создали и опубликовали веб-приложение, которое вы развернете с переопределением адреса Vault.
Сначала создайте сервисную учетную запись Kubernetes, чтобы модули использовали для аутентификации.
ServiceAccount metadata: name: internal-app EOF
Создайте развертывание с этим веб-приложением, которое устанавливает
VAULT_ADDR
кEXTERNAL_VAULT_ADDR
.--- apiVersion: apps/v1 kind: Deployment metadata: name: devwebapp labels: app: devwebapp spec: replicas: 1 selector: matchLabels: app: devwebapp template: metadata: labels: app: devwebapp spec: serviceAccountName: internal-app containers: - name: app image: burtlo/devwebapp-ruby:k8s imagePullPolicy: Always env: - name: VAULT_ADDR value: "http://$EXTERNAL_VAULT_ADDR:8200" EOF
Веб-приложение, нацеленное на внешнее хранилище, развертывается как модуль в пространстве имен по умолчанию.
Получите все модули в пространстве имен по умолчанию.
STATUS RESTARTS AGE devwebapp-68cc55948b-w9745 1/1 Running 0 4m
Подождите, пока
devwebapp
pod сообщает, что запущен и готов (1/1
).Запросить контент, обслуживаемый в
localhost:8080
изнутриdevwebapp
стручок$(kubectl get pod -l app=devwebapp -o jsonpath="{.items[0].metadata.name}") \ -- curl -s localhost:8080 ; echo
Результат показывает, что секрет определен в пути
secret/data/devwebapp/config
.{"password"=>"salsa", "username"=>"giraffe"}
Веб-приложение аутентифицируется на внешнем сервере Vault с использованием корневого токена и возвращает секрет, определенный в пути.
secret/data/devwebapp/config
. Этот жестко запрограммированный подход является эффективным решением, если адрес сервера Vault не меняется.
Это всего лишь один пример среди нескольких доступных подходов. В качестве альтернативы вы можете захотеть Развертывание службы и конечных точек для обращения к внешнему Vault или Установите схему Vault Helm, настроенную для обращения к внешнему Vault. Как вы можете прочитать в документации:
Диаграмма Vault Helm может развернуть только службу Vault Agent Injector, настроенную для работы с внешним Vault. Служба инжектора обеспечивает аутентификацию и получение секретов для приложений, добавляя контейнеры Vault Agent по мере их автоматической записи в модуль, когда развертывание включает определенные аннотации.
Вы также можете ознакомиться со следующими статьями:
Управление секретами в Kubernetes с помощью Vault от HashiCorp
Внедрение секретов Vault в поды Kubernetes с помощью Sidecar
Внедрение секретов в модули Kubernetes с помощью коляски Vault Helm
И многое другое связаны с использованием Hashicorp Vault с Kubernetes.