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

CertificateNotReady

Что означает алерт

У объекта Certificate условие Ready не равно True дольше 30 минут. Severity: warning.

Возможные состояния:

  • идёт перевыпуск, и он не завершается;
  • сертификат ни разу не выпускался (Secret отсутствует);
  • Secret не соответствует спецификации Certificate (другой домен, другой issuer, выпущен для другого Certificate).

Пока действующий сертификат не истёк, сервис работает. Алерт сообщает о проблеме заранее, до алертов по сроку действия.

Лейблы алерта: cluster, exported_namespace (namespace сертификата), name (имя Certificate), issuer_name.

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

  1. Прочитать причину из условия Ready:
kubectl --context <ctx> -n <ns> get certificate <cert> \
  -o jsonpath='{.status.conditions[?(@.type=="Ready")].reason}{" | "}{.status.conditions[?(@.type=="Ready")].message}{"\n"}'
  1. Выбрать действие по причине:
Reason Значение Действие
DoesNotExist Secret отсутствует, сертификат не выпускался или Secret удалён проверить цепочку выпуска (шаг 3); если домен не используется, удалить Certificate, раздел 7 общего документа
IncorrectCertificate с текстом Secret was issued for "<другой>" два Certificate на один Secret раздел 6 общего документа
IncorrectCertificate с другим текстом спецификация изменилась (домены, issuer), новый сертификат не выпущен проверить цепочку выпуска (шаг 3)
Expired сертификат истёк см. CertificateExpiresIn3Days
InProgress / Issuing выпуск идёт проверить цепочку выпуска (шаг 3)
  1. Проверить цепочку выпуска:
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: диагностика и типовые проблемы.

  1. Если Certificate создан helm-релизом istio-config, проверить, что он ещё нужен: домен должен присутствовать в Gateway или VirtualService того же окружения.
kubectl --context <ctx> -n <ns> get certificate <cert> -o jsonpath='{.metadata.annotations.meta\.helm\.sh/release-name}{"\n"}'

Как починить

По результату диагностики:

  1. Причина в цепочке выпуска: устранить по разделу общего документа, затем cmctl renew <cert> -n <ns> --context <ctx>.
  2. Дублирующий или неиспользуемый Certificate: удалить из values istio-config соответствующего окружения и из кластера.

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

  1. У Certificate Ready=True, либо лишний Certificate удалён из репозитория и из кластера.
  2. Алерт перешёл в inactive.