IL-0111 DFDS · 2021-08-26kubernetesawsnetworking
DFDS 는 쿠버네티스 인그레스 컨트롤러 Traefik v1 을 걷어 내는 마이그레이션 작업으로 메인 인그레스 컨트롤러를 Traefik v2 로 바꿨다. 새 설정이 잘못되어 insecure 헤더로 취급되는 X-Forwarded- 헤더가 전달되지 않았다. 그 결과 x-forwarded-proto 값이 https 에서 http 로 바뀌었고, Okta 인증 흐름이 깨졌다. Okta 를 쓰는 서비스가 모두 영향을 받았고, 온라인 예약이 1시간 남짓 완전히 멈췄다.
기능 테스트는 정상으로 나왔고, 문제는 변경 64분 뒤 개발자의 보고로 드러났다. 09:26 UTC 에 Cloud Engineering 팀과 개발자가 조사를 시작했지만, 서비스가 중요한 만큼 조사보다 롤백을 먼저 했다. 09:48 UTC 에 롤백했고 09:49 UTC 에 서비스가 정상으로 돌아왔다. 10:00 UTC 부터 Okta 팀과 함께 깊이 조사했고, 나중에 근본 원인을 찾았다. DFDS 는 장애에 영향을 준 요인으로 세 가지를 꼽았다. 탐지가 지나치게 늦었다. 중요한 변경 뒤 자기 애플리케이션을 지켜볼 책임이 각 팀에 있었다. Slack 공지는 다른 메시지에 묻히곤 했다.
09:26 UTC 에 한 개발자가 HTTP 307 리다이렉트 응답이 유난히 많다고 알렸다. 특히 Okta 서비스에서 많았다. 6분 뒤인 09:32 UTC 에 온라인 예약 시스템이 다운됐다는 연락이 왔다.
앞서 08:22 UTC 에 AWS 로드밸런서가 새 Traefik v2 리버스 프록시로 요청을 보내도록 바뀌었다. 08:44 UTC 에 돌린 기능 테스트는 모두 정상이었고, 이 결과가 Slack 에 공유됐다. 새 프록시 뒤에서 x-forwarded-proto 헤더 값은 https 에서 http 로 바뀌어 있었다. 마이그레이션 전에 요청 헤더를 확인했지만 이 변화는 놓쳤다.
증상 ? 서비스 중단
원인 ? 설정 변경
09:26 UTC 에 한 개발자가 HTTP 307 리다이렉트가 많다고 보고하면서 문제가 드러났다. 특히 Okta 서비스에서 많았다. 변경 뒤 64분 만이었다. 09:32 UTC 에는 온라인 예약 시스템이 다운됐다는 연락을 받았다.
Cloud Engineering 팀이 모든 시나리오를 시험할 수는 없었다. 팀은 자기 애플리케이션 몇 개로 몇 주 동안 시험했지만 Okta 로그인 흐름의 문제는 잡지 못했다. 마이그레이션 전후의 요청 헤더를 비교했다면 미리 알 수 있었을지도 모른다는 물음도 남았다.
같은 원인 · 공통 클라우드 로드 밸런서, 인그레스 컨트롤러
같은 원인 · 공통 클라우드 로드 밸런서
같은 원인 · 공통 클라우드 로드 밸런서
같은 원인 · 공통 클라우드 로드 밸런서
같은 원인 · 공통 클라우드 로드 밸런서