GatewayHost CRD

EnRoute Technical Reference

GatewayHost CRD

To make a service running inside a Kubernetes cluster, a GatewayHost type of resource is defined.

GatewayHost resource like the name suggests, helps define a Host and a Route to reach this service.

A GatewayHost defines the Fqdn that can be used to reach this service along with routing configuration. When using SSL, a certificate can also be specified using GatewayHost resource

Assuming a service httpbin is running in namespace httpbin, a GatewayHost to reach that service in a cluster can be configured -

apiVersion: enroute.saaras.io/v1
kind: GatewayHost
  labels:
    app: httpbin
  name: httpbin-9000-gatewayhost
  namespace: app-httpbin
spec:
  routes:
  - conditions:
    - prefix: /
    services:
    - name: httpbin
      port: 9000
  virtualhost:
    fqdn: 'demo-apps.saaraslabs.com'
    tls:
      secretName: wildcard-saaraslabs-com

To enable https, a secret can be specified using tls.secretName field above

A GateawayHost defines the top level abstraction for flow of traffic. It can have several routing rules to direct traffic to services

Services are kubernetes services to route traffic to and the corresponding port. Alternatively a protocol can also be specified for the services

A ServiceRoute type of custom resource defines a Service and L7 routing rules for that service. A ServiceRoute also has a Fqdn, one route and the service to which the route points along with L7 policy for that service. The Fqdn for ServiceRoute is used to match it with the GatewayHost

An example ServiceRoute that can be associated with the above GatewayHost -

apiVersion: enroute.saaras.io/v1
kind: ServiceRoute
metadata:
  name: echo-9001
  namespace: app-echo
spec:
  fqdn: 'demo-apps.saaraslabs.com'
  route:
    conditions:
    - prefix: /echo
    services:
    - name: echo
      port: 9001

The resulting configuration graph looks like this

'demo-apps.saaraslabs.com' -- /      -- httpbin:9000  (namespace app-httpbin)
                              /echo  -- echo:9001     (namespace app-echo)

TLS Settings

The TLS settings for GatewayHost can be specified using GlobalConfig. For more details, check the GlobalConfig type of CRD

GatewayHost to Envoy configuration

GatewayHost configuration influences the Envoy VirtualHost , 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 GatewayHost CRD Spec

A complete description of the GatewayHost CRD spec is located in github