Вопрос с собеседования · DevOps

Как передать конфигурацию и секреты приложению в Kubernetes?

MiddleKubernetes
Ещё спрашивают так:
  • Безопасны ли Secret в Kubernetes?
  • Чем ConfigMap отличается от Secret?
Коротко

ConfigMap — несекретные настройки, Secret — пароли, токены, сертификаты; оба подключаются как переменные окружения или файлы в томе. Secret по умолчанию лишь закодирован в base64, а не зашифрован: нужно включить шифрование etcd, ограничить RBAC и не хранить секреты в Git в открытом виде — использовать Vault, External Secrets, Sealed Secrets или SOPS.

  • Переменные окружения читаются при старте; файлы в томе обновляются, но приложение должно их перечитать
  • Изменение ConfigMap не перезапускает поды — часто добавляют хеш конфига в аннотацию шаблона
  • Переменные окружения легко утекают в логи и дампы — файлы безопаснее

А ещё Принцип 12 factor: конфигурация в окружении, образ один на все среды

Подробно

Подключение:

env:
  - name: DB_PASSWORD
    valueFrom: { secretKeyRef: { name: orders-db, key: password } }
volumeMounts:
  - { name: config, mountPath: /etc/orders }
volumes:
  - { name: config, configMap: { name: orders-config } }

Защита секретов:

  • шифрование etcd на диске (EncryptionConfiguration или средства облака);
  • RBAC: читать Secret может только сервисный аккаунт приложения;
  • в Git — только зашифрованные (Sealed Secrets, SOPS) или ссылки на внешнее хранилище (External Secrets Operator + Vault или облачный менеджер секретов);
  • ротация и короткоживущие учётные данные (динамические секреты Vault).

Обновление конфигурации. Deployment не замечает изменения ConfigMap. Варианты: аннотация с хешем конфигурации в шаблоне пода (Helm checksum/config), перезапуск kubectl rollout restart, перечитывание файла приложением.

Что хотят услышать

  • ConfigMap против Secret и способы подключения.
  • Base64 — не шифрование, способы защиты.
  • Обновление конфигурации без ручных перезапусков.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Secret в Kubernetes по умолчанию зашифрован в etcd, поэтому дополнительная защита не нужна
  • ✗Секреты можно хранить в Git в открытом виде
  • ✓ConfigMap — настройки, Secret — секреты; Secret лишь в base64, нужно шифрование etcd
  • ✗ConfigMap подключается только как переменные окружения

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования