Skip to content

fix WPB-26631: upgrade ingress-nginx controller to v1.13.9 for 5.25 - #948

Draft
lwille wants to merge 7 commits into
release-5.25-R2from
WPB-26631
Draft

lwille wants to merge 7 commits into
release-5.25-R2from
WPB-26631

Conversation

@lwille

@lwille lwille commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Fixes https://wearezeta.atlassian.net/browse/WPB-26631

Change type

  • Fix
  • Feature
  • Documentation
  • Security / Upgrade

Basic information

  • THIS CHANGE REQUIRES A DEPLOYMENT PACKAGE RELEASE
  • THIS CHANGE REQUIRES A WIRE-DOCS RELEASE

Testing

Locally verified: running pre_chart_process_0.sh against the 5.25.0 ingress-nginx-controller chart vendors ingress-nginx 4.13.9; helm template with the prod and demo values renders controller:v1.13.9, kube-webhook-certgen:v1.6.9 (tags, no digests) and annotations-risk-level: "Critical"; helm lint and shellcheck pass.

Offline Build CI (label-based)

build-default: builds the bundle and deploys it to Hetzner via offline/cd.sh. The deployment uses the prod example values, so it exercises the server-snippet annotation on the minio ingress of nginx-ingress-services.

Tracking

  • I added a new entry in an appropriate subdirectory of changelog.d
  • I mentioned this PR in Jira, OR I mentioned the Jira ticket in this PR.
  • I mentioned this PR in one of the issues attached to one of our repositories.

Knowledge Transfer

* [ ] An Asciinema session is attached to the Jira ticket.

Motivation

A customer on 5.25 reported CVEs in the bundled ingress-nginx controller image (v1.10.6, pinned in values/ingress-nginx-controller). Bumping the image tag to v1.12.1 broke nginx-ingress-services with:

admission webhook "validate.nginx.ingress.kubernetes.io" denied the request: annotation group ServerSnippet contains risky annotation based on ingress configuration

This branch provides a patched 5.25 bundle for that customer. It is not an official release.

Objective

Before After
ingress-nginx subchart of ingress-nginx-controller 4.11.5 4.13.9
controller image v1.10.6 v1.13.9
kube-webhook-certgen image v20220916-gd32f8c343 v1.6.9
controller.config.annotations-risk-level unset (High since controller v1.12) Critical

Nothing else changes; wire-server stays on 5.25.0.

Reason

Use case

Existing installations must update their own values/ingress-nginx-controller/values.yaml (image tags and annotations-risk-level: Critical) and upgrade ingress-nginx-controller before nginx-ingress-services. Step-by-step guide: offline/upgrades/ingress-nginx-controller-v1.13.md.

Hetzner removed the Datacenters API on 2026-10-01; requests now return
HTTP 410 (deprecated_api_endpoint), breaking every CD plan. Switch the
location pre-flight check to the hcloud_locations data source and pin
the hcloud provider to ~> 1.70 so provider upgrades are deliberate.
The retry loop iterated locations inside server types, so a capacity
miss for the first server type in hel1 fell through to fsn1/nbg1, where
VMs are rarely available. Iterate server types inside locations so hel1
is exhausted first.
The cleanup steps ran with `if: always()`, so when an earlier step
(e.g. the dev build) failed they ran before setup-terraform and died
with `terraform: command not found`. Only run them once terraform was
installed; if it wasn't, nothing can have been deployed.
The ingress-nginx-controller chart of wire-server 5.25.0 bundles
ingress-nginx 4.11.5, and the values pin controller image v1.10.6,
which has known CVEs.

- Replace the ingress-nginx subchart with 4.13.9 during the bundle build
  (pre_chart_process_0.sh). 4.13.x is the last ingress-nginx line that
  supports Kubernetes 1.29, which this bundle installs.
- Pin controller v1.13.9 and kube-webhook-certgen v1.6.9 in the values
  examples (tags only, digests are not supported by the bundle tooling).
- Set annotations-risk-level: Critical. Controller >= 1.12 defaults to
  High and rejects the nginx-ingress-services ingresses that use
  server-snippet / configuration-snippet annotations.
- Add an upgrade guide for existing installations and changelog entries.
@lwille
lwille requested review from a team and julialongtin as code owners November 9, 2026 15:13
lwille and others added 2 commits November 9, 2026 16:18
* WPB-29054: use minio mirror for fake-aws-s3

Porting:
> https://wearezeta.atlassian.net/browse/WPB-29054
> Note: Fixing or replacing the broken fake-aws-s3 chart is not in scope.

* lint: add newline at end of file
* lint: newline
* fix: block fake-aws-s3 from default-build
* removed ineffective values
setup_nodes.yml connected to adminhost_local (private IP, through the
public adminhost) right after the VMs were created and failed with
'Connection timed out during banner exchange'. Wait for SSH first, as
#919 does for wiab-staging.
release-5.25-R2 commented out `main` (846d27f), and only cd_staging.sh
appended it back on the CI host. The default verify (cd.sh) therefore
only installed Kubernetes and never deployed any chart, so it did not
test the ingress-nginx upgrade.

Re-enable `main` and drop the append from cd_staging.sh (it would now
run main twice). The upgrade guide warns not to run offline-deploy.sh /
helm-operations.sh on existing installations, as they replace values.yaml
with the examples.
@lwille
lwille marked this pull request as draft November 11, 2026 15:25

@mohitrajain mohitrajain left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM


# pulling the charts based on builds.json, charts to be skipped are passed as arguments HELM_CHART_EXCLUDE_LIST
"${TASKS_DIR}"/proc_pull_charts.sh OUTPUT_DIR="${OUTPUT_DIR}" HELM_CHART_EXCLUDE_LIST="inbucket,wire-server-enterprise,postgresql,rust-sft,fluent-bit"
"${TASKS_DIR}"/proc_pull_charts.sh OUTPUT_DIR="${OUTPUT_DIR}" HELM_CHART_EXCLUDE_LIST="inbucket,wire-server-enterprise,postgresql,rust-sft,fluent-bit,fake-aws-s3"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can also add nginx-ingress-controller to the list - we don't use it and it is coming from builds.json.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants