feat: set dataPlaneHAProxyImage to decouple worker HAProxy from management cluster - #6660
Conversation
…ement cluster Restructure `dataPlaneHAProxyImage` from an empty string to a `containerImage` object (registry/repository/digest), matching the existing `sharedIngressImage` pattern. This enables Cluster Service to annotate NodePools with `hypershift.openshift.io/haproxy-image`, decoupling worker node HAProxy images from the management cluster's `IMAGE_SHARED_INGRESS_HAPROXY` environment variable. Without this, bumping the management cluster HAProxy image triggers unintended worker node rollouts across all hosted clusters (see incident ARO-27681 / AROSLSRE-978). Changes: - Config schema: dataPlaneHAProxyImage now uses containerImage ref - Config values: populated with same image as sharedIngressImage - values.yaml: assembles ACR reference from structured fields - pipeline.yaml: added mirror step to copy image to OCP ACR - Materialized configs and helm fixtures updated Refs: ARO-27756, AROSLSRE-994
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: avollmer-redhat The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
There was a problem hiding this comment.
Pull request overview
This PR decouples hosted cluster worker HAProxy image selection from the management cluster by introducing a structured dataPlaneHAProxyImage configuration and wiring it through Cluster Service’s deployment so it can set the NodePool HAProxy image explicitly.
Changes:
- Converted
clustersService.dataPlaneHAProxyImagefrom a string to a structuredcontainerImage(registry/repository/digest) in config defaults and schema. - Updated Cluster Service Helm values/fixtures so the deployment renders
--data-plane-ha-proxy-image=<ocp-acr>/<repo>@<digest>when configured. - Added an
ImageMirrorpipeline step to mirror the data plane HAProxy image into the OCP ACR prior to deployment.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| config/rendered/dev/pers/westus3.yaml | Materialized config: sets structured dataPlaneHAProxyImage fields. |
| config/rendered/dev/perf/westus3.yaml | Materialized config: sets structured dataPlaneHAProxyImage fields. |
| config/rendered/dev/dev/westus3.yaml | Materialized config: sets structured dataPlaneHAProxyImage fields. |
| config/rendered/dev/cspr/westus3.yaml | Materialized config: sets structured dataPlaneHAProxyImage fields. |
| config/rendered/dev/ci01/centralus.yaml | Materialized config: sets structured dataPlaneHAProxyImage fields. |
| config/rendered/dev/ci00/centralus.yaml | Materialized config: sets structured dataPlaneHAProxyImage fields. |
| config/config.yaml | Adds default dataPlaneHAProxyImage object (matching shared ingress image digest). |
| config/config.schema.json | Updates schema type for dataPlaneHAProxyImage to containerImage. |
| cluster-service/zz_fixture_TestHelmTemplate_dev_westus3_svc_1_cluster_service.yaml | Helm fixture: includes rendered --data-plane-ha-proxy-image=... arg. |
| cluster-service/values.yaml | Assembles the data plane HAProxy image ref as an OCP ACR digest reference for workers. |
| cluster-service/testdata/zz_fixture_TestHelmTemplate_cs_shared_arm_helper.yaml | Helm fixture: includes rendered --data-plane-ha-proxy-image=... arg. |
| cluster-service/testdata/zz_fixture_TestHelmTemplate_cs_distinct_arm_helper.yaml | Helm fixture: includes rendered --data-plane-ha-proxy-image=... arg. |
| cluster-service/testdata/zz_fixture_TestHelmTemplate_cs_containerdb.yaml | Helm fixture: includes rendered --data-plane-ha-proxy-image=... arg. |
| cluster-service/testdata/zz_fixture_TestHelmTemplate_cs_azuredb.yaml | Helm fixture: includes rendered --data-plane-ha-proxy-image=... arg. |
| cluster-service/pipeline.yaml | Adds mirror-data-plane-haproxy-image ImageMirror step and makes deploy depend on it. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| "dataPlaneHAProxyImage": { | ||
| "type": "string", | ||
| "description": "A valid image reference used for overriding the HAProxy image of the worker node API server proxy. If set to an empty string, either the environment variable IMAGE_SHARED_INGRESS_HAPROXY or the default shared ingress image will be used." | ||
| "$ref": "#/definitions/containerImage" | ||
| } | ||
| }, | ||
| "additionalProperties": false, |
| "dataPlaneHAProxyImage": { | ||
| "type": "string", | ||
| "description": "A valid image reference used for overriding the HAProxy image of the worker node API server proxy. If set to an empty string, either the environment variable IMAGE_SHARED_INGRESS_HAPROXY or the default shared ingress image will be used." | ||
| "$ref": "#/definitions/containerImage" | ||
| } |
|
/retest |
|
e2e-parallel failure is unrelated to this PR. The single failing test is This is a Kusto infrastructure/connectivity flake, not related to the config/values/pipeline changes in this PR. Retesting. |
|
/retest |
|
e2e-parallel failure (run 2) — again unrelated to this PR. 7 test failures this run, all platform-wide infrastructure issues:
Dev CI is broadly broken today (Aug 24). Per CIHealth dashboard, 78% of all e2e runs are affected:
Root cause identified by Giulio Frasca (Slack thread): None of these failures are related to config/values/pipeline changes in this PR. Retesting. |
|
e2e-parallel run 3 failed with 2 tests — both unrelated:
The Kusto /retest |
|
Update: #6666 is the cleaner fix for the Kusto #6666 has all non-e2e checks green and e2e-parallel is currently running. Once it merges, the Kusto test should stop failing for all PRs including ours. /retest |
|
#6666 merged at 06:53 UTC — the Kusto Retesting now — this should be the first run with the fix included. /retest |
|
Anthony Vollmer (@avollmer-redhat): The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
|
e2e-parallel run 5 failed — 14 test failures, all platform-wide infrastructure issues unrelated to this PR:
The Kusto SEM0026 fix (#6666) is confirmed working — zero Kusto failures this run. The sole remaining blocker is the router deployment unavailability flake on ephemeral CI management clusters, which is hitting all PRs equally. /retest |
Why
Bumping the management cluster HAProxy image (
IMAGE_SHARED_INGRESS_HAPROXY) currently triggers unintended worker node rollouts across all hosted clusters because NodePools lack thehypershift.openshift.io/haproxy-imageannotation. Without this annotation, worker nodes inherit the management cluster's HAProxy image, coupling data plane image versions to control plane upgrades (see incident ARO-27681 / AROSLSRE-978).This PR enables Cluster Service to explicitly set the data plane HAProxy image on every NodePool, breaking that coupling. Once all environments have annotation coverage, AROSLSRE-994 can safely unpin the prod region digest overrides.
What
Restructures
dataPlaneHAProxyImagefrom an empty string to a structuredcontainerImageobject (registry/repository/digest), matching the existingsharedIngressImagepattern:dataPlaneHAProxyImagechanged from"type": "string"to"$ref": "#/definitions/containerImage"sharedIngressImage(safe: no image change, just enables annotation)<acr.ocp.name>.azurecr.io/<repo>@<digest>)mirror-data-plane-haproxy-imageImageMirror step to copy the image to the OCP ACR (where worker nodes pull from)make materializeVerification
make materialize,make validate-config-pipelines,make verify-schemaall passpers-usw3avol)--data-plane-ha-proxy-image=arohcpocpdev.azurecr.io/...@sha256:5e22710f...flagRollout Plan
sha256:4eea8f36...)Safety
The default digest (
sha256:5e22710f...) matches the currentsharedIngressImagedigest in all non-overridden regions. Enabling the annotation does not change the actual image used — it only makes the assignment explicit, preventing future management cluster image bumps from cascading to worker nodes.PROD uksouth and australiaeast have pinned overrides (
sha256:4eea8f36...) that must be set via sdp-pipelines overlays before those regions are deployed (Phase 1.4-1.5 in the rollout plan).Refs: ARO-27756, AROSLSRE-994