cert-manager HTTP-01 challenge가 자꾸 timeout 나면 1.17 확인해보세요

한 줄 요약
cert-manager 1.17부터 ACME challenge authorization timeout이 1분 → 2분으로 늘었다. 그동안 가끔씩 사라지던 그 timeout, 1.17 올리면 꽤 줄어든다.
어떤 상황에서 만났나
우리 팀 클러스터 중 하나가 EKS이고, NLB 뒤에 ingress-nginx, 그 뒤에 cert-manager로 Let's Encrypt 인증서를 발급받는 흔한 구성이다. 그런데 한 달에 한두 번 정도 갱신 시점에 이런 로그가 떴다.
Failed to wait for order resource to become ready: order is in "errored" state:
Failed to wait for authorization: context deadline exceeded
DNS 전파 문제도, 방화벽 이슈도 아니고, 그냥 솔버 Pod 띄우고 ACME 서버가 challenge 검증하러 들어올 때까지 시간이 안 맞아서 나는 거였다. 재시도하면 대부분 풀린다.
1.17에서 뭐가 바뀌었나
release notes를 보면 이런 줄이 있다.
Increase the ACME challenge authorization timeout to two minutes to fix timeout errors. (#7337, #7444, #7685)
코드상으로는 challenge controller가 authorization을 polling 하면서 기다리는 시간이 60초 → 120초로 늘어난 것. 한 번에 두 배가 됐다.
이게 작은 변화처럼 보이는데, NLB cold path, ingress controller readiness, ACME 서버 응답 지연 같은 게 겹치면 1분이 빠듯한 경우가 꽤 있다. 2분이면 거의 다 흡수된다.
같이 챙기면 좋은 1.17 변경점
--acme-http01-solver-extra-labels플래그 추가. Helm chart의global.commonLabels가 솔버 Pod까지 안 따라가던 게 고쳐졌다. 라벨 기반 NetworkPolicy 쓰는 팀은 솔버 트래픽 막혀서 challenge가 실패하던 케이스가 있는데, 이걸로 한 번에 해결.- IPv6 endpoint 솔버 동작 수정. dual-stack 클러스터에서만 의미 있음.
renewBeforePercentage동작이 spec에 맞게 정리됨. 이건 무시하고 넘어가면 갱신 타이밍이 미묘하게 바뀔 수 있으니, percentage 쓰던 팀은 한 번 갱신 시점 확인 권장.
업그레이드 팁
1.16 → 1.17은 CRD breaking change가 없다. Helm으로 올리는 거면 평소대로:
helm upgrade cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.17.x \
--set crds.enabled=true
다만 1.16 미만에서 점프하는 경우 CRD가 좀 바뀌었으니 cmctl upgrade migrate-api 한 번 돌려주는 게 안전하다.
마무리
별 거 아닌 한 줄짜리 변경인데 실무에서는 이런 게 알람 노이즈를 크게 줄여준다. 혹시 우리만 HTTP-01 timeout 가끔 보던 게 아니라면 1.17 올려보시길.