Secret

Тема дорожной карты · Kubernetes

Secret Kubernetes — первоклассный объект API для хранения небольших объёмов чувствительных данных — паролей, OAuth-токенов, TLS-сертификатов и SSH-ключей — отдельно от спецификаций Pod'ов и образов контейнеров, снижая риск случайного раскрытия в системе контроля версий. Secret'ы хранятся в etcd и могут шифроваться в состоянии покоя с помощью EncryptionConfiguration с провайдерами aescbc, secretbox или KMS-плагином для облачного управления ключами. Pod'ы потребляют Secret'ы либо как переменные окружения через spec.containers[].env[].valueFrom.secretKeyRef, либо как смонтированные файлы через spec.volumes[].secret.secretName; kubelet получает значения напрямую от kube-apiserver. Команда kubectl create secret generic mysecret --from-literal=username=myuser --from-literal=password=mypassword создаёт обычный Secret императивно, а kubectl create secret tls обрабатывает пары TLS-сертификатов. Для GitOps-рабочих процессов Secret'ы Kubernetes безопасно управляются с помощью SOPS совместно с Argo CD или Flux, External Secrets Operator, синхронизирующего данные из Vault или облачных KMS-хранилищ, или Sealed Secrets, шифрующих манифесты Secret для безопасного хранения в Git.

Как это работает

Secret управляется в Kubernetes через ConfigMap и Secret ресурсы. ConfigMaps держат не-чувствительную конфигурацию (feature flags, URL, sampling rates) и могут монтироваться как файлы или инжектироваться как переменные окружения. Secrets держат чувствительные данные (пароли, токены, TLS-сертификаты) и хранятся base64-encoded в etcd (с настраиваемым encryption-at-rest). Pods ссылаются на них по имени в своём spec.

Когда применять

Используйте Secret для отделения конфигурации от образов контейнеров — один образ, разные среды через разные 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.

Связанные понятия

Полезные ресурсы