|
| 1 | +# Gateway API Support |
| 2 | + |
| 3 | +As mentioned in the [system design][] document, Envoy Gateway's managed data plane is configured dynamically through |
| 4 | +Kubernetes resources, primarily [Gateway API][] objects. Envoy Gateway supports configuration using the following Gateway API resources. |
| 5 | + |
| 6 | +## **GatewayClass** |
| 7 | + |
| 8 | +A [GatewayClass][] is used to configure which Gateways and other reliant resources should be managed by Envoy Gateway. |
| 9 | +Envoy Gateway supports a single GatewayClass resource linked to the Envoy Gateway controller and accepts in order of age (oldest first) if there are multiple. |
| 10 | +The [ParametersReference][] on the GatewayClass must refer to an EnvoyProxy. |
| 11 | + |
| 12 | +## **Gateway** |
| 13 | + |
| 14 | +When a [Gateway][] resource is created that references the GatwewayClass Envoy Gateway is managing then Envoy Gateway will |
| 15 | +create and manage a new Envoy Proxy deployment. All other Gateway API resources that are managed by this Gateway will be used |
| 16 | +to configure the Envoy Proxy deployment that it created. Envoy Gateway does not support Multiple certificate references or Specifying an [address][] |
| 17 | +for the Gateway. |
| 18 | + |
| 19 | +## **HTTPRoute** |
| 20 | + |
| 21 | +[HTTPRoutes][] are supported as the primary way to configure HTTP traffic in Envoy Gateway. |
| 22 | +All of the following HTTPRoute filters are supported by Envoy Gateway. |
| 23 | + |
| 24 | +- `requestHeaderModifier`: [RequestHeaderModifiers](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRouteFilter) can be used to modify or add request headers before the request is proxied to its destination. |
| 25 | +- `responseHeaderModifier`: [ResponseHeaderModifiers](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRouteFilter) can be used to modify or add response headers before the response is sent back to the client. |
| 26 | +- `requestMirror`: [RequestMirrors](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRouteFilter) configure destinations where the requests should also be mirrored to. Responses to mirrored requests will be ignored. |
| 27 | +- `requestRedirect`: [RequestRedirects](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRouteFilter) configure policied for how requests that match the HTTPRoute should be modified and then redirected. |
| 28 | +- `urlRewrite`: [UrlRewrites](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRouteFilter) allow for modification of the request's hostname and path before it is proxied to its destination. |
| 29 | +- `extensionRef`: [ExtensionRefs] are used by Envoy Gateway to add additional support for Ratelimitg and Authentication. For more information about Envoy Gateay's implementation of these filters please refer to the [Ratelimiting][] and [Authentication][] documentation. |
| 30 | + |
| 31 | +**Note:** currently the only [BackendRef][] kind (the destination where traffic should be sent to) that Envoy Gateway supports are [Kubernetes Services][]. Routing traffic to other destinations such as arbitrary URLs is not currently possible. |
| 32 | + |
| 33 | +## **TCPRoute** |
| 34 | + |
| 35 | +[TCPRoutes][] are used to configure routing of raw TCP traffic. Traffic can be forwarded to the desired BackendRef(s) based on a port. |
| 36 | + |
| 37 | +**Note:** TCPRoutes only support proxying in non-transparent mode i.e. the backend will see the source IP and port of the deployed |
| 38 | +Envoy instance instead of the client. |
| 39 | + |
| 40 | +## **UDPRoute** |
| 41 | + |
| 42 | +[UDPRoutes][] are used to configure routing of raw UDP traffic. Traffic can be forwarded to the desired BackendRef(s) based on a port. |
| 43 | + |
| 44 | +**Note:** Similar to TCPRoutes, UDPRoutes only support proxying in non-transparent mode i.e. the backend will see the source IP and port of the deployed |
| 45 | +Envoy instance instead of the client. |
| 46 | + |
| 47 | +## **GRPCRoute** |
| 48 | + |
| 49 | +[GRPCRoutes][] configure routing of [gRPC][] requests. They offer request matching by hostname, gRPC service, gRPC method, or HTTP/2 Header. |
| 50 | +Similar to HTTPRoutes, Envoy Gateway supports the following filters on GRPCRoutes to provide additional traffic processing. |
| 51 | + |
| 52 | +- `requestHeaderModifier`: [RequestHeaderModifiers](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.GRPCRouteFilter) can be used to modify or add request headers before the request is proxied to its destination. |
| 53 | +- `responseHeaderModifier`: [ResponseHeaderModifiers](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.GRPCRouteFilter) can be used to modify or add response headers before the response is sent back to the client. |
| 54 | +- `requestMirror`: [RequestMirrors](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.GRPCRouteFilter) configure destinations where the requests should also be mirrored to. Responses to mirrored requests will be ignored. |
| 55 | +- `extensionRef`: [ExtensionRefs] are used by Envoy Gateway to add additional support for Ratelimitg and Authentication. For more information about Envoy Gateay's implementation of these filters please refer to the [Ratelimiting][] and [Authentication][] documentation. |
| 56 | + |
| 57 | +**Note:** currently the only [BackendRef](https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.GRPCRouteFilter) kind (the destination where traffic should be sent to) that Envoy Gateway supports are [Kubernetes Services][]. Routing traffic to other destinations such as arbitrary URLs is not currently possible |
| 58 | + |
| 59 | +## **TLSRoute** |
| 60 | + |
| 61 | +[TLSRoutes][] are used similarly to TCPRoutes to configure routing of TCP traffic; however, unlike TCPRoutes, TLSRoutes can match against TLS-Specific Metadata. |
| 62 | + |
| 63 | +## **ReferenceGrant** |
| 64 | + |
| 65 | +[ReferenceGrants][] are used as a way to configure which resources in other namespaces are allowed to reference specific kinds of resources in |
| 66 | +the namespace of the ReferenceGrant. Normally an HTTPRoute created in namespace `foo` is not allowed to specify a Service in the `bar` namespace as the |
| 67 | +one of its BackendRefs. ReferenceGrants are commonly used to permit these types of cross-namespace references. Envoy Gateway supports the following use-cases for ReferenceGrants. |
| 68 | + |
| 69 | +- Allowing an HTTPRoute, GRPCRoute, TLSRoute, UDPRoute, or TCPRoute to include a BackendRef that references a Service that is not in the same namespace as the HTTPRoute. |
| 70 | +- Allowing an HTTPRoute's `requestMirror` filter to include a BackendRef that references a Service that is not in the same namespace as the HTTPRoute. |
| 71 | +- Allowing a Gateway's [SecretObjectReference][] to reference a secret that is not in the same namespace as the Gateway when configuring TLS on a Gateway. |
| 72 | + |
| 73 | +[System Design]: https://gateway.envoyproxy.io/latest/design/system-design.html |
| 74 | +[Gateway API]: https://gateway-api.sigs.k8s.io/ |
| 75 | +[GatewayClass]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.GatewayClass |
| 76 | +[ParametersReference]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.ParametersReference |
| 77 | +[Gateway]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.Gateway |
| 78 | +[address]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.GatewayAddress |
| 79 | +[HTTPRoutes]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRoute |
| 80 | +[Kubernetes Services]: https://kubernetes.io/docs/concepts/services-networking/service/ |
| 81 | +[BackendRef]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.BackendRef |
| 82 | +[TCPRoutes]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.TCPRoute |
| 83 | +[UDPRoutes]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.UDPRoute |
| 84 | +[GRPCRoutes]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.GRPCRoute |
| 85 | +[gRPC]: https://grpc.io/ |
| 86 | +[TLSRoutes]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1alpha2.TLSRoute |
| 87 | +[ReferenceGrants]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io%2fv1beta1.ReferenceGrant |
| 88 | +[SecretObjectReference]: https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.SecretObjectReference |
| 89 | +[Ratelimiting]: https://gateway.envoyproxy.io/latest/user/rate-limit.html |
| 90 | +[Authentication]: https://gateway.envoyproxy.io/latest/user/authn.html |
0 commit comments