CertificateExpiresIn7Days / CertificateExpiresIn3Days
Что означает алерт
| Алерт | Условие | Severity |
|---|---|---|
CertificateExpiresIn7Days |
до истечения сертификата от 3 до 7 дней | warning |
CertificateExpiresIn3Days |
до истечения меньше 3 дней, включая уже истёкшие | critical |
cert-manager начинает перевыпуск за 15 или 30 дней до истечения (см. раздел «Устройство» в общем документе). Если до истечения осталось 7 дней, перевыпуск уже неделю не проходит. После истечения сервис отдаёт клиентам ошибку TLS.
Лейблы алерта: cluster, exported_namespace (namespace сертификата), name (имя Certificate), issuer_name.
Сертификаты, которые ни разу не выпускались, этим алертом не отслеживаются: для них срабатывает CertificateNotReady.
Диагностика (по шагам)
-
Открыть дашборд
Kubernetes / Cert-Manager, выбрать кластер. В таблице «Все сертификаты» найти сертификат: значение «Перевыпуск через» меньше нуля подтверждает, что перевыпуск должен был начаться и не завершился. -
Проверить цепочку выпуска:
kubectl --context <ctx> -n <ns> get certificate,certificaterequest,order,challenge | grep <cert>
kubectl --context <ctx> -n <ns> describe certificate <cert>
- По состоянию определить причину:
| Состояние | Раздел общего документа |
|---|---|
solver-под в ImagePullBackOff / ErrImagePull |
1. Solver-под не скачал образ |
solver-под в Running, Challenge pending с кодом 503 / 404 |
2. Шлюз не доводит запрос до solver |
Challenge pending с context deadline exceeded |
3. Домен не указывает на шлюз |
429 rateLimited |
4. Ограничения Let's Encrypt |
IncorrectCertificate у Certificate |
6. Два Certificate на один Secret |
Order и Challenge отсутствуют, у Certificate Issuing=False с временем следующей попытки |
cert-manager ждёт паузу после неудачи, см. «Принудительный запуск выпуска» |
Разделы: cert-manager и ACME: диагностика и типовые проблемы.
Как починить
- Устранить причину по разделу общего документа.
- Запустить выпуск:
cmctl renew <cert> -n <ns> --context <ctx>. - Проверить, что появился новый Secret и срок действия обновился:
kubectl --context <ctx> -n <ns> get certificate <cert> -o jsonpath='{.status.notAfter}{"\n"}'
Если до истечения меньше суток и выпуск не удаётся восстановить, согласовать с владельцем сервиса временную меру. Сертификат из другого источника не должен храниться в Secret, которым управляет cert-manager: cert-manager его перезапишет.
Критерий закрытия
- У Certificate
Ready=True. notAfterсдвинулся на новый срок (для Let's Encrypt около 90 дней от момента выпуска).- Алерт перешёл в
inactive.