HashiCorp Vault
Vault в Kubernetes: auto-unseal, Raft, ACL-политики, Vault Secrets Operator и почему запечатанный Vault ломает всё ниже по цепочке.
8 статей
- Боевой сертификат истёк, и никто не заметил: внешний прокси прикрыл аварию собойВсе публичные хосты отдавали 200, пока кластер отдавал просроченный wildcard. Прокси со своей TLS-терминацией спрятал аварию; настоящая находка — отсутствие алерта на истечение.
- Звёздочка в середине пути Vault — не wildcardПротухший токен уронил оператор секретов. Его перевыпуск вскрыл более старый баг: 27 политик Vault со * в середине пути молча запрещали то, что объявляли, и прятали избыточные права.
- Алерты, которые не могут сработать: слепой ServiceMonitor и мёртвый канал доставкиПир Vault 32 часа был sealed, а секреты неделю не синхронизировались — при алерте VaultSealed в репозитории и здоровом Alertmanager. Инцидент спрятали два независимых сбоя.
- Перевод Vault с Shamir на transit auto-unseal и четыре ловушки по дорогеКаждый рестарт пода Vault заканчивался запечатанным хранилищем и замороженной синхронизацией секретов. Как мы добавили transit-провайдер, мигрировали raft-кластер из трёх нод и на чём споткнулись.
- Vault запечатывался сам. Причиной была 15-минутная заморозка VM ниже кластераЧетыре seal'а Vault за три недели, каждый разбирали как отдельный инцидент. Анализ пауз в journald показал, что гипервизор замораживает VM во время бэкапа, а Longhorn превращает это в каскад.
- Vault Secrets Operator замолчал после seal — и рестарт его не разбудил38 из 43 VaultStaticSecret два дня висели с замёрзшей ошибкой. Unseal Vault и рестарт оператора ничего не дали; помогло изменение одного поля в spec.
- Петля логина в WordPress, которая случалась только иногдаwp-admin выкидывал обратно на страницу логина с reauth=1, но не всегда. Причина — случайные auth-соли, сгенерированные в каждом поде за балансировщиком без sticky-сессий.
- «Vault сам себя запечатывает» — нет, он просто никогда не распечатываетсяПод Vault днями висел в Ready 0/1, пока кворум raft тихо держался на двух пирах. Никто его не запечатывал: Shamir без auto-unseal оставляет запечатанным каждый рестарт.