Skip to content

feat(gatewayapi): add gatewayAPIChannel for Gateway API CRD channel selection#4981

Draft
electricjesus wants to merge 2 commits into
tigera:masterfrom
electricjesus:seth/gatewayapi-crd-channel
Draft

feat(gatewayapi): add gatewayAPIChannel for Gateway API CRD channel selection#4981
electricjesus wants to merge 2 commits into
tigera:masterfrom
electricjesus:seth/gatewayapi-crd-channel

Conversation

@electricjesus

@electricjesus electricjesus commented Jun 30, 2026

Copy link
Copy Markdown
Member

Description

Today the operator installs a fixed, experimental set of Gateway API CRDs. This PR adds a GatewayAPI.spec.gatewayAPIChannel field so you can pick the channel: Standard or Experimental (the default).

Why a second chart: the packaged gateway-helm chart ships only a static experimental CRD set and has no channel switch. That switch lives in the separate gateway-crds-helm chart. So the operator now also embeds gateway-crds-helm and renders it for the chosen channel to install the Gateway API and Envoy CRDs. gateway-helm still provides the controller resources and the safe-upgrades ValidatingAdmissionPolicy.

The default stays Experimental because Envoy Gateway uses the experimental-only TCPRoute and UDPRoute types; Standard drops those. This field is independent of crdManagement, which decides whether the operator creates or overwrites the CRDs.

  • Type: new feature.
  • Components: gatewayapi render + controller, istio controller (a caller of the CRD render), CRD manifests.

Testing:

  • make gen-files is clean.
  • Unit tests in pkg/render/gatewayapi render the real charts and check the CRD set per channel: Experimental includes TCPRoute/UDPRoute; Standard does not; the GA ListenerSet and the Envoy CRDs are present in both.
  • FV specs in test/gatewayapi_test.go run the GatewayAPI controller against a kind cluster and assert the operator installs the matching channel, checked via the gateway.networking.k8s.io/channel annotation on the gateways CRD: the default installs the experimental channel (with TCPRoute present), and Standard reconciles gateways onto the standard channel. Verified locally (Ran 2 of 2 Specs ... 2 Passed).
  • pkg/controller/gatewayapi and pkg/controller/istio unit tests pass.

Release Note

Added GatewayAPI.spec.gatewayAPIChannel (Standard or Experimental, default Experimental) to select which Gateway API CRD channel the operator installs.

For PR author

  • Tests for change.
  • If changing pkg/apis/, run make gen-files
  • If changing versions, run make gen-versions (not applicable)

…election

The operator installed a fixed, experimental set of Gateway API CRDs. This adds
GatewayAPI.spec.gatewayAPIChannel (Standard | Experimental, default Experimental)
to choose which upstream Gateway API CRD channel the operator installs.

The packaged gateway-helm chart ships only a static experimental CRD set, so the
operator now also embeds gateway-crds-helm and renders it for the chosen channel
(crds.gatewayAPI.enabled + channel, crds.envoyGateway.enabled) to install the
Gateway API and Envoy CRDs. gateway-helm still provides the controller resources
and the safe-upgrades ValidatingAdmissionPolicy.

The default stays Experimental because Envoy Gateway uses the experimental-only
TCPRoute and UDPRoute types; the Standard channel omits those. The channel is
independent of crdManagement, which governs whether the CRDs are created or
overwritten.

- api/v1: GatewayAPIChannel enum + field; regenerated CRD schema and deepcopy
- pkg/render/gatewayapi: embed gateway-crds-helm.tgz, channel-aware CRD render
  with a per-channel cache and a ResolveChannel helper
- controllers: gatewayapi reads the CR channel; istio passes Experimental to
  keep its existing CRD set
- Makefile: pull gateway-crds-helm.tgz at ENVOY_GATEWAY_VERSION
- docs/common_tasks.md: note the second chart in the Envoy Gateway update steps
@marvin-tigera marvin-tigera added this to the v1.44.0 milestone Jun 30, 2026
@electricjesus electricjesus added the kind/enhancement New feature or request label Jun 30, 2026
@marvin-tigera marvin-tigera removed the kind/enhancement New feature or request label Jun 30, 2026
@electricjesus electricjesus added the kind/enhancement New feature or request label Jun 30, 2026
@marvin-tigera marvin-tigera removed the kind/enhancement New feature or request label Jun 30, 2026
@electricjesus electricjesus added the kind/enhancement New feature or request label Jun 30, 2026
Two FV specs in the GatewayAPI suite create a GatewayAPI with crdManagement
Reconcile and assert the operator installs the matching Gateway API CRD channel,
checked via the gateway.networking.k8s.io/channel annotation on the gateways CRD:

- default (no channel) installs the experimental channel, and the
  experimental-only TCPRoute CRD is present
- gatewayAPIChannel Standard reconciles the gateways CRD onto the standard channel
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