Назад | Перейти на главную страницу

Используйте Vault для управления секретами Kubernetes

Мы используем 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.