Incident Library

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 레코드를 먼저 지운 뒤 새 인증서를 발급했다.

감지

–

조치

후속 조치

교훈

TLS 인증서 변경과 DNS 레코드 변경을 따로 배포했다면 이번 장애를 피할 수 있었다. 운영 환경을 master 의 최신 커밋에 고정하면서 여러 변경이 한꺼번에 들어갔고, 병합한 변경을 그때그때 배포하지 않아 운영과 스테이징이 너무 벌어졌다. 팀이 얻은 교훈은 세 가지다. 배포 절차를 문서로 정해야 한다. 스테이징에서 따로 시험한 변경은 운영에도 하나씩 차례로 배포해야 한다. 병합한 변경은 운영에도 배포해야 한다.

출처

관련 사례

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

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: Terraform, DNS 서버와 레코드, CDN 과 엣지 네트워크. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

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