kube/certs: widen runCertLoop per-call timeout to 30m (#20289)

All issuances serialise through a single mutex in tailscaled. The old
300s timeout fired while a predecessor was legitimately mid-ACME,
causing the queued loop to advance retryCount on a non-failure. 30m
covers ~15 queued flows and works as a wedge detector against true
hangs.

Updates #20288
Updates #42164

Signed-off-by: chaosinthecrd <tom@tmlabs.co.uk>
This commit is contained in:
Tom Meadows
2026-06-30 13:39:50 +01:00
committed by GitHub
parent 477d5a43df
commit ec6e598550
+4 -5
View File
@@ -136,11 +136,10 @@ func (cm *CertManager) runCertLoop(ctx context.Context, domain string) {
// node's HTTPS endpoint share the same state/renewal lock mechanism,
// so we should not run into redundant issuances during concurrent
// renewal checks.
// An issuance holds a shared lock, so we need to avoid a situation
// where other services cannot issue certs because a single one is
// holding the lock.
ctxT, cancel := context.WithTimeout(ctx, time.Second*300)
//
// Long enough to cover queue contention behind tailscaled's
// shared cert mutex; if it fires, something is wedged.
ctxT, cancel := context.WithTimeout(ctx, 30*time.Minute)
_, _, err := cm.lc.CertPair(ctxT, domain)
cancel()
if err != nil {