Конфигурация приложения в Kubernetes
Вопрос
Как организуешь конфигурацию и секреты приложения в Kubernetes для трёх окружений?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Один образ для всех окружений, различия только в конфигурации (12 factor)
Несекретное в ConfigMap, секреты в Secret из внешнего хранилища, не в git
Значения по окружениям через Helm values или kustomize overlays
Переменные для простых настроек, файлы для сложных; понимать, что env не обновляется без рестарта
Автоматический rollout при смене конфига: checksum-аннотация или неизменяемые ConfigMap с версией в имени
RBAC на секреты, шифрование etcd, ротация секретов
Что могут спросить следом
- Как ротировать пароль базы без простоя?
- Что лучше: переменные или файлы?
Разбор
Принцип: один образ на все окружения, отличается только конфигурация. Несекретные настройки кладу в ConfigMap, секреты в Secret, но сами значения секретов живут во внешнем хранилище, Vault или облачном менеджере, и попадают в кластер через External Secrets Operator. Различия между окружениями описываю в Helm values или kustomize overlays, всё это в git. Простые настройки передаю переменными окружения, сложные конфиги и секреты файлами: файлы обновляются без пересоздания пода и не утекают в дампы окружения. Чтобы изменение конфигурации гарантированно применялось, добавляю хеш конфига в аннотацию шаблона пода, тогда Deployment сделает rolling update. На уровне кластера: RBAC, при котором доступ к секретам есть только у тех, кому нужно, шифрование секретов в etcd, разделение по namespace. И закладываю ротацию: пароль базы меняется так, что старый и новый какое-то время действуют оба, приложение переходит на новый, затем старый отзывается.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.