Skip to content

TBD: Support different classes of Gateway API#1990

Open
rikatz wants to merge 1 commit intoopenshift:masterfrom
rikatz:multiple-svc-class
Open

TBD: Support different classes of Gateway API#1990
rikatz wants to merge 1 commit intoopenshift:masterfrom
rikatz:multiple-svc-class

Conversation

@rikatz
Copy link
Copy Markdown
Member

@rikatz rikatz commented Apr 28, 2026

What

Enhancement proposal for supporting different Gateway API service topologies via dedicated GatewayClasses (openshift-external, openshift-internal, openshift-clusterip), allowing users to provision Gateways with the right service configuration based on the GatewayClass they select.

Why

Today, the openshift-default GatewayClass always provisions an external LoadBalancer service. Users who need internal LoadBalancers or ClusterIP services must manually patch the provisioned service, which is fragile and unsupported. Cluster administrators need a declarative way to get the right service topology — including platform-specific annotations, externalTrafficPolicy, and OVN local-with-fallback — automatically applied, the same way CIO already does for IngressControllers. This is also a common pattern in other Gateway API implementations where different GatewayClasses map to different service configurations. Backporting is desired for existing OCP deployments.

Changes

  • Adds a new enhancement proposal at enhancements/ingress/support-different-gateway-api-service-provisioning-with-different-gatewayclass.md
  • Proposes three new OpenShift-managed GatewayClasses:
    • openshift-external: external LoadBalancer with platform-specific annotations (AWS NLB, Azure, GCP, IBM, OpenStack)
    • openshift-internal: internal LoadBalancer with the corresponding internal annotations per platform
    • openshift-clusterip: ClusterIP service, no LoadBalancer or DNS provisioned
  • CIO creates one GatewayClass defaults ConfigMap per class using the Istio GatewayClass defaults mechanism, reusing existing IngressController annotation-derivation logic for consistency
  • Introduces a ValidatingAdmissionPolicy (VAP) to enforce that the openshift-* GatewayClass name prefix is reserved for the OpenShift controller name, and only the four allowlisted class names are permitted (CREATE-only, since name and controllerName are immutable)
  • Documents explicit service configuration details per platform (AWS, Azure, GCP, IBM, OpenStack) including externalTrafficPolicy and OVN local-with-fallback annotation
  • Calls out OSSM version dependency: the GatewayClass defaults ConfigMap mechanism requires a specific OSSM patch that must be verified before implementation and backport planning
  • Leaves downgrade strategy, NodePort support, and VAP warn-vs-deny as open questions / TODOs

@openshift-ci openshift-ci Bot requested review from candita and knobunc April 28, 2026 21:38
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 28, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign alebedev87 for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found 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
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 28, 2026

@rikatz: The following test 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/markdownlint 77bda8a link true /test markdownlint

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.

@rikatz
Copy link
Copy Markdown
Member Author

rikatz commented Apr 30, 2026

/cc @Miciah @gcs278

@openshift-ci openshift-ci Bot requested review from Miciah and gcs278 April 30, 2026 21:13
Each GatewayClass maps to a specific service type and
configuration: external LoadBalancer, internal LoadBalancer, or
ClusterIP. The Cluster Ingress Operator (CIO) provisions a default
ConfigMap per GatewayClass using the sail-operator library,
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.

minor point - is this implying the sail-operator would create the config map for us, and thus the OSSM team owns the logic? I don't think that's what we would want - CIO should own creating the gatewayclasses right?


## Proposal

The Cluster Ingress Operator will be extended to recognize three
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.

Hmm what about discoverability? It feels like we should auto create the gatewayclasses, otherwise, it's not clear that they are available to the user.

We could either:

  1. Keep workflow as openshift-default installs GWAPI and CIO creates the 3 new gatewayclasses after openshift-default is created
  2. Enable all openshift-* to install GWAPI (like you have described here), but create the other 3 when installing.

Thoughts? Maybe it's not that big of a deal, but it would be a nice-to-have UX improvement.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants