Kubernetes — секреты¶
Секреты в Kubernetes хранятся в объектах Secret (или во внешнем менеджере
секретов через CSI / External Secrets). В .env-файлы, как в пилоте на
Docker Compose, секреты не выносятся.
Кто создаёт секреты
При установке через Wizard с secrets.create: true встроенные
инфра-чарты создают свои Secret'ы сами. При secrets.create: false или при
использовании внешней инфраструктуры соответствующие секреты нужно создать
вручную до запуска install (иначе preflight:secrets завалит проверку).
Секрет приложения tokenization-vault-secrets создаёт клиент сам в любом
режиме — Wizard его не генерит.
Перечень секретов¶
| Секрет | Ключи | Кто создаёт | Потребители |
|---|---|---|---|
postgres-auth |
POSTGRES_PASSWORD |
postgres-чарт | все сервисы с БД |
redis-auth |
REDIS_PASSWORD |
redis-чарт | api-gateway, admin-api, event-exporter, profiles-registry |
minio-auth |
MINIO_ROOT_USER, MINIO_ROOT_PASSWORD |
minio-чарт | profiles-registry, opa |
keycloak-auth |
KEYCLOAK_ADMIN_PASSWORD, ENVOY_GATEWAY_CLIENT_SECRET, KEYCLOAK_BOOTSTRAP_USER_PASSWORD |
keycloak-чарт | admin-api, aigate-gateway (только при auth=true) |
harbor-cr |
.dockerconfigjson |
вручную | все поды (imagePullSecret) |
tokenization-vault-secrets |
VAULT_MASTER_KEY |
клиент сам | tokenization-vault |
Полный DATABASE_URL не хранится в секрете
В postgres-auth лежит только пароль (POSTGRES_PASSWORD). Полный
DATABASE_URL сервис собирает сам из global.deps.postgres.*, а пароль
подключает через secretKeyRef.
tokenization-vault-secrets — ответственность клиента
tokenization-vault-secrets/VAULT_MASTER_KEY — это секрет приложения, а не
инфры. Wizard его не генерирует ни при каком значении secrets.create, а
лишь проверяет наличие на этапе preflight:appsecrets. Создайте его сами до
install: значение — base64-строка длиной не менее 32 байт.
Соответствие секретов переменным окружения — см. Переменные окружения.
Создание вручную (pre-create)¶
Если инфра внешняя или secrets.create: false — создайте секреты до запуска
install. Секрет harbor-cr нужен всегда (его Wizard не создаёт):
# imagePullSecret для Harbor (host должен совпадать с image registry)
kubectl create secret docker-registry harbor-cr -n aigate \
--docker-server=registry.appsec.global \
--docker-username=<логин> --docker-password=<пароль>
# PostgreSQL — только пароль
kubectl create secret generic postgres-auth -n aigate \
--from-literal=POSTGRES_PASSWORD='<...>'
# Redis
kubectl create secret generic redis-auth -n aigate \
--from-literal=REDIS_PASSWORD='<...>'
# MinIO — access/secret key
kubectl create secret generic minio-auth -n aigate \
--from-literal=MINIO_ROOT_USER='<access>' \
--from-literal=MINIO_ROOT_PASSWORD='<secret>'
# Tokenization Vault — мастер-ключ (создаёт клиент, обязателен)
kubectl -n aigate create secret generic tokenization-vault-secrets \
--from-literal=VAULT_MASTER_KEY=$(openssl rand -base64 32)
При auth.enabled: true и внешнем Keycloak дополнительно создайте
keycloak-auth с ключами KEYCLOAK_ADMIN_PASSWORD,
ENVOY_GATEWAY_CLIENT_SECRET, KEYCLOAK_BOOTSTRAP_USER_PASSWORD.
Безопасность
Секреты не коммитятся в репозиторий в открытом виде. Используйте sealed-secrets / SOPS / External Secrets (внешний vault).
Мастер-ключ Tokenization Vault
VAULT_MASTER_KEY — особо критичный секрет: его утрата делает токены ПДн
невосстановимыми. Сохраните его в надёжном хранилище секретов до первого
запуска и не теряйте при ротации/переустановке.