오늘 백본 네트워크의 구성 오류로 인해 Cloudflare 서비스의 가동이 27분 동안 중단됐습니다. Cloudflare 네트워크 전반에서 트래픽이 약 50% 감소했습니다. Cloudflare 백본 네트워크의 구조 상 이러한 가동 중단은 Cloudflare의 전 네트워크에 영향을 주지 않았고 특정 지역에 한정됐습니다.
이러한 가동 중단은, 엔지니어링팀이 백본 중 뉴어크에서 시카고 구간에서 작업 중에, 트래픽 정체를 완화하기 위해 애틀랜타에 있는 라우터의 구성을 업데이트하는 중 발생했습니다. 이 구성에 포함되어 있는 오류로 인해 백본의 모든 트래픽이 애틀랜타로 보내졌습니다. 그 결과, 애틀랜타 라우터에 과다 트래픽이 발생하여 백본에 연결된 Cloudflare 네트워크 센터들이 모두 정지했습니다.
영향을 받은 네트워크 센터는 새너제이, 댈러스, 시애틀, 로스앤젤레스, 시카고, 워싱턴 DC, 리치몬드, 뉴어크, 애틀랜타, 런던, 암스테르담, 프랑크푸르트, 파리, 스톡홀름, 모스크바, 상트페테르부르크, 상파울루, 쿠리치바, 포르투알레그리입니다. 다른 곳은 정상적으로 작동했습니다.
확실한 것은, 이번 사고는 어떠한 유형의 공격이나 보안 사고에 의해 발생한 것이 아닙니다.
이번 가동 중단에 대해 사과드리며, 이러한 사고가 재발하지 않도록 이미 백본 구성을 대폭 변경했다는 것을 알려드립니다.
Cloudflare 백본
Cloudflare는 전 세계 많은 데이터 센터 사이에 _백본_을 운영하고 있습니다. 백본은 데이터 센터 사이에 있는 일련의 프라이빗 라인으로서 Cloudflare는 이를 사용하여 데이터 센터 사이에 더 빠르고 더 신뢰할 수 있는 경로를 구축합니다. Cloudflare는 이러한 경로를 통해 퍼블릭 인터넷을 사용하지 않고 다양한 데이터 센터 사이에 트래픽을 전달할 수 있습니다.
예를 들어, 뉴욕에 있는 웹사이트 원본 서버에 접촉하여 프라이빗 백본을 통해 캘리포니아주 새너제이는 물론 프랑크푸르트나 상파울루까지 요청을 전달합니다. 퍼블릭 인터넷을 피하기 위한 이러한 추가 옵션으로 고품질 서비스가 가능합니다. 프라이빗 네트워크를 사용하여 인터넷 정체 구간을 피할 수 있기 때문입니다. Cloudflare는 백본을 이용함으로써 인터넷 요청과 트래픽을 라우팅하는 장소와 방법에 대해 퍼블릭 인터넷보다 훨씬 강력하게 제어할 수 있습니다.
사고 경과
모든 시간은 UTC입니다.
먼저, 뉴어크와 시카고 사이의 백본 링크에서 문제가 발생하여 애틀랜타와 워싱턴 DC 사이의 백본 트래픽 정체가 발생했습니다.
이 문제에 대응하여 애틀랜타에서 구성을 변경했습니다. 이 변경으로 21시 12분에 가동 중단이 발생했습니다. 가동 중단이 파악된 후, 애틀랜타 라우터를 정지하였으며, 21시 39분에 트래픽이 다시 정상적으로 이동하기 시작했습니다.
얼마 지나지 않아 로그와 메트릭을 처리하는 코어 데이터 센터에서 정체가 발생하여 일부 로그가 손실되었습니다. 이 시간 동안 에지 네트워크는 정상적으로 작동했습니다.
20시 25분: EWR과 ORD 사이의 백본 링크 정지
20시 25분: ATL와 IAD 사이의 백본 속도 저하
21시 12분 ~ 21시 39분: ATL이 백본 트래픽이 집중
21시 39분 ~ 21시 47분: 백본에서 ATL 제거, 서비스 복구됨
21시 47분 ~ 22시 10분: 코어 데이터 센터 정체로 일부 로그 손실, 에지 계속 작동
22시 10분: 로그와 메트릭을 포함한 완전 복구
Cloudflare의 내부 트래픽 관리자 도구가 파악한 영향은 다음과 같습니다. 상단의 빨간색과 주황색 영역은 CPU 사용이 과부하에 이른 애틀랜타를 표시하며, 흰색 영역은 영향을 받은 데이터 센터가 트래픽을 더 이상 처리할 수 없어서 CPU가 거의 0에 이른 곳입니다. 이 부분이 가동 중단 구간 입니다.
영향을 받지 않은 데이터 센터에서는 사고 시간 중 CPU 사용에 변화가 없었습니다. 해당 데이터 센터는 사고 시간 중 그대로 녹색이었다는 사실에서 이를 알 수 있습니다.
사고 내용 및 조치
애틀랜타에 백본 정체가 발생하자 저희 팀은 애틀랜타의 백본 트래픽 일부를 제거하기로 결정했습니다. 하지만 백본에서 애틀랜타 경로를 제거하는 대신, 라우터 설정의 한 줄 변경으로 인해 BGP 경로가 백본으로 누출기 시작했습니다.
{master}[edit]
atl01# show | compare
[edit policy-options policy-statement 6-BBONE-OUT term 6-SITE-LOCAL from]
! inactive: prefix-list 6-SITE-LOCAL { ... }
전체 코드는 다음과 같습니다.
from {
prefix-list 6-SITE-LOCAL;
}
then {
local-preference 200;
community add SITE-LOCAL-ROUTE;
community add ATL01;
community add NORTH-AMERICA;
accept;
}
이 코드는 local-preference를 설정하고, 일부 커뮤니티를 추가하고, prefix-list와 일치하는 경로를 수락합니다. local preference는 iBGP 세션 상의 전이 자산입니다(다음 BGP 피어로 전송됨).
올바르게 변경하였다면, prefix-list 대신 이 코드가 비활성화됐을 것입니다.
prefix-list 조건이 제거되자 라우터는 모든 BGP 경로를 다른 모든 백본 라우터로 보내라는 명령을 받았고, 이에 따라 local-preference 값이 200 증가했습니다. 유감스럽게도 당시 에지 라우터가 컴퓨팅 노드에서 받은 로컬 경로는 local-preference 값이 100이었습니다. 높은 local-preference 값이 우선하므로 로컬 컴퓨팅 노드로 향해야 할 모든 트래픽이 애틀랜타 컴퓨팅 노드로 이동했습니다.
경로가 전송되자 애틀랜타는 전 백본에서 트래픽을 끌어들이기 시작했습니다.
Cloudflare는 다음과 같이 변경을 진행하고 있습니다.
백본 BGP 세션에 maximum-prefix 제한을 도입할 것입니다. 이렇게 하면 애틀랜타의 백본이 멈추겠지만, Cloudflare 네트워크는 백본 없이 올바로 작동하도록 구축되어 있습니다. 이 변경 사항은 7월 20일 월요일에 배포될 것입니다.
로컬 서버 경로용 BGP local-preference 설정을 변경할 것입니다. 이러한 변경으로 한 위치가 다른 위치의 트래픽을 비슷한 방식으로 끌어들이지 못할 것입니다. 이 변경 사항은 사고 후 배포됐습니다.
결론
지금까지 백본 가동이 중단된 적은 없었기 때문에, 저희 팀은 신속히 대응하여 영향 받은 데이터 센터의 서비스를 복구했지만, 이는 관련된 모든 분에게 매우 고통스러운 시간이었습니다. 가동 중단으로 곤란을 겪은 고객과 Cloudflare 서비스들을 사용할 수 없었던 모든 사용자에게 사과 드립니다.
Cloudflare는 이미 백본 구성을 변경하여 이러한 사고가 재발하지 않게 하였으며 추가 변경은 월요일에 시작될 것입니다.