Kubernetes Gateway API Compatibility
Kubernetes Gateway API Compatibility
This document describes which Gateway API resources FSM supports and the extent of that support.
Summary
| Resource | Support Status |
|---|---|
| GatewayClass | Partially supported |
| Gateway | Partially supported |
| HTTPRoute | Partially supported |
| TLSRoute | Partially supported |
| GRPCRoute | Partially supported |
| TCPRoute | Partially supported |
| UDPRoute | Partially supported |
| ReferenceGrant | Not supported |
| Custom policies | Partially supported |
Terminology
We use the following words to describe support status:
- Supported. The resource or field is fully supported and conformant to the Gateway API specification.
- Partially supported. The resource or field is supported partially or with limitations. It will become fully supported in future releases.
- Not supported. The resource or field is not yet supported. It will become partially or fully supported in future releases.
Resources
Below we list the resources and the support status of their corresponding fields.
For a description of each field, visit the Gateway API documentation.
GatewayClass
Status: Partially supported.
FSM supports only GatewayClass resource whose ControllerName is flomesh.io/gateway-controller. If multiple valid GatewayClasses are created, the oldest is active and take effect.
Fields:
speccontrollerName- supported.parametersRef- not supported.description- supported.
statusconditions- partially supported. SupportAcceptedtype and added ConditionTypeActive.
Gateway
Status: Partially supported.
FSM supports only a single Gateway resource per namespace.
The Gateway resource must reference FSM’s corresponding effective GatewayClass, whose controller name is flomesh.io/gateway-controller.
In case of multiple Gateway resources created in the same namespace, FSM will choose the oldest ONE by creation timestamp. If the timestamps are equal, FSM will choose the resource that appears first in alphabetical order by “{name}”. We might support multiple Gateway resources.
Due to the limitation of Kubernetes Service of type LoadBalancer, the UDP gateway cannot coexist with gateways of other protocols. If you want to use UDP gateway, you need to create a new one.
Fields:
specgatewayClassName- supported.listenersname- supported.hostname- supported.port- supported, must be LTE 60000, all priviliged ports will be mapped to 60000 + port.protocol- supported. Allowed values:HTTP,HTTPS,TLS,TCP,UDP.tlsmode- supported. Allowed value:Terminate,Passthrough.certificateRefs- partially supported. The TLS certificate and key must be stored in a Secret. Multiple references are supported. You must deploy the Secrets before the Gateway resource. Secret rotation (watching for updates) is supported.options- not supported.
allowedRoutes- not supported.
addresses- not supported.
statusaddresses- supported.conditions- supported,Acceptedtype for active Gateway.listenersname- supported.supportedKinds- supported.attachedRoutes- not supported.conditions- partially supported.
HTTPRoute
Status: Partially supported.
Fields:
specparentRefs- partially supported.portmust always be set.hostnames- supported.matchespath- supported,Prefix,ExactandRegex.headers- supported,ExactandRegex.queryParams- supported,ExactandRegex.method- supported.
filterstype- supported.requestRedirect,requestHeaderModifier,responseHeaderModifier,requestMirror,urlRewritesupported
extensionRef- not supported.backendRefs- supported.
statusparentsparentRef- supported.controllerName- supported.conditions- partially supported. Supported (Condition/Status/Reason):Accepted/True/AcceptedAccepted/False/NoMatchingListenerHostnameResolvedRefs/True/ResolvedRefs
TLSRoute
Status: Partially supported.
Fields:
specparentRefs- partially supported.portmust always be set.hostnames- supported.backendRefs- supported.
statusparentsparentRef- supported.controllerName- supported.conditions- partially supported. Supported (Condition/Status/Reason):Accepted/True/AcceptedAccepted/False/NoMatchingListenerHostnameResolvedRefs/True/ResolvedRefs
GRPCRoute
Status: Partially supported.
Fields:
specparentRefs- partially supported.portmust always be set.hostnames- supported.matchesheaderstype- supported,ExactandRegex.name- supported.value- supported.
- method:
type- supported,ExactandRegex.service- supported.method- supported.
filterstype- supported.requestHeaderModifier,responseHeaderModifier,requestMirrorsupportedextensionRef- not supported.
statusparentsparentRef- supported.controllerName- supported.conditions- partially supported. Supported (Condition/Status/Reason):Accepted/True/AcceptedAccepted/False/NoMatchingListenerHostnameResolvedRefs/True/ResolvedRefs
TCPRoute
Status: Partially supported.
Fields:
specparentRefs- partially supported.portmust always be set.backendRefs- supported.
statusparentsparentRef- supported.controllerName- supported.conditions- partially supported. Supported (Condition/Status/Reason):Accepted/True/AcceptedResolvedRefs/True/ResolvedRefs
UDPRoute
Status: Partially supported.
Fields:
specparentRefs- partially supported.portmust always be set.backendRefs- supported.
statusparentsparentRef- supported.controllerName- supported.conditions- partially supported. Supported (Condition/Status/Reason):Accepted/True/AcceptedResolvedRefs/True/ResolvedRefs
ReferenceGrant
Status: Not supported.
Custom Policies
Status: Partially supported.
Custom policies will be FSM-specific CRDs that will allow supporting features like timeouts, load-balancing methods, authentication, etc. - important data-plane features that are not part of the Gateway API spec.
While those CRDs are not part of the Gateway API, the mechanism of attaching them to Gateway API resources is part of the Gateway API. See the Policy Attachment doc.
| Policy | Attached to Kind | Attached Aspect | Status |
|---|---|---|---|
| RateLimitPolicy | Gateway, HTTPRoute, GRPCRoute | Gateway: port HTTPRoute: hostname, route GRPCRoute: hostname, route | Done. |
| AccessControlPolicy | Gateway, HTTPRoute, GRPCRoute | Gateway: port HTTPRoute: hostname, route GRPCRoute: hostname, route | Done. |
| FaultInjectionPolicy | HTTPRoute, GRPCRoute | HTTPRoute: hostname, route GRPCRoute: hostname, route | Done. |
| GatewayTLSPolicy | Gateway | port | Done. |
| CircuitBreakingPolicy | Service, ServiceImport | port | Done. |
| HealthCheckPolicy | Service, ServiceImport | port | Done. |
| LoadBalancerPolicy | Service, ServiceImport | port | Done. |
| SessionStickyPolicy | Service, ServiceImport | port | Done. |
| RetryPolicy | Service, ServiceImport | port | Done. |
| UpstreamTLSPolicy | Service, ServiceImport | port | Partially done, only support service port level TLS config, expect to control at endpoint level |
Listener Protocol and Supported Route Types
| Listener Protocol | TLS Mode | Route Type Supported |
|---|---|---|
| HTTP | HTTPRoute, GRPCRoute | |
| HTTPS | HTTPRoute, GRPCRoute | |
| TLS | Passthrough | TLSRoute |
| TLS | Terminate | TCPRoute |
| TCP | TCPRoute | |
| UDP | UDPRoute |
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.