Skip to content

OCPBUGS-113993: [release-4.20] fix router component ordering to prevent missing HAProxy backends - #9399

Open
bennerv wants to merge 6 commits into
openshift:release-4.20from
bennerv:cherry-pick-9263-to-release-4.20
Open

OCPBUGS-113993: [release-4.20] fix router component ordering to prevent missing HAProxy backends#9399
bennerv wants to merge 6 commits into
openshift:release-4.20from
bennerv:cherry-pick-9263-to-release-4.20

Conversation

@bennerv

@bennerv bennerv commented Aug 25, 2026

Copy link
Copy Markdown
Member

Summary

Manual cherry-pick of #9263 (release-4.21) to release-4.20. The router component could reconcile before route-creating components had created their routes, producing a router config with missing HAProxy backends and causing NodePool ignition failures on Azure due to swift NIC contention.

The automated cherry-pick could not be applied cleanly, so this PR reproduces the change manually.

Commits

  • fix(control-plane-operator): ensure router component runs after route-creating components
  • fix(control-plane-operator): drop metrics-proxy from router WithDependencies
  • fix(control-plane-component): exclude ignition-server from implicit KAS dependency
  • fix(router): conditionally include oauth-internal in ARO route predicate
  • fix(control-plane-component): exclude ignition-server-proxy from implicit KAS dependency
  • fix: adapt cherry-picked changes for release-4.20

Conflict resolution / fixes applied

  • Dropped testdata/router/GCP/zz_fixture_TestControlPlaneComponents_router_controlplanecomponent.yaml — release-4.20 has no GCP router test case, so this fixture is not generated on this branch (modify/delete conflict).
  • Verified the resulting net diff matches the merged release-4.21 change exactly (aside from the GCP fixture that does not exist on 4.20).
  • go build, go vet, the router component tests, and TestControlPlaneComponents all pass with no fixture drift.

References

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

OpenShift CI Bot and others added 5 commits August 25, 2026 16:54
…-creating components

Add a predicate to the router component that ensures all expected HCP
router routes exist and are ready before reconciling on ARO-HCP clusters.
This includes kube-apiserver-internal, konnectivity-server, oauth-internal,
ignition-server, and conditionally metrics-proxy when metrics forwarding
is enabled.

The router also declares explicit WithDependencies on ignition-server and
metrics-proxy components to give the informer cache more time to sync
after those components create their routes via server-side apply.

Add a TODO for introducing live reloading (like shared proxy) so the
router config is updated when routes change after the initial reconcile.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
(cherry picked from commit 7820bb7)
…dencies

The metrics-proxy component is conditional (only created when
MetricsForwarding.Mode=Forward), so declaring it as a hard dependency
causes a deadlock on platforms where it is never instantiated (e.g. GKE).
The router predicate already ensures metrics-proxy routes exist before
reconciling, making the explicit dependency unnecessary.

Update all 5 router fixture YAML files to match the actual declared
dependency (ignition-server only).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
(cherry picked from commit 0fa80da)
…AS dependency

The ignition-server only needs the management cluster KAS (via its
service account token), not the hosted cluster KAS. Including it in
the implicit KAS dependency creates a deadlock on private clusters
with KMS encryption (e.g. Azure ARO-HCP with private Key Vault):

  Router → ignition-server → KAS → Router (for KMS connectivity)

By excluding ignition-server from the KAS dependency, its deployment
and route are created independently, unblocking the router, which in
turn provides the network path KAS needs to reach the KMS endpoint.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
(cherry picked from commit 25c74d3)
The oauth-internal route is only created by the infra reconciler when
OAuth is enabled (HCPOAuthEnabled). When OAuth is disabled (e.g. OIDC
authentication), the route is never created, causing the ARO router
predicate to wait forever — a deadlock.

Move oauth-internal from the unconditional base list to a conditional
append gated on HCPOAuthEnabled, matching how the infra reconciler
decides whether to create the route.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
(cherry picked from commit fee9dc6)
…icit KAS dependency

The ignition-server-proxy component does not need the hosted KAS —
it only proxies to the ignition-server, which is already excluded.
Including it in the implicit KAS dependency creates the same deadlock
as ignition-server on private clusters with KMS encryption: the router
waits for the ignition-server-proxy Service to exist, but ignition-
server-proxy waits for KAS, which waits for the router.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
(cherry picked from commit 61d8a05)
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Aug 25, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@bennerv: This pull request references Jira Issue OCPBUGS-113993, which is invalid:

  • release note text must be set and not match the template OR release note type must be set to "Release Note Not Required". For more information you can reference the OpenShift Bug Process.

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

Summary

Manual cherry-pick of #9263 (release-4.21) to release-4.20. The router component could reconcile before route-creating components had created their routes, producing a router config with missing HAProxy backends and causing NodePool ignition failures on Azure due to swift NIC contention.

The automated cherry-pick could not be applied cleanly, so this PR reproduces the change manually.

Commits

  • fix(control-plane-operator): ensure router component runs after route-creating components
  • fix(control-plane-operator): drop metrics-proxy from router WithDependencies
  • fix(control-plane-component): exclude ignition-server from implicit KAS dependency
  • fix(router): conditionally include oauth-internal in ARO route predicate
  • fix(control-plane-component): exclude ignition-server-proxy from implicit KAS dependency
  • fix: adapt cherry-picked changes for release-4.21

Conflict resolution / fixes applied

  • Dropped testdata/router/GCP/zz_fixture_TestControlPlaneComponents_router_controlplanecomponent.yaml — release-4.20 has no GCP router test case, so this fixture is not generated on this branch (modify/delete conflict).
  • Verified the resulting net diff matches the merged release-4.21 change exactly (aside from the GCP fixture that does not exist on 4.20).
  • go build, go vet, the router component tests, and TestControlPlaneComponents all pass with no fixture drift.

References

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

Instructions 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 openshift-eng/jira-lifecycle-plugin repository.

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a7ac4496-a257-4822-9eec-00e82ea0daa6

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@openshift-ci
openshift-ci Bot requested review from enxebre and hasueki August 25, 2026 21:08
@openshift-ci openshift-ci Bot added area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release and removed do-not-merge/needs-area labels Aug 25, 2026
- Remove endpoint_resolver and metrics_proxy references (packages do
  not exist on release-4.20)
- Remove metricsProxyRouteRequired and related tests (MetricsForwarding
  API does not exist on release-4.20)
- Replace azureutil.IsAroHCPByHCP with azureutil.IsAroHCP (ByHCP
  variant does not exist on release-4.20)
- Remove AzureTopologyPrivate from test helper (type does not exist on
  release-4.20)
- Add SwiftPodNetworkInstanceAnnotation to aroHCP test helper and
  SetAsAroHCPTest calls (IsPrivateHCP checks env var on release-4.20)
- Use FakeReleaseProvider instead of gomock-generated mock (mock file
  not generated on release-4.20)
- Only check ignitionserverv2.ComponentName in router ordering test
  (metricsproxyv2 does not exist on release-4.20)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
(cherry picked from commit cc36777)
@bennerv
bennerv force-pushed the cherry-pick-9263-to-release-4.20 branch from f29c4e1 to 0574472 Compare August 26, 2026 14:06
@bennerv

bennerv commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

/jira refresh

@openshift-ci-robot openshift-ci-robot added jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. and removed jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Sep 2, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@bennerv: This pull request references Jira Issue OCPBUGS-113993, which is valid. The bug has been moved to the POST state.

7 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.20.z) matches configured target version for branch (4.20.z)
  • bug is in the state New, which is one of the valid states (NEW, ASSIGNED, POST)
  • release note type set to "Release Note Not Required"
  • dependent bug Jira Issue OCPBUGS-105434 is in the state Closed (Done), which is one of the valid states (VERIFIED, RELEASE PENDING, CLOSED (ERRATA), CLOSED (CURRENT RELEASE), CLOSED (DONE), CLOSED (DONE-ERRATA))
  • dependent Jira Issue OCPBUGS-105434 targets the "4.21.z" version, which is one of the valid target versions: 4.21.0, 4.21.z
  • bug has dependents
Details

In response to this:

/jira refresh

Instructions 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 openshift-eng/jira-lifecycle-plugin repository.

@bennerv

bennerv commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

/retest-required

1 similar comment
@bennerv

bennerv commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

/retest-required

@bryan-cox bryan-cox left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

/approve

@openshift-ci

openshift-ci Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bennerv, bryan-cox

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Sep 3, 2026
@bennerv

bennerv commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

/retest-required

1 similar comment
@bennerv

bennerv commented Sep 4, 2026

Copy link
Copy Markdown
Member Author

/retest-required

@bennerv

bennerv commented Sep 4, 2026

Copy link
Copy Markdown
Member Author

/verified by e2e Azure/ARO-HCP#6697

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Sep 4, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@bennerv: This PR has been marked as verified by e2e https://github.com/Azure/ARO-HCP/pull/6697.

Details

In response to this:

/verified by e2e Azure/ARO-HCP#6697

Instructions 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 openshift-eng/jira-lifecycle-plugin repository.

@twolff-gh

Copy link
Copy Markdown
Contributor

/verified by e2e Azure/ARO-HCP#6697

Confirmed by @twolff-gh

@twolff-gh

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Sep 4, 2026
@bennerv

bennerv commented Sep 4, 2026

Copy link
Copy Markdown
Member Author

/retest-required

@csrwng csrwng added the backport-risk-assessed Indicates a PR to a release branch has been evaluated and considered safe to accept. label Sep 4, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD ef0d161 and 2 for PR HEAD 0574472 in total

@bennerv

bennerv commented Sep 6, 2026

Copy link
Copy Markdown
Member Author

/retest-required

1 similar comment
@bennerv

bennerv commented Sep 8, 2026

Copy link
Copy Markdown
Member Author

/retest-required

@bennerv

bennerv commented Sep 8, 2026

Copy link
Copy Markdown
Member Author

/test e2e-kubevirt-aws-ovn-reduced

@bennerv

bennerv commented Sep 8, 2026

Copy link
Copy Markdown
Member Author

/retest-required

2 similar comments
@bennerv

bennerv commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

/retest-required

@bennerv

bennerv commented Sep 9, 2026

Copy link
Copy Markdown
Member Author

/retest-required

@openshift-ci

openshift-ci Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

@bennerv: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-kubevirt-aws-ovn-reduced 0574472 link true /test e2e-kubevirt-aws-ovn-reduced
ci/prow/e2e-aws-upgrade-hypershift-operator 0574472 link true /test e2e-aws-upgrade-hypershift-operator

Full PR test history. Your PR dashboard.

Details

Instructions 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.

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release backport-risk-assessed Indicates a PR to a release branch has been evaluated and considered safe to accept. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants