IL-0363 Rust Project · 2023-01-25networking
static.crates.io 의 DNS 레코드가 10~15분 동안 해석되지 않아 crate 를 받지 못했다
Rust 인프라는 인프라를 코드로 구성하고 프로비저닝하는 도구인 Terraform 으로 관리한다. 인프라 팀은 최근 crates.io 의 스테이징 환경과 운영 환경을 나눠 따로 배포할 수 있게 했고, 이 기능으로 static.crates.io 의 두 번째 CDN 인프라를 스테이징에서 만들고 시험했다. 준비가 끝나자 1월 25일 배포를 공지했다. 운영 배포에는 스테이징에서 따로 만들고 배포하고 시험한 변경 두 가지가 함께 들어 있었다. 현재 CDN 의 새 TLS 인증서와 바뀐 DNS 레코드였다.
2023-01-25 09:15 UTC 에 이 구성을 운영에 배포하자 Terraform 은 기존 인증서와 DNS 레코드를 먼저 지우고 새 인증서 발급을 시작했다. 발급에 약 10분이 걸렸고, 그동안 static.crates.io 의 DNS 레코드가 없어 사용자의 빌드가 실패했다. 새 인증서가 준비되자 Terraform 이 DNS 레코드를 다시 만들었다. 09:30 무렵 레코드가 다시 전파되기 시작해 09:40 에는 트래픽이 평소로 돌아왔고, 일부 사용자는 DNS 서버 캐시 때문에 몇 분 더 영향을 받았다.
이번 배포는 새 환경 도구로 운영에 변경을 배포한 첫 경우 가운데 하나였다. 이 도구는 운영 환경을 특정 Git 커밋에 고정한다. 팀이 예전처럼 master 의 최신 커밋을 지정하면서 여러 변경이 한꺼번에 적용됐다. 또 변경을 main 브랜치에 병합할 때 바로 배포하지 않아 운영과 스테이징이 오랫동안 벌어져 있었다. crates.io 가 Rust 생태계에 중요하기 때문에, 팀은 커뮤니티에 먼저 알리지 않고 여러 번 배포하기를 꺼렸다.
- 심각도
- –
- 영향 범위
- Name resolution of static.crates.io; builds failed because crates could not be downloaded
- 영향 사용자
- –
- 지역
- –
- 감지까지
- –
- 복구까지
- 25m
증상
2023-01-25 09:15 UTC 에 crates.io 운영 인프라에 변경을 배포하는 동안 static.crates.io 의 DNS 레코드가 해석되지 않았다. 사용자는 crate 를 내려받지 못해 빌드가 실패했다.
이름 해석 실패는 10~15분쯤 이어졌다. 09:30 UTC 무렵 DNS 레코드가 다시 전파되기 시작했고, 09:40 UTC 에는 트래픽이 평소 수준으로 돌아왔다. 일부 사용자는 자기 DNS 서버의 캐시 때문에 몇 분 더 장애를 겪었다.
증상 DNS 조회 실패
원인
- 촉발
- Rust 인프라 팀이 Terraform 으로 운영 환경에 현재 CDN 의 새 TLS 인증서와 바뀐 DNS 레코드를 함께 배포했다. Terraform 은 기존 인증서와 DNS 레코드를 먼저 지운 뒤 새 인증서를 발급했다.
감지
–
조치
- Terraform 이 배포를 마치고 static.crates.io 의 새 DNS 레코드를 만들자 장애가 저절로 풀렸다.
후속 조치
- 운영에 변경을 배포하는 절차, 특히 Git 커밋을 고르는 방법과 변경 내역을 검토하는 방법을 문서로 남긴다. 절차를 정해 두고 계속 고쳐 나가 같은 문제를 피한다.
- 스테이징에서 따로 만들고 시험한 변경은 운영에도 하나씩 차례대로 배포하고, 이 규칙을 문서에 넣는다.
- main 브랜치에 병합한 변경은 운영에도 반드시 배포해, Git 에 있는 구성과 실제로 배포된 것이 벌어지지 않게 한다.
교훈
TLS 인증서 변경과 DNS 레코드 변경을 따로 배포했다면 이번 장애를 피할 수 있었다. 운영 환경을 master 의 최신 커밋에 고정하면서 여러 변경이 한꺼번에 들어갔고, 병합한 변경을 그때그때 배포하지 않아 운영과 스테이징이 너무 벌어졌다. 팀이 얻은 교훈은 세 가지다. 배포 절차를 문서로 정해야 한다. 스테이징에서 따로 시험한 변경은 운영에도 하나씩 차례로 배포해야 한다. 병합한 변경은 운영에도 배포해야 한다.
출처
관련 사례
IL-0512xPRO 의 쿠버네티스 APISIX 오리진 인증서가 갱신되지 못하고 만료되어 xpro.mit.edu 가 한 시간 동안 503 을 냈다MIT Open Learning · 2026 · sev1같은 원인 · 공통 DNS 서버와 레코드, CDN 과 엣지 네트워크
IL-0283Cloudflare 네트워크 전체에서 코어 프록시가 Bot Management 피처 파일을 읽다 실패해 사이트 방문자들이 HTTP 5xx 오류 페이지를 받았다Cloudflare · 2025같은 원인 · 공통 CDN 과 엣지 네트워크
같은 원인 · 공통 DNS 서버와 레코드
같은 원인 · 공통 Terraform
IL-0339Azure Front Door 와 Azure CDN 을 쓰는 Microsoft 서비스에 여러 리전에서 연결 오류, 타임아웃, 지연 급증이 났다Microsoft Azure · 2024같은 원인 · 공통 CDN 과 엣지 네트워크
IL-0533Azure China 의 핵심 시스템 도메인 chinacloudapp.cn 과 chinacloudsites.cn 의 이름 해석이 실패해 여러 서비스에 연결할 수 없었다Microsoft Azure · 2024같은 원인 · 공통 DNS 서버와 레코드
같은 원인 · 공통 DNS 서버와 레코드
IL-0091Terraform 으로 노드 인스턴스 타입을 바꾸자 노드가 한꺼번에 교체되어 사용자 운영 파드가 모두 지워지고 서비스가 내려갔다UK Ministry of Justice · 2023같은 원인 · 공통 Terraform
같은 원인 · 공통 DNS 서버와 레코드
같은 원인 · 공통 Terraform
IL-0109로그 수집을 고치려던 EKS 노드 롤오버가 꼬이면서 Auto Scaling 그룹이 정상 워커 노드를 모두 종료해 클러스터에 노드가 하나도 남지 않았다.DFDS · 2023 · sev1같은 원인 · 공통 Terraform
같은 원인 · 공통 Terraform
같은 원인 · 공통 Terraform
IL-0061Terraform 상태 파일이 리뷰 빌드에서 바뀐 데다 권한 차이까지 겹쳐 Terraform 이 운영 GKE 클러스터 세 개 중 두 개를 삭제했다Spotify · 2019같은 원인 · 공통 Terraform
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0363
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0363/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.