RouteFilter CRD
EnRoute Technical Reference
RouteFilter CRD
A RouteFilter provides a mechanism to add additional routing policy logic to a Route. This may be Route that belongs to a GatewayHost or a ServiceRoute
An example RouteFilter to run some lua code per-route can be specified using -
apiVersion: enroute.saaras.io/v1beta1
kind: RouteFilter
metadata:
labels:
app: httpbin
name: lua-filter
namespace: httpbin
spec:
name: lua-filter
type: route_filter_lua
routeFilterConfig:
config: |
function envoy_on_request(request_handle)
request_handle:logInfo("Route Hello World request");
end
Another example is when per-route rate-limits are desired. Sending per-route state to enforce rate-limit can be created using the RouteFilter CRD
apiVersion: enroute.saaras.io/v1beta1
kind: RouteFilter
metadata:
labels:
app: httpbin
name: rl-filter
namespace: httpbin
spec:
name: rl-filter
type: route_filter_ratelimit
routeFilterConfig:
config: |
{
"descriptors" :
[
{
"remote_address": "{}"
}
]
}
RouteFilter can be associated with a GatewayHost by providing a list of filters: associated with each route.
apiVersion: enroute.saaras.io/v1beta1
kind: GatewayHost
metadata:
labels:
app: httpbin
name: httpbin
namespace: httpbin
spec:
virtualhost:
fqdn: httpbin.saaraslabs.com
tls:
secretName: tls-secret-httpbin
routes:
- prefix: /
services:
- name: httpbin
port: 80
filters:
- name: rl-filter
type: route_filter_ratelimit
- name: lua-filter
type: route_filter_lua
Similarly RouteFilter can be associated with a ServiceRoute by providing a list of filters: associated with the route.
apiVersion: enroute.saaras.io/v1beta1
kind: ServiceRoute
metadata:
labels:
app: httpbin
name: httpbin
namespace: enroute-gw-k8s
spec:
fqdn: httpbin.saaraslabs.com
route:
conditions:
- prefix: /post
header: ":method"
exact: "POST"
services:
- name: httpbin
port: 80
filters:
- name: rl-filter
type: route_filter_ratelimit
- name: lua-filter
type: route_filter_lua
RouteFilter to Envoy configuration
RouteFilter configuration influences the Envoy Route and Cluster configurations.
Envoy needs Listener configuration to create listeners for VirtualHost, Route and Cluster. By default, an ingress_http and ingress_https listeners are created.
Complete RouteFilter CRD Spec
A complete description of the RouteFilter CRD spec is located in github