{"id":"IL-0365","org":"DFDS","date":"2020-06-09","docs":[],"title":{"en":"A Terraform change to auto-scaling groups detached all worker nodes from both ALBs and cut off every cluster service","ko":"ALB 의 인스턴스 연결이 모두 사라져 Hellman 쿠버네티스 클러스터의 모든 서비스가 외부에서 닿지 않았다"},"domain":["kubernetes","aws","networking"],"impact":{"scope":"All services running inside the Hellman Kubernetes cluster were unavailable from outside the cluster","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"General alert noise is still too high, there was no alert on healthy and unhealthy ALB targets, and test clusters should check ingress through the ALBs.","ko":"평소 알림 소음이 여전히 너무 높았고, ALB 대상이 정상인지 비정상인지를 보는 알림이 없었다. 테스트 클러스터에서도 ALB 를 거치는 인그레스를 검증해야 한다."},"related":[],"sources":[{"url":"https://github.com/dfds/postmortems/blob/master/PM2020-005%20-%20ALB%20instance%20attachment.md","kind":"github","archived":null}],"summary":{"en":"On 9 June 2020 DFDS started planned maintenance at 11:00 CET to give the Hellman Kubernetes cluster separate auto-scaling groups per availability zone. When the Terraform changes were applied at 12:20, both ALBs lost all their attached instances, the Kubernetes worker nodes, and every service in the cluster became unavailable from outside. A CloudWatch alert on 5XX counts fired at 12:25 and the missing ingress traffic was verified at 12:28. The SRE team found the cause quickly and at 12:35 mitigated it by attaching the instances to the ALBs by hand, and a permanent fix was in place at 13:13. DFDS lists as contributing factors that test clusters do not check ingress traffic through ALBs, the maintenance playbook missed a step, the maintenance window had been moved close to the lunch break, disruptive maintenance sets off a flood of alerts, general alert noise was too high again, and ALB-attached instances were only alerted on by proxy. Time to detection was 5 minutes and time to recovery 15 minutes.","ko":"2020-06-09 DFDS 는 Hellman 쿠버네티스 클러스터의 오토스케일링 그룹을 가용 영역마다 따로 두도록 바꾸는 계획된 유지보수를 11:00 CET 에 시작했다. 12:20 에 Terraform 변경을 적용하자 AWS Application Load Balancer, 곧 ALB 두 대에서 연결된 인스턴스가 모두 빠졌다. 인증을 거치는 ALB 와 거치지 않는 ALB 모두에서 쿠버네티스 워커 노드가 사라졌고, 클러스터 안의 모든 서비스가 클러스터 밖에서 닿지 않게 됐다. 12:25 에 CloudWatch 알림이 ALB 의 5XX 가 많다고 알렸고, 12:28 에 인그레스 트래픽이 없는 문제를 확인했다. SRE 팀은 원인을 빠르게 찾아 12:35 에 인스턴스를 ALB 에 손으로 붙여 문제를 완화했고, 13:13 에 영구 수정을 마쳤다.\n\nDFDS 는 기여 요인으로 여섯 가지를 들었다. 테스트 클러스터가 ALB 를 거치는 인그레스 트래픽을 검증하지 않았다. 유지보수 플레이북에 단계 하나가 빠져 있었다. 유지보수 시간이 점심시간에 너무 가깝게 옮겨졌다. 서비스 중단을 일으키는 유지보수 중에는 알림이 폭증했다. 평소 알림 소음이 다시 너무 높아졌다. ALB 에 연결된 인스턴스의 문제는 간접적으로만 알림으로 잡혔다. 감지까지 5분, 복구까지 15분이 걸렸다."},"trigger":{"en":"Planned maintenance to split the Hellman cluster's auto-scaling groups by availability zone applied Terraform changes at 12:20 CET that removed the ALB instance attachments.","ko":"가용 영역마다 오토스케일링 그룹을 따로 두도록 Hellman 클러스터를 바꾸는 계획된 유지보수에서 12:20 CET 에 Terraform 변경을 적용하자, 두 ALB 의 인스턴스 연결이 모두 지워졌다."},"severity":"unknown","symptoms":["service-unavailable"],"timeline":{"detected_after":"5m","resolved_after":"15m"},"date_kind":"incident","detection":{"en":"A CloudWatch alert detected a high count of 5XX responses for the ALBs, and the lack of ingress traffic was then verified.","ko":"12:25 CET 에 CloudWatch 알림이 ALB 의 5XX 수가 높다고 알렸고, 12:28 에 인그레스 트래픽이 들어오지 않는 문제를 감지하고 확인했다."},"components":["terraform","cloud-load-balancer","launch-template"],"root_cause":"config-change","remediation":[{"text":{"en":"Attached the worker node instances to the ALBs by hand","ko":"인스턴스를 ALB 에 손으로 붙여 빠르게 문제를 완화했다."}},{"text":{"en":"Implemented a permanent fix within the hour","ko":"그 뒤 한 시간 안에 영구 수정을 적용했다."}}],"action_items":[{"text":{"en":"Implement alerts on healthy and unhealthy ALB targets for more precise and immediate notice","ko":"ALB 대상이 정상인지 비정상인지에 알림을 걸어 더 정확하고 즉각적으로 알 수 있게 한다."}},{"text":{"en":"Reduce alert noise further","ko":"알림 소음을 더 줄인다."}},{"text":{"en":"Implement host name resolution for Goldpinger","ko":"Goldpinger 에 호스트 이름 해석을 구현한다."}}],"contributing":["staging-not-representative","alert-noise","monitoring-blind-spot"],"recurrence_of":null,"symptoms_text":{"en":"On 9 June 2020 at 12:25 CET a CloudWatch alert fired on a high count of 5XX responses from the AWS Application Load Balancers (ALBs) of DFDS's Hellman Kubernetes cluster, and at 12:28 the SRE team verified that no ingress traffic was reaching the cluster. Every service running inside the cluster was unreachable from outside it, because both ALBs, the authenticated one and the one without authentication, no longer had any Kubernetes worker nodes attached.\n\nThe alert came during planned maintenance that set off many alerts, on top of alert noise that was already high, and DFDS had no alert on healthy or unhealthy ALB targets, only indirect alerts for the attached instances.","ko":"2020-06-09 12:25 CET 에 CloudWatch 알림이 두 ALB 의 5XX 수가 높다고 알렸다. 12:28 에 인그레스 트래픽이 전혀 들어오지 않는 문제를 감지하고 확인했다.\n\nHellman 쿠버네티스 클러스터 안에서 도는 모든 서비스가 클러스터 밖에서 닿지 않았다. 인증을 거치는 ALB 와 거치지 않는 ALB 모두에서 연결된 인스턴스, 곧 쿠버네티스 워커 노드가 모두 빠져 있었다.\n\n서비스 중단을 일으키는 유지보수를 하는 동안 알림이 폭증했고, 평소 알림 소음도 다시 높아져 있었다. ALB 에 연결된 인스턴스의 문제는 다른 신호를 거쳐 간접적으로만 알림으로 잡혔다. ALB 대상이 정상인지 비정상인지를 보는 알림은 없었다."},"updated_at":"2026-11-14T12:34:01.772723Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0365","org_slug":"dfds"}