{"id":"IL-0106","org":"DFDS","date":"2021-09-06","docs":["https://github.com/traefik/traefik/issues/8098"],"title":{"en":"A malformed Traefik IngressRoute triggered a Traefik v2 bug once a node rollover restarted every Traefik pod, and all Kubernetes services returned 404","ko":"잘못된 IngressRoute 매니페스트가 Traefik v2 버그를 건드려 Traefik 파드가 모두 재시작된 뒤 Kubernetes 의 모든 서비스가 404 를 냈다"},"domain":["kubernetes","aws","networking"],"impact":{"scope":"All Kubernetes services routed through the Traefik v2 ingress returned 404","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"A malformed IngressRoute did nothing visible for five days and then took down all ingress when every Traefik v2 pod had restarted during a node rollover. Because Traefik v2 failed gracefully, the first signals pointed at the ALB health checks instead of at Traefik.\n\nOn incident handling, the team concluded that appointing an incident manager could have helped, that the war room meeting should be recorded and a log book kept, that people not involved should only make suggestions in writing, and that a short first round of sharing thoughts and gut feelings is useful.","ko":"Traefik v2 는 오류를 드러내지 않고 실패해서 조사를 ALB 쪽으로 잘못 이끌었다. 공식 API 스키마도 잘못된 매니페스트 적용을 막지 못했다. 팀은 대응 과정에서 장애 관리자를 정했다면 도움이 됐을 것으로 봤다. 그리고 워룸 회의를 녹화하고, 대응에 참여하지 않는 사람은 글로만 제안하고, 일지를 남기자고 정리했다. 대응 초반에 각자의 생각과 직감을 짧게 나누는 시간도 갖자고 했다."},"related":[],"sources":[{"url":"https://github.com/dfds/postmortems/blob/master/PM2021-009%20-%20All%20services%20returning%20404%20in%20Kubernetes.md","kind":"github","license":"unknown","archived":null}],"summary":{"en":"DFDS routed ingress traffic for its Kubernetes services through Traefik v2 behind an AWS ALB. On 2021-09-01 a malformed IngressRoute manifest was applied, and the official Traefik v2 API schema did not stop it. Traefik v2 versions before 2.5 have a bug (Traefik issue 8098) that makes such a resource stop Traefik from receiving or routing any ingress traffic, but the bug only takes effect once all Traefik v2 pods have restarted. That happened during the automated node rollover on 2021-09-06, and from 08:00 UTC every Kubernetes service returned 404.\n\nBecause Traefik v2 failed gracefully, the team first chased the unhealthy ALB targets and changed the health check path, which did not bring traffic back. At 08:50 the team began rolling back to Traefik v1 as the main ingress controller, carried out the rollback by hand at 09:00, and ingress traffic worked again at 09:08. At 09:10 the team found the root cause by deleting the malformed IngressRoute by hand and confirmed the Traefik v2 bug, and at 09:20 the changes were applied upstream. Detection took 5 minutes and recovery 68 minutes.","ko":"DFDS 는 Kubernetes 의 인그레스 컨트롤러로 Traefik v2 를 쓰고 있었다. 2021-09-01 에 형식이 잘못된 IngressRoute 매니페스트가 클러스터에 적용됐고, Traefik v2 의 공식 API 스키마는 이 적용을 막지 못했다. 이 매니페스트가 2.5 미만 Traefik v2 의 버그를 건드려 Traefik 이 인그레스 트래픽을 받지도 라우팅하지도 못하게 됐다. 다만 이 버그는 Traefik v2 파드가 모두 재시작된 뒤에야 나타나서 닷새 동안 드러나지 않았다.\n\n2021-09-06 아침 자동 노드 롤오버가 돈 뒤 모든 서비스가 404 를 냈다. 팀은 ALB 대상이 unhealthy 인 것을 보고 헬스체크 경로를 바꿨지만 404 는 그대로였다. 08:50 에 주 인그레스 컨트롤러를 Traefik v1 으로 되돌리기로 했고, 09:00 에 손으로 롤백했다. 09:08 에 인그레스 트래픽이 정상으로 돌아왔다.\n\n09:10 에 잘못된 IngressRoute 를 손으로 지우면서 근본 원인을 찾았고 Traefik v2 버그도 확인했다. 감지까지 5분, 복구까지 68분이 걸렸다."},"trigger":{"en":"The automated Kubernetes node rollover on 2021-09-06 restarted all the Traefik v2 pods, five days after a malformed IngressRoute manifest had been applied.","ko":"2021-09-01 11:34 UTC 에 형식이 잘못된 IngressRoute 가 Kubernetes 에 적용됐다. 이 매니페스트는 2.5 미만 Traefik v2 의 버그를 건드렸지만, 버그는 Traefik v2 파드가 모두 재시작된 뒤에야 드러났다. 2021-09-06 07:30 에 자동 노드 롤오버가 시작됐고, 08:00 에 모든 서비스가 404 를 냈다."},"severity":"unknown","symptoms":["service-unavailable","high-error-rate","readiness-probe-failures"],"timeline":{"detected_after":"5m","resolved_after":"1h 8m"},"date_kind":"incident","detection":{"en":"All services returned 404 from 08:00 UTC and root cause investigation started at 08:05. Time to detection was 5 minutes.","ko":"08:00 UTC 에 모든 서비스가 404 를 내기 시작했고 08:05 에 원인 조사를 시작했다. 감지까지 5분이 걸렸다."},"components":["ingress","cloud-load-balancer"],"root_cause":"software-bug","remediation":[{"text":{"en":"changed the ALB health check path, which made the targets healthy but did not stop the 404s","ko":"ALB 헬스체크 경로를 바꿔 08:15 에 ALB 대상을 healthy 로 되돌렸지만 404 는 멈추지 않았다."}},{"text":{"en":"rolled back by hand to Traefik v1 as the main ingress controller","ko":"08:50 에 주 인그레스 컨트롤러를 Traefik v1 으로 되돌리기로 하고, 09:00 에 손으로 롤백했다."}},{"text":{"en":"deleted the malformed IngressRoute by hand and confirmed the Traefik v2 bug","ko":"09:10 에 잘못된 IngressRoute 를 손으로 지워 근본 원인과 Traefik v2 버그를 확인했다."}},{"text":{"en":"applied the changes upstream","ko":"09:20 에 바꾼 내용을 업스트림에도 반영했다."}}],"action_items":[{"text":{"en":"Upgrade Traefik to v2.5, where the bug is fixed, and verify that it removes the bug","ko":"버그가 고쳐진 Traefik v2.5 로 올리고 버그가 사라졌는지 확인한다."}},{"text":{"en":"Change the Traefik v2 health check path to something more robust","ko":"Traefik v2 헬스체크 경로를 더 믿을 만한 경로로 바꾼다."}},{"text":{"en":"Set up an external liveness probe on the ingress controller","ko":"인그레스 컨트롤러를 클러스터 바깥에서 확인하는 liveness 점검을 둔다."}},{"text":{"en":"Consider workload segmentation to limit the blast zone","ko":"워크로드를 나눠 장애가 번지는 범위를 줄이는 방안을 검토한다."}},{"text":{"en":"Look into monitoring the Traefik v2 API for rapid changes","ko":"Traefik v2 API 에서 짧은 시간에 많은 변경이 일어나는지 모니터링하는 방법을 알아본다."}},{"text":{"en":"Look into smoke testing during and after node rollover","ko":"노드 롤오버 중과 롤오버 뒤에 스모크 테스트를 돌리는 방법을 알아본다."}}],"contributing":["delayed-effect-change","no-config-tests","blast-radius-too-wide"],"recurrence_of":null,"symptoms_text":{"en":"At 08:00 UTC on 2021-09-06 every service in DFDS's Kubernetes cluster answered with 404. Investigation started five minutes later.\n\nAt 08:10 the targets of the AWS Application Load Balancer (ALB) in front of the cluster were unhealthy. Changing the ALB health check path made the targets healthy again at 08:15, but at 08:20 all services were still returning 404. Traefik v2, the ingress controller, failed gracefully, which pointed the investigation at the ALB, and other checks up to 08:30 found nothing conclusive.\n\nThe resource behind the failure had been applied five days earlier: a malformed IngressRoute went into the cluster at 11:34 UTC on 2021-09-01. The failure appeared only after the automated node rollover that started at 07:30 on 2021-09-06 had restarted all the Traefik v2 pods.","ko":"2021-09-06 08:00 UTC 에 Kubernetes 의 모든 서비스가 404 를 내기 시작했다. 30분 전인 07:30 에는 노드를 자동으로 교체하는 롤오버가 시작됐다.\n\n팀은 08:05 에 원인 조사를 시작했고, 08:10 에 ALB 대상이 unhealthy 로 나타난 것을 봤다. 헬스체크 경로를 바꾸자 08:15 에 ALB 대상은 healthy 로 돌아왔지만, 08:20 에도 모든 서비스가 여전히 404 를 냈다.\n\nTraefik v2 가 오류를 드러내지 않고 실패하는 바람에 조사는 ALB 문제 쪽으로 잘못 흘렀다. 08:30 까지 여러 가지를 살폈지만 결론이 나지 않았다."},"updated_at":"2026-11-10T00:00:33.430849Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0106","org_slug":"dfds"}