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

사후 분석: 나쁜 게이트웨이

2024-01-11에 도메인 갱신 실패로 인한 Logto 서비스 중단 사건 보고서입니다.

Gao
Gao
Founder

요약

2024-01-11에 Logto 서비스는 수많은 502 Bad Gateway 오류와 함께 서비스 중단을 경험했습니다.

  • 발생 시간: 2024-01-11 15:28 UTC 경
  • 해결 시간: 2024-01-12 00:49 UTC 경
  • 지속 시간: 약 9시간
  • 영향을 받은 서비스: Logto 인증 서비스, Logto 클라우드 서비스
  • 영향 수준: 심각
  • 근본 원인: logto.app 도메인이 만료되고 갱신이 완료되지 않았습니다.

타임라인

  • 2024-01-11 15:28 UTC 사용자가 Logto 인증 서비스에 접근할 때 502 Bad Gateway 오류를 보고합니다.
  • 2024-01-11 15:42 UTC 더 많은 사용자가 동일한 문제를 보고합니다.
  • 2024-01-11 15:50 UTC 저희 팀원들이 문제 조사를 시작하고 다른 팀원들에게 전화합니다. 일부 팀원들에게는 늦은 밤이었기 때문에 일반 전화는 그들을 깨우기에 충분하지 않았습니다.
  • 2024-01-12 23:54 UTC 클라우드 서비스가 인증 서비스로 요청을 보내고 있지만 ERR_TLS_CERT_ALTNAME_INVALID 오류로 인해 요청이 실패한다는 것을 발견합니다.
  • 2024-01-12 00:36 UTC 도움이 될지를 보기 위해 DNS 캐시를 정리했습니다. 소용이 없었습니다.
  • 2024-01-12 00:38 UTC 도움이 될지를 보기 위해 TLS 인증서를 다시 발급했습니다. 소용이 없었습니다.
  • 2024-01-12 00:45 UTC logto.app 도메인이 만료되었을 수 있다는 것을 알게 되었습니다. 도메인 등록기관을 확인한 결과 갱신에 실패했고 도메인이 만료되었습니다.
  • 2024-01-12 00:49 UTC 도메인 갱신이 완료되었습니다. 서비스가 점차 정상으로 돌아오기 시작합니다.

사건 분석

무슨 일이 있었나요?

우리의 도메인은 일반적으로 도메인 등록기관을 통해 자동으로 갱신됩니다. 그러나 이번에는 갱신 과정이 잠재적인 잘못된 구성으로 인해 실패했습니다. 그 결과 logto.app 도메인이 만료되었고 DNS 기록이 등록기관의 주차 페이지를 가리키도록 업데이트되었습니다.

현재 인증 서비스는 운영 중이지만 대부분의 요청은 도달하지 못합니다. Logto 관리자 테넌트만 auth.logto.io 도메인에 연결되어 만료에 영향을 받지 않습니다.

인증 서비스 외에도 Logto 테넌트를 조정하고 Logto 클라우드 콘솔(프론트엔드 앱)을 제공하는 클라우드 서비스가 있습니다.

사용자가 클라우드 콘솔을 운영할 때, 앱은 인증 서비스를 직접 호출하지 않고 모든 관리 작업을 위해 클라우드 서비스를 호출합니다.

Logto 관리 API와 일치시키기 위해, 우리는 인증 서비스로 요청을 위임하는 "관리 API 프록시" 엔드포인트를 설계했습니다. 전체 흐름은 이렇게 보입니다:

*.logto.app 도메인에 인증서 불일치 문제가 있기 때문에, 클라우드 서비스 (Node.js)는 요청을 거부하고 오류를 발생시킵니다.

일반적으로 요청 오류는 전체 서비스가 중단되지 않도록 잡히지만, 오류가 프록시 모듈에서 전파되었기 때문에 기존의 오류 처리 로직이 이를 잡을 수 없어 서비스 중단이 발생했습니다.

모든 Logto 서비스에는 적어도 세 개의 복제본이 있지만, 거의 모든 클라우드 콘솔의 요청으로 오류가 발생해 모든 복제본이 쉽게 중단되었습니다. 자동 복구 메커니즘이 작동하기까지 시간이 걸리므로 서비스가 잠시 동안 사용할 수 없게 됩니다.

이것이 사용자가 502 Bad Gateway 오류를 보게 되는 이유입니다(모든 복제본 중단). 클라우드 서비스가 활성화되면 새로운 클라우드 콘솔 요청과 재시도 요청이 들어오고, 중단 루프가 계속됩니다.

클라우드 서비스가 중단되면 인증 서비스에도 영향을 미칩니다, 주로 /api/.well-known/sign-in-exp 엔드포인트에요. 이 엔드포인트는 클라우드 서비스에서 가져와야 하는 커넥터 정보를 포함한 로그인 경험 구성을 가져오는 데 사용됩니다.

해결 방법

  • 도메인을 수동으로 갱신합니다.

배운 점

  • 도메인 만료에 대한 모니터링을 항상 설정하거나 더 긴 기간 동안 구매합니다.
  • 시간대 차이가 사건 대응에 지연을 초래할 수 있음을 인식합니다.
  • 모든 도메인을 포괄하는 모니터링을 보장합니다.
  • 오류를 발생시키는 모듈을 다룰 때 주의하여, 오류가 잡히고 적절히 처리될 수 있도록 보장합니다.

시정 및 예방 조치

  • ✅ 자동 갱신이 활성화되었를지라도 도메인 만료에 대한 월간 모니터링을 추가합니다.
  • logto.app에 대한 모니터링 추가합니다.
  • ✅ 클라우드 서비스 오류 처리 로직을 업데이트하여 프록시 오류를 적절히 잡고 처리합니다.
  • ✅ 모든 시간대를 포괄하는 SRE 팀을 갖추기 전에 사건 발생 시 팀을 깨울 수 있는 강력한 알림을 구현합니다.