{"id":"IL-0088","org":"UK Ministry of Justice","date":"2020-09-07","docs":[],"title":{"en":"A validating admission webhook added by a new ingress controller module version made the live-1 cluster reject every new Ingress with an x509 error","ko":"팀별 ingress 컨트롤러 모듈 0.1.0 이 만든 검증 웹훅이 live-1 클러스터에서 새 Ingress 생성을 모두 x509 오류로 막았다"},"domain":["kubernetes","aws"],"impact":{"scope":"creation of new ingress rules in the live-1 cluster; the Ingress API refused 100% of POST requests","users":"all Cloud Platform users provisioning a new service","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"Turning on the validating webhook in the shared ingress controller module made the webhook a single point of failure for every ingress controller pod in the ingress-controllers namespace: when one controller could not come up, no team could create an ingress.","ko":"검증 웹훅을 켜는 옵션 하나가 네임스페이스에 있는 ingress 컨트롤러 파드 전체의 단일 장애점이 되었다. 컨트롤러 하나가 뜨지 못하자 그 웹훅이 클러스터 전체의 새 Ingress 생성을 막았다."},"related":[],"sources":[{"url":"https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2020-09-07-all-users-unable-create-new-ingress-rules.html","kind":"runbook","license":"unknown","archived":null}],"summary":{"en":"On the Ministry of Justice Cloud Platform, teams get their ingress controllers from a shared ingress controller module. Version 0.1.0 of that module turned on the creation of a ValidatingWebhookConfiguration, so the ingress controllers' admission webhook began validating Ingress objects. Turning this on made the webhook a single point of failure for all ingress controller pods in the ingress-controllers namespace.\n\nIn the live-1 cluster one new 0.1.0 ingress controller could not be created because of AWS resource limits. From then on the webhook blocked new ingress rules: calls to the admission service of an ingress controller failed with \"x509: certificate signed by unknown authority\", and the Ingress API refused all POST requests. The team removed by hand all the extra admission controllers that 0.1.0 had created, took the admission webhook out of the module, released version 0.1.1 and upgraded every ingress module that was on 0.1.0. The report gives the time to repair as 3h 02m and the time to resolve as 3h 17m.","ko":"Cloud Platform 은 팀마다 ingress 컨트롤러를 모듈로 배포한다. 이 모듈의 0.1.0 버전은 ValidatingWebhookConfiguration 리소스를 만드는 옵션을 켰다. 이 옵션은 ingress-controllers 네임스페이스에 있는 ingress 컨트롤러 파드 전체의 단일 장애점이 되었다.\n\nlive-1 클러스터에서 새 0.1.0 컨트롤러 하나가 AWS 리소스 한도 때문에 만들어지지 않았다. 그 뒤 검증 웹훅이 새 Ingress 규칙 생성을 막았고, API 서버는 웹훅을 부를 때 x509 인증서 오류를 냈다. 새 서비스를 띄우는 사용자는 Ingress 를 만들 수 없었다.\n\n팀은 0.1.0 이 만든 추가 admission 컨트롤러를 손으로 모두 지웠다. 이어서 모듈에서 admission 웹훅을 빼고 0.1.1 을 냈고, 0.1.0 을 쓰던 ingress 모듈을 모두 0.1.1 로 올렸다. 15:56 에 해결되었고, 복구까지 3시간 2분, 해결까지 3시간 17분이 걸렸다."},"trigger":{"en":"Version 0.1.0 of the team's ingress controller module started creating a ValidatingWebhookConfiguration resource, and one new 0.1.0 ingress controller in the live-1 cluster failed to be created because of AWS resource limits.","ko":"팀별 ingress 컨트롤러 모듈 0.1.0 은 ValidatingWebhookConfiguration 리소스를 만들도록 바뀌었다. live-1 클러스터에서는 새 0.1.0 컨트롤러 하나가 AWS 리소스 한도에 걸려 만들어지지 않았다."},"severity":"unknown","symptoms":["deploys-failing"],"timeline":{"detected_after":null,"resolved_after":"3h 17m"},"date_kind":"incident","detection":{"en":"The Ingress API was found refusing 100% of POST requests at 12:39; the incident was declared at 12:54.","ko":"문제는 2020-09-07 12:39 에 처음 감지되었다. 확인해 보니 Ingress API 가 POST 요청을 100% 거부하고 있었다. 팀은 Slack 스레드에서 조사를 시작했고 12:54 에 장애를 선언했다."},"components":["admission-webhook","ingress"],"root_cause":"deploy-rollout","remediation":[{"text":{"en":"removed by hand all the additional admission controllers created by module version 0.1.0","ko":"0.1.0 이 만든 추가 admission 컨트롤러를 손으로 모두 지웠다."}},{"text":{"en":"removed the admission webhook from the ingress controller module and released version 0.1.1","ko":"모듈에서 admission 웹훅을 빼고 새 릴리스 0.1.1 을 냈다."}},{"text":{"en":"upgraded every ingress module on version 0.1.0 to 0.1.1","ko":"0.1.0 을 쓰던 ingress 모듈을 모두 0.1.1 로 올렸다."}}],"action_items":[],"contributing":["single-point-of-failure"],"recurrence_of":null,"symptoms_text":{"en":"At 12:39 on 7 September 2020 the Cloud Platform team found that the Ingress API of the live-1 cluster was refusing every POST request. A user who provisioned a new service could not create an ingress into the cluster. The incident was declared at 12:54.\n\nCreating an ingress failed in the validating admission webhook with this error: \"Error from server (InternalError): error when creating \"ingress.yaml\": Internal error occurred: failed calling webhook \"validate.nginx.ingress.kubernetes.io\": Post offender-categorisation-prod-nx-controller-admission.ingress-controllers.svc:443/extensions/v1beta1/ingresses?timeout=30s: x509: certificate signed by unknown authority\".","ko":"2020-09-07 12:39 에 Cloud Platform 의 live-1 클러스터에서 새 Ingress 규칙이 만들어지지 않는 문제가 처음 감지되었다. Ingress API 가 POST 요청을 100% 거부하고 있었다.\n\nIngress 를 만들려고 하면 다음 오류가 났다. Error from server (InternalError): error when creating \"ingress.yaml\": Internal error occurred: failed calling webhook \"validate.nginx.ingress.kubernetes.io\": Post offender-categorisation-prod-nx-controller-admission.ingress-controllers.svc:443/extensions/v1beta1/ingresses?timeout=30s: x509: certificate signed by unknown authority\n\n오류는 웹훅 validate.nginx.ingress.kubernetes.io 를 부르는 단계에서 났다. 호출 대상은 ingress-controllers 네임스페이스의 offender-categorisation-prod-nx-controller-admission 서비스였다.\n\n새 서비스를 띄우려는 사용자는 클러스터로 들어오는 Ingress 를 만들 수 없었다. 팀은 Slack 스레드에서 조사를 시작했고 12:54 에 장애를 선언했다."},"updated_at":"2026-11-09T11:55:42.540140Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0088","org_slug":"uk-ministry-of-justice"}