{"id":"IL-0243","org":"Google Cloud","date":"2021-11-16","docs":[],"title":{"en":"Google's global External Proxy Load Balancing returned 404 errors for most HTTP/S endpoints for 33 minutes","ko":"Google External Proxy Load Balancing 뒤의 HTTP/S 엔드포인트가 전 세계에서 Google 404 오류를 냈다"},"domain":["gcp","networking"],"impact":{"scope":"HTTP/S endpoints behind Google External Proxy Load Balancing returned 404 errors, including Cloud Run, App Engine, App Engine Flex, Cloud Functions, Apigee and Firebase behind GCLB; load balancer configuration changes did not take effect until 11:28 PT","users":"unknown","region":"Global; the preliminary report lists us-central, europe-west1 and global"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://status.cloud.google.com/incidents/6PM5mNd43NbMqjCZ5REh","kind":"official-status","archived":null}],"summary":{"en":"A configuration pipeline carries customer configuration rules to Google External Proxy Load Balancing (GCLB). A bug added to it six months earlier allowed a race condition that, in very rare cases, could corrupt a configuration file near the end of the pipeline, past its validation checks. A Google engineer found the bug on 12 November, and Google declared an internal high-priority incident. Google froze part of the configuration system to make the race even less likely and, since the race had existed for months and Black Friday and Cyber Monday were close, chose a controlled rollout of fixes over a same-day emergency patch. Patch A closed the race; patch B added input validation to the binary that receives the configuration. Both were verified by 13 November and began rolling out gradually on 15 November, and patch B finished that evening.\n\nOn 16 November at 09:35 PT, with patch A within 30 minutes of finishing, the race occurred in an unpatched cluster. The corruption took a form different from the input errors seen in testing, so patch B did not reject it, and GCLB endpoints served 404 errors globally. Automated alerting notified engineers at 09:50 PT, together with customer support requests, and a rollback to the last known good configuration completed at 10:08 PT and ended the 404 errors. To avoid a repeat, Google suspended customer configuration changes from 10:04 PT, validated the fix, added proctoring and monitoring, and resumed configuration pushes at 11:28 PT, for a total impact of 1 hour and 53 minutes.","ko":"고객 설정 규칙을 GCLB 로 전파하는 설정 파이프라인에 6개월 전 들어간 결함이 있었다. 이 결함은 데이터에 접근하는 시점에 따라 동작이 달라지는 경쟁 상태를 만들었다. 이 경쟁 상태 때문에 아주 드물게 손상된 설정 파일이 GCLB 로 나갔다. 파이프라인에는 손상된 설정을 막는 검증이 많았지만, 이 경쟁 상태는 파이프라인 끝 무렵에 파일을 망가뜨릴 수 있었다. 11월 12일 Google 엔지니어가 이 결함을 찾았고, Google 은 우선순위가 높은 내부 장애를 선언했다. 팀은 설정 시스템 일부를 동결해 경쟁 상태가 일어날 가능성을 더 낮췄다. 결함이 이미 몇 달 동안 있었고 Black Friday/Cyber Monday 가 가까웠으므로, 당일 긴급 패치 대신 단계를 밟아 통제하며 배포하는 쪽을 택했다. 팀은 두 패치를 만들어 11월 13일까지 검증했다. 패치 A 는 경쟁 상태 자체를 없애고, 패치 B 는 설정을 받는 바이너리에 입력 검증을 더해 손상된 설정을 받지 않게 한다. 11월 15일부터 두 패치를 단계적으로 배포했고 패치 B 는 그날 저녁 배포가 끝났다.\n\n11월 16일 패치 A 배포가 끝나기까지 30분도 남지 않았을 때, 패치되지 않은 클러스터에서 경쟁 상태가 실제로 일어나 09:35 PT 부터 장애가 시작됐다. 실제 경쟁 상태가 만든 설정 오류는 시험에서 본 입력 오류와 모양이 달라, 배포를 마친 패치 B 도 그 설정을 막지 못했다. 엔지니어들은 09:50 PT 에 자동 알림을 받았고 고객 지원 요청도 같은 시각에 들어왔다. 곧바로 마지막으로 정상이던 설정으로 롤백했고, 10:08 PT 에 롤백이 끝나 404 오류가 멈췄다. 재발을 막으려고 10:04 PT 부터 고객이 요청하는 GCLB 설정 변경을 멈췄고, 그동안 수정을 검증하고 감시를 더했다. 11:28 PT 에 고객 설정 배포를 다시 열어 서비스가 정상으로 돌아왔다. 영향은 모두 1시간 53분 이어졌다."},"trigger":{"en":"On 16 November 2021 a race condition in the configuration pipeline occurred in a cluster that patch A had not yet reached, and pushed a corrupted configuration file to GCLB.","ko":"고객 설정 규칙을 GCLB 로 전파하는 설정 파이프라인에 경쟁 상태가 있었다. 이 경쟁 상태를 없애는 패치 A 가 아직 배포되지 않은 클러스터에서 경쟁 상태가 실제로 일어나, 손상된 설정 파일이 GCLB 로 올라갔다."},"severity":"unknown","symptoms":["service-unavailable","high-error-rate"],"timeline":{"detected_after":"15m","resolved_after":"1h 53m"},"date_kind":"incident","detection":{"en":"Automated alerting notified Google engineers at 09:50 PT, at the same time as customer support requests came in.","ko":"09:50 PT 에 자동 알림이 엔지니어들에게 울렸고, 같은 시각 고객 지원 요청도 들어오기 시작했다."},"components":["cloud-load-balancer","serverless-functions"],"root_cause":"software-bug","remediation":[{"text":{"en":"Rolled back to the last known good configuration, which ended the 404 errors","ko":"09:50 PT 부터 마지막으로 정상이던 설정으로 롤백했고, 10:08 PT 에 롤백이 끝나 404 오류가 멈췄다."}},{"text":{"en":"Suspended customer-initiated configuration changes in GCLB","ko":"재발 위험을 피하려고 고객이 요청하는 GCLB 설정 변경을 멈췄다. 이 때문에 10:04 PT 부터 11:28 PT 까지 고객은 로드 밸런싱 설정을 바꿀 수 없었다."}},{"text":{"en":"Validated the fix and added proctoring and monitoring before resuming changes","ko":"변경을 멈춘 동안 재발을 막는 수정을 검증했고, 서비스를 안전하게 다시 열 수 있도록 감독과 모니터링을 더했다."}},{"text":{"en":"Resumed customer configuration pushes at 11:28 PT","ko":"11:28 PT 에 고객 설정 배포를 다시 열었고 서비스가 정상으로 돌아왔다."}}],"action_items":[{"text":{"en":"Add alerting that reports similar issues much faster","ko":"비슷한 문제를 훨씬 빨리 알려 주는 알림을 곧바로 더했다."}},{"text":{"en":"Add stronger automated correctness checks on configurations before they are applied","ko":"설정을 적용하기 전에 설정이 올바른지 자동으로 검사하는 안전장치를 강화한다."}},{"text":{"en":"Speed up planned architectural changes that improve how such issues are isolated and resolved","ko":"이런 문제를 격리하고 해결하는 방식을 개선하려고 이미 계획해 둔 아키텍처 변경을 앞당긴다."}}],"contributing":["known-bug-unpatched","blast-radius-too-wide"],"recurrence_of":null,"symptoms_text":{"en":"From 09:35 to 10:08 PT on 16 November 2021, most endpoints served by Google's global External Proxy Load Balancing (GCLB) returned Google 404 errors to HTTP/S requests. For about another 1 hour and 20 minutes customers could not change their load balancing configuration.\n\nServices behind GCLB lost traffic as well. Customers using serverless network endpoint groups on GCLB in front of Cloud Run, App Engine, App Engine Flex or Cloud Functions, and customers of Apigee and Firebase, got 404 errors. The preliminary report lists a 25% drop in Cloud Run traffic in us-central1, an 80% drop in App Engine traffic in us-central and europe-west1, failed App Engine Flex deployments and 404 errors for Apigee runtime requests.\n\nDuring the partial recovery traffic was served again, but changes to External Proxy Load Balancers did not take effect, because Google had suspended customer-initiated configuration changes from 10:04 PT until configuration pushes resumed at 11:28 PT.","ko":"2021년 11월 16일 09:35 PT 부터 Google External Proxy Load Balancing, 줄여서 GCLB 를 쓰는 고객의 HTTP/S 요청이 Google 404 오류를 받았다. 전역 GCLB 로드 밸런서가 서비스하는 엔드포인트 대부분이 웹 페이지 대신 404 오류 페이지를 냈다.\n\nGCLB 를 프런트엔드로 쓰는 다른 서비스도 같은 404 를 냈다. 서버리스 네트워크 엔드포인트 그룹으로 Cloud Run, App Engine, App Engine Flex, Cloud Functions 를 연결한 고객과 Apigee, Firebase 고객이 서비스에 접근할 때 404 오류를 받았다. Apigee 는 런타임 요청이 404 를 받았고, App Engine Flex 는 고객 배포도 실패했다.\n\n예비 보고서에 따르면 Cloud Run 은 us-central1 에서 트래픽이 25% 줄었고, App Engine 은 us-central 과 europe-west1 에서 트래픽이 80% 줄었다.\n\n10:08 PT 무렵 404 오류는 멈췄지만, 그 뒤 11:28 PT 까지는 External Proxy Load Balancer 의 설정을 바꿔도 반영되지 않았다. 트래픽은 흘렀지만 고객은 로드 밸런서 설정을 바꿀 수 없었고, 이 상태가 1시간 20분 더 이어졌다."},"updated_at":"2026-11-14T12:33:49.132058Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0243","org_slug":"google-cloud"}