# External Secrets Operator (ESO) Синхронизирует секреты из внешних хранилищ (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager и др.) в нативные Kubernetes Secrets. **Когда использовать ESO вместо Vault Agent Injector:** - Нужны стандартные k8s Secrets (`secretRef`, `envFrom`) — Helm чарты не менять - Секреты нужны до старта пода (init containers, admission webhooks) - Нужна синхронизация между namespace - Нет желания добавлять Vault annotations в каждый Deployment ## Установка ```bash # Базовая установка (настрой ClusterSecretStore вручную после) make addon-external-secrets # Сразу с настроенным ClusterSecretStore → Vault (если AppRole уже создан) make addon-external-secrets ARGS="-e external_secrets_vault_role_id=" ``` ## Настройка AppRole в Vault ESO использует AppRole для аутентификации в Vault. Выполни один раз: ```bash # 1. Port-forward к Vault kubectl port-forward -n vault svc/vault 8200:8200 & export VAULT_ADDR=http://localhost:8200 vault login # 2. Включить AppRole auth (если ещё не включён) vault auth enable approle # 3. Создать политику для ESO (read-only на все секреты) vault policy write eso-policy - <" secretRef: name: vault-approle-myapp key: secretId ``` ## Мониторинг Если `addon_prometheus_stack: true`, метрики ESO доступны в Grafana: - `external_secrets_sync_calls_total` — количество синхронизаций - `external_secrets_sync_call_errors_total` — ошибки - Дашборд: импортируй Grafana Dashboard ID 21045 ```bash # Статус всех ExternalSecrets в кластере kubectl get externalsecrets --all-namespaces # Подробности (условие Ready/SecretSynced) kubectl describe externalsecret myapp-db-secret -n myapp ``` ## Официальные ресурсы - Официальный сайт: [https://external-secrets.io/](https://external-secrets.io/) - Официальная документация: [https://external-secrets.io/latest/](https://external-secrets.io/latest/) - Версии Helm chart / ПО: [https://artifacthub.io/packages/helm/external-secrets-operator/external-secrets](https://artifacthub.io/packages/helm/external-secrets-operator/external-secrets)