한국어
  • 사후 분석
  • 클라우드 서비스
  • 사건

사후 분석: Docker 이미지 찾을 수 없음

2023-12-17에 Logto 서비스 중단 보고서, 프로덕션 Docker 이미지 손실로 인해 발생함.

Simeng
Simeng
Developer

요약

2023-12-17에 Logto 프로덕션 Docker 이미지의 손실로 인한 서비스 중단을 경험했습니다.

  • 사건 시간: 2023-12-17 03:56:00 UTC
  • 사건 지속 시간: 18분
  • 서비스 영향: Logto 클라우드 서비스와 Logto 코어 서비스가 사건 동안 사용할 수 없었습니다.
  • 영향 수준: 심각
  • 근본 원인: Logto 프로덕션 Docker 이미지가 실수로 삭제되었습니다. GitHub Container Registry에서 이미지를 가져오는 데 실패했습니다.

타임라인

시간사건
초기 2023-12-17 (구체적인 시간 불명)Logto 자동화 GitHub 이미지 보존 워크플로가 실행됨. logtologto-cloud 프로덕션 이미지가 실수로 삭제됨.
2023-12-17 03:56:00 UTCLogto 클라우드 서비스와 Logto 코어 서비스가 사용할 수 없게 됨. 모니터링 시스템에 의해 사건 감지됨.
2023-12-17 04:03:00 UTC당직 엔지니어가 사건을 인정함.
2023-12-17 04:10:00 UTC최신 이미지를 통해 Logto 클라우드 서비스와 Logto 코어 서비스의 새로운 배포가 시작됨.
2023-12-17 04:15:00 UTCLogto 클라우드 서비스와 Logto 코어 서비스가 다시 사용 가능하게 됨. 사건 자동으로 해결됨.

사건 분석

발생 원인

Logto 서비스 프로덕션 이미지는 자동화된 GitHub 이미지 보존 워크플로에 의해 삭제되었습니다. 클라우드 서비스는 GitHub Container Registry에서 이미지를 가져오는 데 실패하여 사용 불가능하게 되었습니다.

Service Log

원인 분석

자동화된 GitHub 이미지 보존 워크플로가 프로덕션 이미지를 실수로 삭제했습니다. 워크플로는 태그가 없는 3일 이상 된 오래된 이미지들을 삭제하도록 설계되었습니다.

우리는 prod 태그로 프로덕션 이미지를 식별하도록 태그했습니다. 프로덕션 배포가 시작될 때마다 prod 태그가 붙은 새 이미지가 생성되어 GitHub Container Registry에 푸시됩니다. 새 이미지가 성공적으로 생성되고 푸시된 후에는 기존 이미지에서 prod 태그가 제거됩니다. 기존 이미지는 태그가 없는 상태로 변하며 자동화된 GitHub 이미지 보존 워크플로에 의해 삭제됩니다.

Logto 서비스 이미지는 여러 아키텍처를 지원하도록 빌드되었습니다. 이미지는 buildx로 빌드되어 --platform 플래그와 함께 GitHub Container Registry로 푸시되었습니다. 모든 태그는 루트 매니페스트 리스트에 적용되었습니다. prod 태그 역시 루트 매니페스트 리스트에 적용되었습니다. 멀티 아치 매니페스트 리스트 아래 나열된 모든 하위 이미지는 태그가 없는 상태로 남아있었습니다.

Docker 이미지의 태그 및 매니페스트 리스트 구조에 대한 세심한 검토가 부족하여 우리는 단순히 자동화된 GitHub 이미지 보존 워크플로를 이용해 모든 태그가 없는 이미지를 삭제하도록 설정했습니다. 워크플로는 멀티 아치 매니페스트 리스트에 나열된 모든 하위 이미지를 삭제했습니다.

영향

이번 사건으로 인해 Logto 클라우드 서비스와 Logto 코어 서비스가 약 18분간 사용할 수 없게 되었습니다. 최종 사용자는 Logto에 로그인하거나 클라이언트 애플리케이션에 접근할 수 없었습니다. Logto 클라우드 관리자 포털도 사건 동안 사용할 수 없었습니다.

해결책

우리는 자동화된 GitHub 이미지 보존 워크플로를 중단하고 prod 태그가 붙은 새 이미지를 GitHub Container Registry에 배포했습니다. 새 이미지는 Logto 클라우드 서비스와 Logto 코어 서비스에 의해 성공적으로 가져와졌습니다. 서비스가 다시 사용 가능해졌습니다.

교훈

  • 프로덕션 환경에 워크플로를 게시하기 전에 항상 신중하게 검토하고 테스트하세요.
  • 자원을 삭제하는 작업을 실행하기 전에 시뮬레이션을 하세요.
  • 프로덕션 환경에 대한 백업 계획을 항상 유지하세요.
  • 새로운 이미지 보존 정책을 신중하게 정의하세요.

수정 및 예방 조치

  • ✅ 자동화된 GitHub 이미지 보존 워크플로 즉시 중단.