On cert-manager v1.21.2, a renewal-blocked Certificate kept Ready=True ("Certificate is up to date and has not expired") past notAfter through our 30-minute window, until a restart reconciled it.
When It Runs — Run Report #RR10 · Testing what infrastructure actually does.
Provider · Component: cert-manager · the Certificate
Readycondition (readiness controller) afterstatus.notAfterhas passed, when renewal is blocked
Versions tested: measured — cert-manager v1.21.2 (the latest release as of 2026-09-11; v1.21.3, released on 2026-10-23, was not measured; single version). reported — v1.18.2 (issue #7895; a report-layer detail, not measured here). source-read — the v1.21.2 tag.
Config profile: a single-nodekindcluster (nodekindest/node:v1.33.4, digest-pinned) on a dedicated test environment; a SelfSignedIssuer→ aCertificate(duration: 1h,renewBefore: 55m, RSA-2048); renewal blocked by deleting the Issuer after issuance (a block that generates no further events); 30-second polling; an observation window of ≥30 minutes pastnotAfter; then a controller restart.
Verified on: 2026-10-23 (desk sources re-checked; PR #8529 open and unmerged, and v1.21.3 the latest release) · lab measured 2026-09-28 on v1.21.2.
Affects: cert-manager v1.21.2Certificates whose renewal is blocked and whose state produces no further change events on the Certificate, its Secret, or its CertificateRequest (measured here: the Issuer was deleted; reported elsewhere: e.g. an ACME DNS01 failure): afterstatus.notAfterpasses,Ready=Trueand the message "Certificate is up to date and has not expired" can remain until the next reconcile (an event, the informer resync, or a restart). The length of that window is only what we measured, within this condition.
TL;DR: On cert-manager v1.21.2, a renewal-blocked 1-hourCertificatestayedREADY=Truewith "Certificate is up to date and has not expired" for the whole 30-minute window we watched after the certificate in its Secret had actually expired, and changed toReady=False("Certificate expired on …") only after the controller was restarted, about 34 minutes past expiry — while the API definesReadyto mean, among other things, "a certificate that has not expired."
Full report: https://whenitruns.substack.com/p/when-cert-managers-ready-condition
Reproduction repo: https://github.com/whenitruns/when-cert-managers-ready-condition-runs-past-expiry-until-a-reconcile
Top comments (0)