ТЕХНОЛОГИИ

Secret обновился, доступ всё ещё старый: ротация файла и перечитывание

В этом материале
ГЛАВНОЕ ЗА МИНУТУ

Ротация Secret и применение credentials приложением — разные события. Kubernetes обновляет projected Secret files с eventual consistency, но subPath исключает обычные обновления. Программа, читающая файл один раз, может продолжать использовать старое значение даже после успешной projection.

Ротация Secret и применение credentials приложением — разные события. Kubernetes обновляет projected Secret files с eventual consistency, но subPath исключает обычные обновления. Программа, читающая файл один раз, может продолжать использовать старое значение даже после успешной projection.

Найдите реальный источник credentials

Сохраните Secret reference, namespace, volumeMount и способ чтения приложения. Отдельно проверьте env injection: изменение объекта не заменяет значение окружения уже запущенного процесса. Для расследования нужны версии, имена и безопасные маркеры, а не полные секреты. Не выводите содержимое Secret, env dump или authorization header в журнал. Также определите upstream service, который принимает credentials, и его правила overlap: прекращение старого доступа может происходить независимо от обновления Kubernetes объекта.

Официальный источник 1.

Проверьте projection boundary

Secret volume обновляется по механизму kubelet watch/cache/sync, поэтому API update и появление файла не обязаны совпасть по времени. Для subPath mount автоматическая projection не обновляется. Сравнивайте наличие новой версии без публикации значения, используя предусмотренный безопасный признак. Затем определите, следит ли приложение за изменением файла или сохраняет прочитанный credential в памяти. Наблюдатель одного inode может отличаться от повторного открытия пути при обновлении projection; используйте documented reload pattern клиента.

Официальный источник 2.

Разберите двухэтапную ротацию

В учебном сценарии принимающий сервис временно поддерживает старый и новый credential. Secret обновляется, приложение перечитывает файл, тест подтверждает новый доступ, после чего старый credential отзывается согласно правилам системы. Такая последовательность возможна только при реальной поддержке overlap у получателя. Статья не приписывает её каждому сервису. Если overlap отсутствует, нужен иной согласованный переход с известным перерывом, а не обещание бесшовной ротации только средствами Kubernetes.

СобытиеБезопасное подтверждение
Secret изменёнВерсия объекта и время
Projection обновленаПроверенный несекретный marker
Клиент перечиталСобытие reload или новый процесс
Новый доступ принятРезультат контрольной операции

Выберите поддерживаемое применение

Если клиент умеет reload credentials, проверьте его поведение и ошибки. Если читает только при старте, используйте управляемую замену Pod. Убедитесь, что rollout не требует отсутствующей запасной GPU-ёмкости. Перед отзывом старого credential проверьте все нужные реплики, а не единственный успешный запрос. Не копируйте новый Secret в image для удобства: это расширяет область хранения и связывает sensitive data с lifecycle артефакта, который может распространяться независимо.

Проверьте отзыв и остатки

После перехода подтвердите ожидаемый отказ старого доступа на тестовом пути и работу нового. Проверьте, что логи не содержат values и что прежние временные файлы удаляются по предусмотренной процедуре. Артефакт связывает object version, projection, application reload и upstream acceptance. Это точнее, чем одна отметка «Secret обновлён». Повторяйте проверку после изменения mount или клиентской библиотеки: механизм чтения может измениться без изменения имени Kubernetes Secret.

Связанные разборы: cloud gpu account team key rotation; hardware security.

← Все материалы