Как управлять секретами в Docker/K8s (Vault, Secrets)?
Подробный ответ
Что считать секретом
К секретам относятся пароли баз данных, API keys, OAuth client secrets, JWT signing keys, TLS-сертификаты, токены доступа к registry и credentials внешних сервисов. Они не должны попадать в Dockerfile, Git-репозиторий, логи CI/CD и публичные container images.
Kubernetes Secret
Kubernetes Secret хранит конфиденциальные данные отдельно от манифеста приложения. Secret можно подключить как переменные окружения или как volume с файлами.
apiVersion: v1
kind: Secret
metadata:
name: api-secrets
type: Opaque
stringData:
DATABASE_URL: postgresql://app:password@db:5432/app_db
JWT_SECRET: change-me-in-productionПодключение Secret в Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
template:
spec:
containers:
- name: api
image: ghcr.io/acme/api:1.0.0
envFrom:
- secretRef:
name: api-secretsОграничения Kubernetes Secrets
Значения в обычном Secret кодируются в base64, но base64 не является шифрованием. Для production нужны encryption at rest в etcd, строгие RBAC-права, аудит доступа и запрет на вывод секретов в логи.
Vault и внешние secret managers
Vault, облачные Secret Manager-сервисы и External Secrets Operator позволяют не хранить постоянные значения прямо в манифестах Kubernetes. Они поддерживают централизованный доступ, ротацию, короткоживущие credentials, dynamic database credentials и аудит выдачи секретов.
Практические правила
не встраивать секреты в image и не передавать их через Dockerfile
ENV;разделять доступ по namespace, сервисам и ролям;
использовать отдельные секреты для development, staging и production;
настраивать ротацию и процедуру отзыва скомпрометированных ключей;
проверять CI/CD на случайное попадание секретов в артефакты и логи.
Как ответить на собеседовании
В Kubernetes я передаю секреты через Secret как env-переменные или volume, но помню, что base64 не шифрует данные. Для production включаю encryption at rest и RBAC. Если нужна централизованная ротация, аудит и short-lived credentials, использую Vault или облачный secret manager вместе с оператором синхронизации секретов.
Оцени свой прогресс