Incident Library

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 에 대응자가 쿠버네티스 쪽 문제로 보고 확인에 들어갔다.

증상 오류율 상승TLS 인증서 오류컨트롤 플레인 지연

원인

촉발
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)" 알림이 온콜 담당자를 호출해 알아챘다. 두 사람이 호출을 받았다.

조치

후속 조치

교훈

문제를 일으킨 변경을 낸 사람이 대응자 가운데 있어 원인을 빨리 찾았다. 근본 원인은 CI 에서 보였어야 했다. 그러나 변경은 hieradata 저장소에서 했고 원인은 deployment-charts 저장소 쪽에 있어, 변경한 저장소의 CI 에서는 보이지 않았다. 당시에는 트래픽의 1% 만 쿠버네티스로 가서 피해가 작았다. 오류의 양이 적어 문제를 쿠버네티스 쪽으로 좁히는 데 시간이 걸렸다. 보고서는 쿠버네티스를 서비스 풀에서 더 일찍 뺐어야 했는지를 묻는다.

출처

참고 문서

관련 사례

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

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

AI 도구와 스크립트용

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