Incident Library

IL-0512 MIT Open Learning · 2026-06-03kubernetesnetworkingaws

xPRO 의 쿠버네티스 APISIX 오리진 인증서가 갱신되지 못하고 만료되어 xpro.mit.edu 가 한 시간 동안 503 을 냈다

MIT Open Learning 의 OpenEdX 가 아닌 xPRO 애플리케이션은 공개 프런트엔드 도메인 xpro.mit.edu 와 백엔드 도메인 xpro-web.odl.mit.edu 를 따로 쓴다. xpro-web.odl.mit.edu 는 쿠버네티스 APISIX 백엔드 오리진이고, 그 인증서는 cert-manager 가 Route 53 의 DNS-01 검증으로 Let's Encrypt 에서 받는다. 그런데 Pulumi 코드가 Fastly TLS 구독에 Fastly 서비스의 도메인 전부를 넘겼고, Fastly 는 두 도메인 모두의 DNS 검증 레코드를 만들었다. 그 가운데 _acme-challenge.xpro-web.odl.mit.edu CNAME 이 같은 이름에 cert-manager 가 만들어야 하는 DNS-01 TXT 레코드를 막았다.

2026-05-04 에 시작된 갱신은 끝나지 못했고, ACME Order 는 오래되어 정리됐으며, 오리진 인증서는 2026-06-03 오후 3시 29분 EDT 에 만료됐다. 9분 뒤 CMS 와 본 사이트의 503 알림이 울렸다. Fastly 가 만료된 인증서 때문에 오리진에 연결하지 못해 고객이 xPRO 운영 사이트에 제대로 접속하지 못했다. 장애 등급은 SEV1 이었다. 오후 4시 8분 EDT 에 Rootly 장애가 열렸고, 오후 4시 16분에 재시작한 cert-manager 는 Let's Encrypt 에서 404: No order for ID 507326254665 를 받고 발급에 실패했다.

엔지니어가 오후 4시 27분 EDT 쯤 만료된 인증서와 오래된 ACME Order 를 찾았고, 오후 4시 38분 EDT 에 관련 cert-manager 인증서 자원을 손으로 다시 만들어 서비스를 되살렸다. 장애가 끝난 뒤의 검토에서 Fastly TLS 구독 설정이 결함으로 밝혀졌다. PR mitodl/ol-infrastructure#4713 이 Fastly TLS 구독의 도메인을 domains=[frontend_domain] 으로 바꿔 Fastly 는 xpro.mit.edu 의 공개 엣지 인증서만 관리하고 오리진 인증서는 cert-manager 가 맡게 했다. edxapp 과 xpro-openedx 는 바꿀 필요가 없었다.

심각도
sev1
영향 범위
The public xPRO site https://xpro.mit.edu and the xPRO production CMS returned 503 errors
영향 사용자
xPRO customers could not reliably access the production site
지역
–
감지까지
9m
복구까지
1h 9m

증상

2026-06-03 오후 3시 38분 EDT 에 xPRO 운영 CMS 와 xPRO 본 애플리케이션이 503 을 낸다는 알림이 함께 울렸다. 공개 사이트 https://xpro.mit.edu 에 고객이 제대로 접속하지 못했다.

Fastly 는 쿠버네티스 APISIX 백엔드 오리진인 xpro-web.odl.mit.edu 에 제대로 연결하지 못했다. 이 오리진의 인증서가 오후 3시 29분 EDT, 곧 19:29 UTC 에 만료됐기 때문이다.

인증서 갱신은 한 달 전부터 실패하고 있었다. 2026-05-04 에 cert-manager 가 30일 갱신 구간에 들어가 xpro-cert-2 를 만들었고, 여기에는 새 CertificateRequest, Order, DNS-01 Challenge 가 들어 있었다. 그러나 Challenge 가 끝나지 않았고 Let's Encrypt 는 ACME 인가를 비활성화했다. 5월 말과 6월 초 사이에 Challenge 는 만료된 채 남았고 Let's Encrypt 의 Order 는 오래되어 정리됐다.

장애 중 오후 4시 16분 EDT 에 cert-manager 파드가 재시작하며 오래된 Order 를 다시 평가했다. 2분 뒤 cert-manager 가 Let's Encrypt 에 물었다가 404: No order for ID 507326254665 를 받았고, 발급은 실패로 표시됐다.

오후 4시 27분 EDT 쯤 엔지니어가 쿠버네티스와 cert-manager 상태를 살펴 xpro-cert 가 만료됐고 ACME Order 가 오래되어 갱신을 끝낼 수 없다는 것을 찾았다. 이때는 cert-manager 의 ACME 갱신 실패로만 이해했고, Fastly 가 _acme-challenge.xpro-web.odl.mit.edu 레코드를 차지했다는 원인은 장애가 끝난 뒤의 검토에서 찾았다.

증상 서비스 중단TLS 인증서 오류

원인

촉발
cert-manager 가 2026-05-04 에 xpro-web.odl.mit.edu 인증서의 갱신 구간에 들어가 DNS-01 검증을 시작했다. 이 검증이 Fastly 가 만든 _acme-challenge.xpro-web.odl.mit.edu CNAME 과 부딪혀 끝나지 못했고, 기존 오리진 인증서가 2026-06-03 오후 3시 29분 EDT 에 만료됐다.

감지

오후 3시 38분 EDT 에 xPRO 운영 CMS 와 xPRO 본 사이트가 503 을 낸다는 알림이 울렸다. 인증서가 만료된 지 9분 뒤였다.

조치

후속 조치

교훈

이 장애는 처음에 cert-manager 의 ACME 갱신 실패로 이해됐다. 그 이해는 맞았지만 모자랐고, 빠진 진단은 Fastly 가 cert-manager 의 몫인 백엔드 오리진 도메인의 검증까지 관리하도록 설정돼 있었다는 점이었다. 갱신 실패를 일찍 잡지 못한 것은 cert-manager 가 관리하는 백엔드 오리진 도메인이 Fastly TLS 구독에 들어가면 안 된다는 것을 검사하는 장치나 테스트가 없었기 때문이다.

팀은 TLS 인증서와 DNS 검증 레코드를 누가 맡는지 경계를 분명히 정하고 그 경계를 지키는 장치를 둬야 한다고 정리했다. 특히 TLS 자동화를 설정할 때 Fastly 의 공개 프런트엔드 도메인과 쿠버네티스 APISIX 백엔드 오리진 도메인을 바꿔 써도 되는 같은 서비스 도메인으로 다루면 안 된다.

출처

관련 사례

내 클러스터에도 있는지 확인하기

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: cert-manager, CDN 과 엣지 네트워크, DNS 서버와 레코드. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.