Incident Library

IL-0522 Jenkins project · 2021-11-18kubernetesnetworking

An ingress-nginx chart upgrade deleted the jenkins.io Ingress and Fastly served HTTP/503 errors for hours

Fastly serves jenkins.io from an Ingress in the Jenkins infrastructure Kubernetes cluster. At 10:42 UTC on 18 November 2021 the ingress-nginx Helm chart was upgraded from 4.0.6 to the patch version 4.0.8, which brought a new admission webhook rule forbidding Ingress annotations that contain an Nginx configuration block. The jenkins.io Ingress rule did not comply and was deleted, the cluster answered HTTP/404 to Fastly, and from 11:07 UTC Fastly dropped pages from its cache and served HTTP/503. A user reported the errors at 11:32 UTC; no monitoring covered origin.jenkins.io. The team had trusted the patch version of a chart for a sensitive component, the Ingress controller, without a deep read of its changelog.

At 13:40 UTC the team disabled its automated systems, rolled the chart back to 4.0.6 and deleted the admission webhook by hand, which ended the first outage after 2h 37min. At 15:30 UTC, after a first batch of changes to the jenkins.io configuration, the chart was deployed at 4.0.8 again and caused a second outage. The fixes removed the forbidden annotations and upgraded the jenkins.io Helm chart to the last version known to work with ingress-nginx 4.0.8. At 17:11 UTC all required fixes had been applied, the automated system redeployed the jenkins.io Helm chart, the website was back and Fastly was told to drop all cached pages, ending the second outage after 1h 41min. The upgrade to ingress-nginx 4.0.9 was later done after a deep changelog check.

Severity
–
Scope
jenkins.io (also www.jenkins.io) was unavailable and answered HTTP/503 from 11:07 to 13:40 UTC and from 15:30 to 17:11 UTC on 18 November 2021
Users affected
–
Region
–
Time to detect
25m
Time to resolve
6h 4m

Symptoms

At 11:32 UTC on 18 November 2021, a user reported in the jenkinsci/jenkins Gitter channel that https://www.jenkins.io/doc/pipeline/steps/ was answering HTTP/503 errors with the message "Guru meditation" from Fastly's varnish.

The failure had started with an upgrade of the ingress-nginx Helm chart from 4.0.6 to 4.0.8, a patch version, at 10:42 UTC. The new chart created an admission webhook rule that forbids any Ingress annotation containing an Nginx configuration block, such as any `{}`. The Ingress rule for jenkins.io, www.jenkins.io, origin.jenkins.io and www.origin.jenkins.io did not comply and was deleted, so the pages answered HTTP/404 to Fastly.

From 11:07 UTC Fastly began to drop pages of jenkins.io from its cache because it could not update them from the Kubernetes cluster, and jenkins.io answered HTTP/503. There was no monitoring on origin.jenkins.io to report the errors once they were visible, and status.jenkins.io reported the incident at 11:49 UTC.

A manual fix brought jenkins.io back at 13:40 UTC. At 15:30 UTC, after a first batch of changes to the jenkins.io configuration in Kubernetes, the ingress-nginx chart was deployed at 4.0.8 again and jenkins.io went down a second time, until 17:11 UTC.

Symptom Service outageResources deleted

Root cause

Trigger
The ingress-nginx Helm chart was upgraded from 4.0.6 to 4.0.8 at 10:42 UTC, and the new chart added an admission webhook rule that forbids Nginx configuration blocks in Ingress annotations.

Detection

A user reported in the jenkinsci/jenkins Gitter channel at 11:32 UTC that a jenkins.io page answered HTTP/503 errors, and status.jenkins.io reported the incident at 11:49 UTC.

Remediation

Action items

Lessons

Trusting a patch version of a Helm chart for the Ingress controller without reading its changelog in depth let a new admission rule remove the jenkins.io Ingress in production. Without monitoring on origin.jenkins.io, a user found the outage. A complete staging cluster with the same DNS setup would have caught the problem before production.

Sources

References

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Ingress controller, Admission webhook, Helm among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.