{"id":"IL-0089","org":"UK Ministry of Justice","date":"2020-09-21","docs":[],"title":{"en":"A test cluster deletion script run with the kube context pointing at the live-1 production cluster deleted its ingress controller, monitoring, logging, cert-manager, kiam and external-dns","ko":"테스트 클러스터 삭제 스크립트가 운영 클러스터 live-1 을 대상으로 실행돼 인그레스 컨트롤러, 모니터링, 인증서 구성 요소가 지워지고 사용자 서비스에 접속할 수 없게 됐다."},"domain":["kubernetes","aws"],"impact":{"scope":"services on the live-1 production cluster; Prometheus, Alertmanager, Grafana and Kibana; creation of new certificates","users":"some users of services running on the Cloud Platform","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2020-09-21-some-cloud-platform-components-destroyed.html","kind":"runbook","license":"unknown","archived":null}],"summary":{"en":"The Cloud Platform team triggered a script meant to delete a test cluster. The kube context, the setting that decides which cluster command-line tools talk to, pointed at live-1, the production cluster, so the script deleted platform components there: the default ingress controller, prometheus-operator, logging, cert-manager, kiam and external-dns. Without the ingress controller some users could not reach their services, monitoring and Kibana were down, and certificates could not be issued.\n\nThe team restored the default ingress controller first, together with the two components it depends on. external-dns writes the address of the new NLB into Route 53 records, and kiam gives external-dns the AWS role it needs to do that. Once those three were back, services started to return. The report gives 19:05 as the repair time, 38 minutes after detection.\n\nThe Formbuilder services stayed down. The TXT records in Route 53 that external-dns uses to mark the records it owns had the wrong owner field, so external-dns did not update their A records to the new NLB. After the team corrected the owner field, external-dns pointed the Formbuilder records at the new NLB and the services came back. The team then restored the remaining components with a targeted apply and ran the apply pipeline to restore all certificates, ServiceMonitors and Prometheus rules from the environment repository. The incident was resolved at 21:41.","ko":"2020년 9월 21일 팀은 테스트 클러스터를 지우려고 삭제 스크립트를 실행했다. kube 컨텍스트가 운영 클러스터 live-1 을 가리키고 있었고, 스크립트는 live-1 의 Cloud Platform 구성 요소 일부를 지웠다. 지워진 것은 기본 ingress-controller, prometheus-operator, logging, cert-manager, kiam, external-dns 였다. 인그레스 컨트롤러가 사라지자 일부 사용자가 Cloud Platform 의 서비스에 접속하지 못했다. Prometheus, Alertmanager, Grafana, Kibana 도 열리지 않았고 새 인증서도 만들 수 없었다.\n\n팀은 기본 인그레스 컨트롤러부터 되살리기로 했다. 인그레스 컨트롤러는 새 NLB 주소로 Route53 레코드를 고치는 external-dns 에 의존하고, external-dns 는 kiam 에서 AWS AssumeRole 권한을 받는다. 그래서 ingress-controller, external-dns, kiam 세 가지를 되살렸고 서비스가 다시 올라오기 시작했다.\n\nFormbuilder 서비스는 그 뒤에도 옛 NLB 를 가리켰다. Route53 TXT 레코드의 owner 값이 잘못 들어가 있어서 external-dns 가 A 레코드를 새 NLB 로 바꾸지 못했기 때문이다. 팀이 TXT 레코드의 owner 값을 고치자 external-dns 가 Formbuilder 레코드를 새 NLB 로 바꿨고 Formbuilder 가 돌아왔다. 나머지 구성 요소는 대상을 지정한 apply 로 되살렸다. 이어서 apply 파이프라인으로 환경 저장소의 인증서, ServiceMonitor, Prometheus 규칙을 모두 다시 만들었다. 수리까지 38분, 완전히 해결하기까지 3시간 14분이 걸렸다."},"trigger":{"en":"A script for deleting a test cluster was triggered while the kube context was pointing at the live-1 production cluster instead of the test cluster.","ko":"테스트 클러스터를 지우려고 삭제 스크립트를 실행했는데, kube 컨텍스트가 잘못 잡혀 있어 스크립트가 운영 클러스터 live-1 을 대상으로 돌았다."},"severity":"unknown","symptoms":["service-unavailable","resources-deleted","monitoring-down","stale-service-routing"],"timeline":{"detected_after":null,"resolved_after":"3h 14m"},"date_kind":"incident","detection":{"en":"The first detection was at 18:27, and the incident was declared 13 minutes later, at 18:40.","ko":"팀은 18:27 에 처음 장애를 알아챘고, 13분 뒤인 18:40 에 장애를 선언했다."},"components":["ingress","credential-broker","external-dns","cloud-load-balancer","prometheus"],"root_cause":"human-operation","remediation":[{"text":{"en":"restored the default ingress controller together with external-dns and kiam, which it depends on","ko":"기본 인그레스 컨트롤러를 먼저 되살리고, 인그레스 컨트롤러가 의존하는 external-dns 와 kiam 도 함께 되살렸다."}},{"text":{"en":"corrected the owner field in the Formbuilder Route 53 TXT records so external-dns pointed their A records at the new NLB","ko":"Route53 TXT 레코드의 잘못된 owner 값을 고쳐 external-dns 가 Formbuilder 레코드를 새 NLB 로 바꾸게 했다."}},{"text":{"en":"restored the remaining components with a targeted apply","ko":"남은 구성 요소는 대상을 지정한 apply 로 되살렸다."}},{"text":{"en":"ran the apply pipeline to restore all certificates, ServiceMonitors and Prometheus rules from the environment repository","ko":"apply 파이프라인을 돌려 환경 저장소에 있는 인증서, ServiceMonitor, Prometheus 규칙을 모두 다시 만들었다."}}],"action_items":[],"contributing":["no-safeguard-on-destructive-change"],"recurrence_of":null,"symptoms_text":{"en":"At 18:27 on 21 September 2020 the Cloud Platform team detected that some services running on the live-1 production cluster had gone down, and some users could not reach them. The incident was declared at 18:40.\n\nThe platform's own tools went down too: Prometheus, Alertmanager, Grafana and Kibana could not be reached, and no new certificates could be created. The components that had disappeared from the cluster were the default ingress controller, prometheus-operator, logging, cert-manager, kiam and external-dns.\n\nAfter the ingress controller was restored and most services came back, the Formbuilder services were still unreachable. Their Route 53 records still pointed at the old network load balancer (NLB), the one in use before the ingress controller was replaced.","ko":"팀은 2020년 9월 21일 18:27 에 처음 장애를 알아챘다. Cloud Platform 에서 돌아가는 서비스 일부에 사용자가 접속하지 못했다.\n\nPrometheus, Alertmanager, Grafana 에 접속할 수 없었고 Kibana 도 열리지 않았다. 새 인증서도 만들 수 없었다.\n\n기본 인그레스 컨트롤러를 되살린 뒤에도 Formbuilder 서비스에는 여전히 접속할 수 없었다. Formbuilder 의 Route53 레코드가 인그레스를 교체하기 전의 옛 NLB 를 계속 가리키고 있었다."},"updated_at":"2026-11-09T11:55:42.676224Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0089","org_slug":"uk-ministry-of-justice"}