GatewayClass¶
Overview¶
GatewayClass is a cluster-scoped resource defined by the infrastructure provider. This resource represents a class of Gateways that can be instantiated. You must apply GatewayClass only once in a cluster. GatewayClass is applied at the global level.
When you delete a GatewayClass Custom Resource (CR) from the cluster, the data plane configuration is also deleted. When you reapply the GatewayClass, the other related CRs may not work automatically. Delete and reapply all related CRs to restore them. Perform CR operations only when the controller is in a running state.
CR Parameters¶
The table below describes the supported GatewayClass CR spec parameters.
Parameters |
Description |
Implementation Details |
|---|---|---|
|
The name of the controller that manages the Gateways of this class. The value must be a domain-prefixed path. This is a mandatory field. For example, f5.com/ |
|
|
Specifies the definition of GatewayClass. For example, F5 BIG-IP Kubernetes Gateway |
As per the Gateway API community standard. |
GatewayClass CR Status¶
The GatewayClass resource includes a supportedFeatures field in its status. This field lists all Gateway API features that the installed controller supports. You can use this field to discover supported features directly from the cluster. The supportedFeatures list is sorted in ascending alphabetical order as required by GEP-2162.
F5 BIG-IP Kubernetes Gateway (f5-cne-controller) populates the supportedFeatures field in GatewayClass status during controller initialization. The controller sets this field before or at the same time it accepts the GatewayClass.
Note
The supportedFeatures list contains only Gateway-related features. Mesh features are not included.
Supported features¶
Feature |
Description |
|---|---|
|
Support for BackendTLSPolicy to configure TLS settings for connections from the gateway to backend services. |
|
Core Gateway resource support, including listener configuration and address management. |
|
Support for Gateways that do not specify an explicit address. |
|
Support for isolating HTTP listeners so that routes attached to one listener do not affect traffic on other listeners. |
|
Support for Gateway listeners on port 8080. |
|
Support for assigning static addresses to Gateway resources. |
|
Core GRPCRoute resource support, including service and method matching for gRPC over HTTP/2. |
|
Support for named rules within a GRPCRoute. |
|
Core HTTPRoute resource support, including path, header, method, and query parameter matching. |
|
Support for forwarding traffic to backends using cleartext HTTP/2 (h2c). |
|
Support for forwarding WebSocket upgrade requests to backends. |
|
Support for Cross-Origin Resource Sharing (CORS) configuration through the HTTPRoute CORS filter. |
|
Support for matching requests based on the destination port. |
|
Support for rewriting the HTTP |
|
Support for matching requests based on the HTTP method (for example, GET, POST). |
|
Support for named rules within an HTTPRoute. |
|
Support for specifying a port in the |
|
Support for redirecting requests with a modified path. |
|
Support for rewriting the request URI path when forwarding to backends. |
|
Support for redirecting requests to a different port. |
|
Support for matching requests based on query parameter values. |
|
Support for adding, setting, or removing HTTP response headers. |
|
Support for redirecting requests from HTTP to HTTPS (or the reverse). |
|
Support for configuring per-rule backend request timeouts. |
|
Support for configuring per-rule overall request timeouts. |
|
Support for cross-namespace references using ReferenceGrant. Allows routes to reference backends in other namespaces. |
|
Core TLSRoute resource support, including Server Name Indication (SNI)-based TLS passthrough routing to backend services. |
View supported features
To view the features the installed GatewayClass supports, run:
$ kubectl get gatewayclass <gatewayclass-name> -o yaml
Replace <gatewayclass-name> with the name of your GatewayClass resource.
Example output:
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: distribute-http-gateway-class
spec:
controllerName: f5.com/default-f5-cne-controller
description: F5 BIG-IP Kubernetes Gateway
status:
conditions:
- lastTransitionTime: "2026-07-21T09:01:17Z"
message: ""
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
supportedFeatures:
- name: BackendTLSPolicy
- name: Gateway
- name: GatewayAddressEmpty
- name: GatewayHTTPListenerIsolation
- name: GatewayPort8080
- name: GatewayStaticAddresses
- name: GRPCRoute
- name: GRPCRouteNamedRule
- name: HTTPRoute
- name: HTTPRouteBackendProtocolH2C
- name: HTTPRouteBackendProtocolWebSocket
- name: HTTPRouteCORS
- name: HTTPRouteDestinationPortMatching
- name: HTTPRouteHostRewrite
- name: HTTPRouteMethodMatching
- name: HTTPRouteNamedRouteRule
- name: HTTPRouteParentRefPort
- name: HTTPRoutePathRedirect
- name: HTTPRoutePathRewrite
- name: HTTPRoutePortRedirect
- name: HTTPRouteQueryParamMatching
- name: HTTPRouteResponseHeaderModification
- name: HTTPRouteSchemeRedirect
- name: HTTPRouteTimeoutBackendRequest
- name: HTTPRouteTimeoutRequest
- name: ReferenceGrant
- name: TLSRoute
The Accepted condition of GatewayClass¶
conditions.status |
conditions.reason |
description |
|---|---|---|
Unknown |
Pending |
Initial state. Waiting for the controller. |
True |
Accepted |
Accepted |
Sample CR¶
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: my-gateway-class
spec:
controllerName: "f5.com/f5-bnk-instance-f5-cne-controller"
description: "F5 BIG-IP Kubernetes Gateway"
Delete GatewayClass CR¶
After you delete the GatewayClass custom resource, verify the following before you reapply it:
Confirm that all IPAM and IPAMRange custom resources have been removed from the BNK namespace.
If you use Infoblox, confirm that the associated IPs have been released.
In public cloud environments, confirm that all WideIPs have been removed from the GTM.
Ensuring a clean state before you reapply the custom resource prevents unpredictable behavior.