CertificateNotReady
Что означает алерт
У объекта Certificate условие Ready не равно True дольше 30 минут. Severity: warning.
Возможные состояния:
- идёт перевыпуск, и он не завершается;
- сертификат ни разу не выпускался (Secret отсутствует);
- Secret не соответствует спецификации Certificate (другой домен, другой issuer, выпущен для другого Certificate).
Пока действующий сертификат не истёк, сервис работает. Алерт сообщает о проблеме заранее, до алертов по сроку действия.
Лейблы алерта: cluster, exported_namespace (namespace сертификата), name (имя Certificate), issuer_name.
Диагностика (по шагам)
- Прочитать причину из условия
Ready:
kubectl --context <ctx> -n <ns> get certificate <cert> \
-o jsonpath='{.status.conditions[?(@.type=="Ready")].reason}{" | "}{.status.conditions[?(@.type=="Ready")].message}{"\n"}'
- Выбрать действие по причине:
| Reason | Значение | Действие |
|---|---|---|
DoesNotExist |
Secret отсутствует, сертификат не выпускался или Secret удалён | проверить цепочку выпуска (шаг 3); если домен не используется, удалить Certificate, раздел 7 общего документа |
IncorrectCertificate с текстом Secret was issued for "<другой>" |
два Certificate на один Secret | раздел 6 общего документа |
IncorrectCertificate с другим текстом |
спецификация изменилась (домены, issuer), новый сертификат не выпущен | проверить цепочку выпуска (шаг 3) |
Expired |
сертификат истёк | см. CertificateExpiresIn3Days |
InProgress / Issuing |
выпуск идёт | проверить цепочку выпуска (шаг 3) |
- Проверить цепочку выпуска:
kubectl --context <ctx> -n <ns> get certificaterequest,order,challenge | grep <cert>
kubectl --context <ctx> -n <ns> get pods | grep cm-acme-http-solver
Причины зависания Challenge и solver-пода разобраны в разделах 1–4 общего документа: cert-manager и ACME: диагностика и типовые проблемы.
- Если Certificate создан helm-релизом
istio-config, проверить, что он ещё нужен: домен должен присутствовать в Gateway или VirtualService того же окружения.
kubectl --context <ctx> -n <ns> get certificate <cert> -o jsonpath='{.metadata.annotations.meta\.helm\.sh/release-name}{"\n"}'
Как починить
По результату диагностики:
- Причина в цепочке выпуска: устранить по разделу общего документа, затем
cmctl renew <cert> -n <ns> --context <ctx>. - Дублирующий или неиспользуемый Certificate: удалить из values
istio-configсоответствующего окружения и из кластера.
Критерий закрытия
- У Certificate
Ready=True, либо лишний Certificate удалён из репозитория и из кластера. - Алерт перешёл в
inactive.