Configuration

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

ConfigMap и Secret — два основных объекта Kubernetes API для передачи конфигурационных данных и чувствительных учётных данных в Pod'ы без их встраивания в образы контейнеров. ConfigMap хранит произвольные нечувствительные пары ключ-значение или целые файлы, которые Pod'ы потребляют через переменные окружения (env.valueFrom.configMapKeyRef), аргументы команды или монтирование томов через spec.volumes[].configMap. Secret использует те же способы потребления, но кодирует значения в base64 и поддерживает специализированные типы: kubernetes.io/dockerconfigjson для учётных данных реестра образов, kubernetes.io/tls для TLS-сертификатов и kubernetes.io/service-account-token. Оба объекта можно создавать императивно через kubectl create configmap или kubectl create secret generic и управлять ими декларативно в YAML; в production-кластерах K8s Secret'ы, как правило, управляются через External Secrets Operator или запечатываются с помощью Sealed Secrets, чтобы избежать хранения учётных данных в открытом виде в Git.

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

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

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

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

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

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