Как настроить хранилище с TLS в режиме разработки с помощью helm

Вопрос или проблема

Как настроить хранилище с TLS в режиме разработки с помощью helm

Я пытаюсь протестировать развертывание Helm, которое взаимодействует с Hashicorp Vault. В настоящее время я настраиваю шифрование TLS и хочу, чтобы мои тесты выполнялись с использованием TLS против сервера Vault, когда он находится в режиме разработки (для тестирования). Пока что мне не удалось добиться этого, и я попробовал несколько вариантов конфигурации Vault.

Моя текущая конфигурация (test-values.yaml):

инжектор:
  включен: ложь
глобальный:
  включен: истина
  tlsDisable: ложь
сервер:
  extraEnvironmentVars:
    # Попытка сделать так, чтобы сервер разработки слушал на другом порту, пока TCP-слушатель слушает на 8200
    # Это приводит к ошибкам "связь отклонена". Может быть, отдельная конфигурация не используется??
    # пробовал с включенным и отключенным
    VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8400
    VAULT_CACERT: /vault/userconfig/test-certs/ca.crt
    # указать vault использовать https... это, похоже, не привело ни к чему, пробовал с включенным и отключенным
    VAULT_ADDR: https://127.0.0.1:8200
  extraVolumes:
    - type: secret
      name: test-certs
  dev:
    включен: истина
  standalone:
    включен: истина
    config: |
      listener "tcp" {
        address = "[::]:8200"
        cluster_address = "[::]:8201"
        tls_disable = 0
        tls_cert_file = "/vault/userconfig/test-certs/tls.crt"
        tls_key_file = "/vault/userconfig/test-certs/tls.key"
      }
      storage "file" {
        path = "/vault/data"
      }

Моя последняя попытка (основана на этом комментарии) включает установку VAULT_DEV_LISTEN_ADDRESS на какой-то неиспользуемый порт, чтобы TCP-слушатель мог обрабатывать трафик на 8200, однако это вызвало отказ в соединении.

Ошибка включения: Post “https://127.0.0.1:8200/v1/sys/mounts/transit”: dial tcp 127.0.0.1:8200: connect: connection refused

Это заставляет меня думать, может быть, в режиме разработки игнорируется отдельная конфигурация, которую я определил?

Кроме того, все, что я пытался, привело к следующей HTTP-ошибке

Ошибка включения: Post “https://127.0.0.1:8200/v1/sys/mounts/transit”: http: сервер выдал HTTP-ответ HTTPS-клиенту

Судя по тому, что я читал, это происходит потому, что в режиме разработки Vault по умолчанию не использует TLS. Включение TLS через helm values.yaml, похоже, не влияет на режим разработки (по тем попыткам, которые я сделал до сих пор). Я вижу, что при использовании Vault напрямую или в Docker есть способы заставить это работать, однако эти же методы, похоже, недоступны для развертывания через helm (насколько я вижу).

Ошибки выше являются результатом выполнения следующей команды, но они произойдут для любой команды Vault.

kubectl exec vault-0 -- vault secrets enable transit

Итак… Возможно ли развернуть Vault через helm в k8s в режиме разработки с включенным TLS? Как я могу настроить TLS в режиме разработки при развертывании в k8s через helm? Буду признателен за любую помощь в настройке этого!

Шаги для воспроизведения:

# сертификаты необходимо будет сгенерировать
kubectl create secret generic test-certs \
  --from-file=ca.crt=./ca.crt \
  --from-file=tls.crt=./tls.crt \
  --from-file=tls.key=./tls.key

helm repo add hashicorp https://helm.releases.hashicorp.com
helm install vault hashicorp/vault -f test-values.yaml

Ответ или решение

Чтобы настроить HashiCorp Vault с TLS в режиме разработки через Helm, вам нужно учесть несколько моментов. Разберем процесс настроек и возможные ошибки.

1. Подготовка сертификатов

Прежде всего, убедитесь, что у вас есть правильно сгенерированные TLS-сертификаты. Вы можете использовать OpenSSL для создания необходимых файлов:

openssl genrsa -out tls.key 2048
openssl req -new -key tls.key -out tls.csr
openssl x509 -req -days 365 -in tls.csr -signkey tls.key -out tls.crt

Теперь создайте секрет в Kubernetes, который будет содержать ваши сертификаты:

kubectl create secret generic test-certs \
  --from-file=ca.crt=./ca.crt \
  --from-file=tls.crt=./tls.crt \
  --from-file=tls.key=./tls.key

2. Конфигурация values.yaml

Некоторые настройки вашего файла test-values.yaml могут быть несовместимыми с режимом разработки. Вот исправленная версия конфигурации, обращающая внимание на важные параметры:

injector:
  enabled: false

global:
  enabled: true
  tlsDisable: false

server:
  extraEnvironmentVars:
    VAULT_ADDR: https://127.0.0.1:8200
  dev:
    enabled: true
  standalone:
    enabled: true
    config: |
      listener "tcp" {
        address = "0.0.0.0:8200"
        cluster_address = "0.0.0.0:8201"
        tls_disable = 0
        tls_cert_file = "/vault/userconfig/test-certs/tls.crt"
        tls_key_file = "/vault/userconfig/test-certs/tls.key"
      }

      storage "inmem" {}

3. Установка Vault с помощью Helm

После подготовки сертификатов и изменения конфигурации, вы готовы установить Vault.

helm repo add hashicorp https://helm.releases.hashicorp.com
helm install vault hashicorp/vault -f test-values.yaml

4. Проверка состояния

После установки, проверьте логи пода для поиска возможных ошибок. Используйте следующие команды:

kubectl logs vault-0

5. Проверка доступа

Выполнение команд Vault следует делать через kubectl exec, например:

kubectl exec vault-0 -- /bin/sh -c "VAULT_ADDR=https://127.0.0.1:8200 vault secrets enable transit"

Важные замечания

  1. Порт: Вы можете использовать VAULT_DEV_LISTEN_ADDRESS, но в режиме разработки Vault всё равно использует порт 8200 по умолчанию.
  2. TLS: Убедитесь, что при обращении к Vault вы используете https, иначе возникнет ошибка HTTP, когда сервер будет ожидать HTTPS-трафик.
  3. Изоляция конфигурации: TLS не всегда работает как ожидается в режиме разработки. По возможности, рекомендуется тестировать на более стабильной конфигурации, а не в режиме dev.

Если после всех изменений у вас все еще возникают проблемы, попробуйте протестировать базовую работу Vault без TLS, чтобы подтвердить, что проблема на самом деле в конфигурации TLS, а не в самой установке Vault.

Надеюсь, эта информация поможет вам успешно настроить Vault с TLS в режиме разработки. Если возникнут дополнительные вопросы, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...