Вопрос или проблема
Как настроить хранилище с 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"
Важные замечания
- Порт: Вы можете использовать
VAULT_DEV_LISTEN_ADDRESS
, но в режиме разработки Vault всё равно использует порт 8200 по умолчанию. - TLS: Убедитесь, что при обращении к Vault вы используете
https
, иначе возникнет ошибка HTTP, когда сервер будет ожидать HTTPS-трафик. - Изоляция конфигурации: TLS не всегда работает как ожидается в режиме разработки. По возможности, рекомендуется тестировать на более стабильной конфигурации, а не в режиме
dev
.
Если после всех изменений у вас все еще возникают проблемы, попробуйте протестировать базовую работу Vault без TLS, чтобы подтвердить, что проблема на самом деле в конфигурации TLS, а не в самой установке Vault.
Надеюсь, эта информация поможет вам успешно настроить Vault с TLS в режиме разработки. Если возникнут дополнительные вопросы, не стесняйтесь спрашивать.