사례2건
2건 중 1~2번째
IL-0284Workers KV 의 저장소 인프라가 멈춰 KV 에 기대는 Access, WARP, Gateway, 대시보드 같은 Cloudflare 서비스 여럿이 2시간 28분 동안 전 세계에서 실패했다Cloudflare2025- 증상
17:52 UTC 에 WARP 팀이 새 기기 등록이 실패하는 것을 보고 장애를 선언했다. 18:05 에 Cloudflare Access 팀이 오류율 급증 알림을 받았고, 여러 서비스의 SLO 가 목표 아래로 떨어져 팀마다 알림이 울렸다.
- 촉발
Workers KV 의 중앙 저장소 일부를 받치던 서드파티 클라우드 공급자에 장애가 났고, KV 가 원본 저장소에서 값을 읽고 쓰지 못하게 됐다.
- 원인
- 구성 요소
- 기여 요인
- 감지
17:52 UTC 에 Cloudflare WARP 팀이 새 기기 등록이 실패하는 것을 보고 조사를 시작해 장애를 선언했다. 18:05 에 Access 팀이 오류율 급증 알림을 받았고, 여러 서비스의 SLO 가 목표 아래로 떨어져 팀마다 알림이 울렸다. 18:06 에 Workers KV 를 쓸 수 없게 된 것이 공통 원인임을 찾아 서비스별 장애를 하나로 합쳤다.
- 조치
- Challenges 와 Turnstile 의 siteverify 호출을 끄는 킬 스위치를 켜 방문자가 막히지 않게 했다. 킬 스위치를 켜 둔 동안에는 siteverify API 가 유효한 토큰 하나를 여러 번 받아들일 수 있었다. 봇 탐지는 영향을 받지 않았다.
- 19:09 UTC 에 Zero Trust Gateway 가 신원이나 Device Posture 상태를 참조하는 규칙을 단계적으로 약하게 만들어 Workers KV 의존을 덜었다.
- 19:32 UTC 에 Access 와 Device Posture 가 서드파티 서비스가 돌아올 때까지 신원과 Device Posture 요청을 강제로 버려 Workers KV 의 부하를 줄였다.
- 저장소가 계속 멈출 때를 대비해, 다른 저장소를 쓰는 Workers KV 릴리스를 배포하고 핵심 서비스가 설정 데이터를 그 저장소에 쓰게 할 방법을 계속 준비했다.
- 20:25 UTC 에 서드파티 서비스가 회복되자 Access 와 Device Posture 가 Workers KV 호출을 되살렸다.
- 후속 조치
- Cloudflare 가 소유하지 않은 저장소 인프라 하나에만 기대는 구조를 없앤다.
- Access, Gateway, WARP 같은 핵심 서비스를 복구하는 능력을 높인다.
- Workers KV 저장소 인프라의 이중화를 강화해 어느 한 공급자에도 기대지 않게 하는 작업을 앞당긴다. 장애 중에 이미 핵심 KV 네임스페이스를 자체 인프라로 옮기고 백필하는 일을 시작했다.
- 이번 장애로 영향을 받은 제품마다 피해 범위를 줄이는 단기 조치를 적용해, 서드파티 의존을 포함한 어떤 단일 장애 지점이 멈춰도 제품이 버티게 한다.
- 저장소 인프라 장애 때 네임스페이스를 차례로 다시 켜는 도구를 만들어, 캐시를 다시 채우는 동안 Access 와 WARP 같은 핵심 의존 서비스가 자체 인프라에 서비스 거부를 일으키지 않고 올라오게 한다.
- 교훈
서드파티 공급자의 장애가 직접 원인이었지만 Cloudflare 는 어떤 의존을 고르고 그 의존을 감안해 시스템을 어떻게 설계하는지가 자기 책임이라고 밝혔다. 많은 서비스가 각자 저장소를 만들지 않고 Workers KV 에 기대는 것은 평소에는 서비스를 튼튼하게 하지만, 이번에는 KV 의 실패가 연쇄로 번져 피해 범위를 크게 넓혔다.
- 증상
설정 배포 6분 뒤 Pingdom 이 DevOps 당번 엔지니어에게 알림을 보냈고, xPro 운영 사이트는 응답하지 않았다. Heroku 로그에는 데이터베이스 로그인 실패가 찍혀 있었다.
- 촉발
오후 3시 45분에 Salt 로 xPro 운영 Heroku 스택에 설정 변경을 배포했다. 이때 Salt 가 본 Vault 리스가 곧 만료되고 갱신할 수 없는 상태여서 Vault 가 새 데이터베이스 자격 증명을 만들었고, 새 자격 증명은 RDS 의 새 기본값인 SCRAM 방식으로 만들어졌다.
- 원인
- 구성 요소
- 기여 요인
- 감지
설정 배포 6분 뒤인 오후 3시 51분에 Pingdom 이 DevOps 당번 엔지니어에게 알림을 보냈다. 당번 엔지니어가 알림을 받고 사이트가 응답하지 않는 것을 확인했다.
- 조치
- 새 데이터베이스 파라미터 그룹을 만들어 운영 중인 데이터베이스에 적용했다. 파라미터 그룹은 xPro RDS 가 쓰던 AWS 기본 파라미터 그룹을 복제한 뒤 필요한 값을 고친 것이었다.
- 데이터베이스가 RDS 콘솔에서 Available 로 보인 뒤 캐시된 자격 증명을 다시 지우고 Salt 로 Heroku 설정을 다시 적용했다. 그러자 사이트와 데이터베이스 로그인이 돌아왔다.
- 후속 조치
- xPro 의 자원 관리를 Pulumi 로 옮긴다. 특히 RDS 인스턴스와 그에 딸린 자원을 코드로 관리하고, AWS 가 주는 기본 파라미터 그룹을 쓰지 않는다.
- 교훈
복구를 늦춘 핵심 요인은 이 스택의 설정이 거의 코드로 관리되지 않았다는 점이었다. RDS 인스턴스가 수정할 수 없는 AWS 기본 파라미터 그룹을 쓰고 있어서, 기본 정의를 복제해 고치고 인스턴스에 새로 연결해야 했다. 이 일은 이미 연결된 파라미터 그룹의 값을 바꾸는 것보다 오래 걸렸다. 팀은 자원을 Pulumi 로 관리했다면 기본 파라미터 그룹을 쓰지 않으므로 이 지연이 없었을 것이라고 정리했다.
이 2건에서 가장 많이 나오는 구성 요소: 데이터베이스, 시크릿 저장소. kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이런 틈을 점검합니다. 점검 항목의 근거는 이 라이브러리와 같은 공개 보고서입니다.
원인별2
클라우드 제공자 장애1건
- 구성 요소