IL-0459 Wikimedia Foundation · 2023-08-09kubernetes
쿠버네티스 위 MediaWiki 가 TLS 종료에 엉뚱한 인증서를 써서 약 30분 동안 트래픽 1% 가 오류를 받았다
2023-08-09 09:37 UTC 에 쿠버네티스 전역 기본값을 바꿔, 이 기본값을 따르는 차트가 cert-manager 인증서를 쓰게 하는 변경이 머지됐다. 이 변경은 바로 드러나지 않았고, 11:41 에 MediaWiki 설정 변경을 배포하자 쿠버네티스 위 MediaWiki 배포가 이 기본값을 받아 TLS 종료에 엉뚱한 인증서를 쓰기 시작했다. 11:47 에 mw-api-ext 와 mw-api-int 의 프로브 실패 알림이 온콜 담당자를 호출했다. 쿠버네티스로 가는 트래픽이 전체의 1% 였으므로 피해는 초당 120건 요청의 오류로 그쳤다. 기본값 변경을 낸 사람이 대응자 가운데 있어 11:58 에 원인을 찾고 패치를 준비했으며, 12:08 에 MediaWiki 배포를 다시 시작해 12:16 에 장애가 끝났다. 변경은 hieradata 저장소에서 했다. 원인은 deployment-charts 저장소의 CI 에서 보였어야 했는데, 변경한 저장소의 CI 에서는 보이지 않았다.
- 심각도
- –
- 영향 범위
- MediaWiki web and API availability: about 1% of traffic (120 requests/s) received errors for about 30 minutes
- 영향 사용자
- –
- 지역
- –
- 감지까지
- 6m
- 복구까지
- 35m
증상
MediaWiki 설정 변경을 배포한 11:41 부터 쿠버네티스로 가는 MediaWiki 트래픽이 오류를 받기 시작했다. 11:47 에 mw-api-ext 와 mw-api-int 서비스의 프로브 실패 알림이 온콜 담당자를 호출했다. 전체 트래픽의 1%, 초당 120건의 요청이 약 30분 동안 오류를 받았다.
알림은 "(ProbeDown) firing: (6) Service mw-api-ext:4447 has failed probes (http_mw-api-ext_ip4)" 와 "(ProbeDown) firing: Service mw-api-int:4446 has failed probes (http_mw-api-int_ip4)" 였다. 그보다 1분 앞선 11:46 에는 codfw 의 k8s 클러스터에서 "(KubernetesAPILatency) firing: High Kubernetes API latency (POST pods)" 가 울렸다. ATS 백엔드 오류도 함께 보였다.
12:02 에는 cumin2002 에서 "PROBLEM - Check unit status of httpbb_kubernetes_mw-api-int_hourly on cumin2002 is CRITICAL" 이 울렸다. 배포 중에는 일부 지표를 볼 수 없거나 비정상으로 보였다.
쿠버네티스로 가는 트래픽이 1% 뿐이라 오류의 양이 적었고, 그래서 문제를 쿠버네티스 쪽으로 좁히는 데 시간이 걸렸다. 11:56 에 대응자가 쿠버네티스 쪽 문제로 보고 확인에 들어갔다.
원인
원인 설정 변경
- 촉발
- 09:37 에 쿠버네티스 전역 기본값을 바꾸는 변경이 머지됐다. 이 변경으로 이 기본값을 따르는 차트가 cert-manager 인증서를 쓰게 됐다. 11:41 에 MediaWiki 설정 변경을 배포하면서 쿠버네티스 위 MediaWiki 배포가 이 기본값을 받아 TLS 종료에 엉뚱한 인증서를 쓰게 됐다.
감지
11:47 에 "(ProbeDown) firing: (6) Service mw-api-ext:4447 has failed probes (http_mw-api-ext_ip4)" 와 "(ProbeDown) firing: Service mw-api-int:4446 has failed probes (http_mw-api-int_ip4)" 알림이 온콜 담당자를 호출해 알아챘다. 두 사람이 호출을 받았다.
조치
- 11:58 에 원인을 찾고 패치 https://gerrit.wikimedia.org/r/947331 을 준비했다.
- 12:08 에 MediaWiki 디플로이먼트를 모두 다시 배포하기 시작했고, 12:16 에 장애가 끝났다.
후속 조치
- 배포 절차와 테스트를 더 강화해야 하는지 검토한다. 다음 배포에 뜻밖의 변경이 함께 실리는 문제와 쿠버네티스 카나리 배포도 검토 대상이다.
- 배포 중에 일부 지표를 볼 수 없거나 비정상이 되는 문제를 지표 쪽에서 고칠지, 배포의 영향을 줄일지 검토한다.
교훈
문제를 일으킨 변경을 낸 사람이 대응자 가운데 있어 원인을 빨리 찾았다. 근본 원인은 CI 에서 보였어야 했다. 그러나 변경은 hieradata 저장소에서 했고 원인은 deployment-charts 저장소 쪽에 있어, 변경한 저장소의 CI 에서는 보이지 않았다. 당시에는 트래픽의 1% 만 쿠버네티스로 가서 피해가 작았다. 오류의 양이 적어 문제를 쿠버네티스 쪽으로 좁히는 데 시간이 걸렸다. 보고서는 쿠버네티스를 서비스 풀에서 더 일찍 뺐어야 했는지를 묻는다.
출처
- https://wikitech.wikimedia.org/wiki/Incidents/2023-08-09_mw-on-k8s_outage_due_to_wrong_tls_cert · runbook · 보관본
참고 문서
관련 사례
IL-0512xPRO 의 쿠버네티스 APISIX 오리진 인증서가 갱신되지 못하고 만료되어 xpro.mit.edu 가 한 시간 동안 503 을 냈다MIT Open Learning · 2026 · sev1같은 원인 · 공통 cert-manager
IL-0208GitLab Helm 차트 업그레이드가 Service 와 Deployment 의 포트 이름을 바꿔 GCP 로드 밸런서가 다시 구성되는 동안 GitLab.com 요청이 느려지고 50x 오류가 났다GitLab · 2022같은 원인 · 공통 Helm
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0459
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0459/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.