envFrom и volumeMounts

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

Переменные окружения в Kubernetes — основной механизм передачи конфигурации времени выполнения в контейнеры; они задаются через поля spec.containers[].env и envFrom в спецификации Pod'а без необходимости пересборки образа. Отдельные переменные могут ссылаться на литеральные значения, ключи ConfigMap через valueFrom.configMapKeyRef или ключи Secret через valueFrom.secretKeyRef, а envFrom массово импортирует все ключи из ConfigMap или Secret в виде переменных окружения через стрелки configMapRef или secretRef. Kubernetes также автоматически добавляет переменные обнаружения сервисов вида <SERVICE_NAME>_SERVICE_HOST и <SERVICE_NAME>_SERVICE_PORT для каждого Service, активного в том же пространстве имён на момент создания Pod'а. Управление переменными окружения в масштабе лучше всего осуществлять через файлы values Helm, патчи configMapGenerator и secretGenerator в Kustomize или External Secrets Operator, синхронизирующий секреты из внешних хранилищ — HashiCorp Vault или AWS Secrets Manager — в Secret'ы Kubernetes, потребляемые как переменные окружения.

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

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

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

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

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

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