Конфигурация и секреты — Примеры
Пример 1 — Настройка, требующая перезапуска
Service читает свой эндпоинт один раз при старте, потому что значение приходит как переменная среды. Поэтому выпуск нового эндпоинта означает новый pod. Измените способ доставки значения так, чтобы приложение могло перезагрузить его, и скажите, что после этого должно делать само приложение.
spec:
containers:
- name: api
envFrom:
- configMapRef:
name: api-config
Решение
spec:
containers:
- name: api
volumeMounts:
- name: config
mountPath: /etc/api
volumes:
- name: config
configMap:
name: api-config
config map -> примонтированный файл -> обновляется на месте -> приложение должно следить и перезагружать
config map -> значение среды -> фиксировано при старте -> нужен перезапуск
Примонтированный файл обновляется на месте, тогда как значение среды фиксировано на всё время жизни контейнера, поэтому два способа доставки и решают, является ли изменение конфигурации развёртыванием. Обычная ошибка — примонтировать файл и решить, что процесс это заметит: ничто не перезагружает вашу конфигурацию за вас, поэтому приложение должно следить за файлом, либо перезапуск нужно принять и просмотреть как релиз.
Пример 2 — Пароль, вписанный в манифест
Deployment несёт пароль базы данных прямо в себе, и тот же файл коммитят в репозиторий рядом. Перепишите объявление так, чтобы значение приходило из кластера, и скажите, что должно произойти с закоммиченными учётными данными.
spec:
containers:
- name: api
env:
- name: DB_PASSWORD
value: <вписано в файл вручную>
Решение
spec:
containers:
- name: api
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
Ключ теперь называет объект секрета в кластере, доступ к которому выдаётся сам по себе и читается во время выполнения, поэтому один и тот же образ работает в любой среде, и никакие учётные данные не лежат в репозитории или в слое образа. Закоммиченное значение нужно ротировать, а не просто удалить, потому что секрет в истории — это утёкший секрет; кодирование тоже не шифрование, и прочитать объект достаточно, поэтому доступ к нему надо ограничивать осознанно.
Подставьте свои имена секретов и детали развёртывания там, где эти наброски используют заполнители.