External Secrets Operator
Тема дорожной карты · Kubernetes
External Secrets Operator (ESO) — оператор Kubernetes, синхронизирующий секреты из внешних систем управления секретами — AWS Secrets Manager, HashiCorp Vault, Azure Key Vault, GCP Secret Manager и других — в нативные объекты Secret Kubernetes, обеспечивая GitOps-рабочие процессы без хранения учётных данных в открытом виде в Git. ESO вводит пользовательские ресурсы ExternalSecret, SecretStore и ClusterSecretStore: SecretStore содержит конфигурацию подключения и учётные данные аутентификации для upstream-провайдера, а ExternalSecret объявляет, какие ключи нужно получить, и отображает их в Secret Kubernetes с указанным spec.target.name. Оператор согласует ресурсы ExternalSecret с настраиваемым интервалом refreshInterval, обеспечивая синхронизацию Secret'ов Kubernetes с событиями ротации во внешнем хранилище, что критически важно для соответствия требованиям compliance в production K8s-кластерах. External Secrets Operator органично интегрируется с GitOps-конвейерами Argo CD и Flux CD, поскольку в Git-репозиторий нужно коммитить только манифест ExternalSecret (без чувствительных данных).
Как это работает
External Secrets Operator управляется в Kubernetes через ConfigMap и Secret ресурсы. ConfigMaps держат не-чувствительную конфигурацию (feature flags, URL, sampling rates) и могут монтироваться как файлы или инжектироваться как переменные окружения. Secrets держат чувствительные данные (пароли, токены, TLS-сертификаты) и хранятся base64-encoded в etcd (с настраиваемым encryption-at-rest). Pods ссылаются на них по имени в своём spec.
Когда применять
Используйте External Secrets Operator для отделения конфигурации от образов контейнеров — один образ, разные среды через разные ConfigMaps. Используйте Secrets для всего чувствительного, но относитесь к base64 как к кодированию, не шифрованию; ротируйте через External Secrets Operator + Vault или SOPS для git-friendly secret management. Не храните реальные секреты в ConfigMaps "потому что проще" — RBAC обычно отличается между ними.
Типичные ошибки
Config/Secret-ловушки: коммитят реальные Secrets в git (используйте sealed-secrets, SOPS или External Secrets Operator); reload config требует перезапуск pod, если приложение не следит за изменениями файлов; лимит ConfigMap — 1 MiB, переполнение fail тихо. Аудитируйте, кто может kubectl get secrets регулярно; во многих кластерах ответ — все, что значит etcd dump = leak credentials.