Перейти к содержанию

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.

Диагностика (по шагам)

  1. Открыть дашборд Kubernetes / Cert-Manager, выбрать кластер. В таблице «Все сертификаты» найти сертификат: значение «Перевыпуск через» меньше нуля подтверждает, что перевыпуск должен был начаться и не завершился.

  2. Проверить цепочку выпуска:

kubectl --context <ctx> -n <ns> get certificate,certificaterequest,order,challenge | grep <cert>
kubectl --context <ctx> -n <ns> describe certificate <cert>
  1. По состоянию определить причину:
Состояние Раздел общего документа
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: диагностика и типовые проблемы.

Как починить

  1. Устранить причину по разделу общего документа.
  2. Запустить выпуск: cmctl renew <cert> -n <ns> --context <ctx>.
  3. Проверить, что появился новый Secret и срок действия обновился:
kubectl --context <ctx> -n <ns> get certificate <cert> -o jsonpath='{.status.notAfter}{"\n"}'

Если до истечения меньше суток и выпуск не удаётся восстановить, согласовать с владельцем сервиса временную меру. Сертификат из другого источника не должен храниться в Secret, которым управляет cert-manager: cert-manager его перезапишет.

Критерий закрытия

  1. У Certificate Ready=True.
  2. notAfter сдвинулся на новый срок (для Let's Encrypt около 90 дней от момента выпуска).
  3. Алерт перешёл в inactive.