EnRoute is an Ingress API Gateway that is built using Envoy proxy. EnRoute has an extremely simple configuration model to help connect and secuire microservices at Ingress.
The Gateway API is an upcoming standard that is a replacement for Ingress. Like Ingress, it is an attempt to describe networking for traffic entering the Kubernetes cluster.
EnRoute Ingress API Gateway is now compliant with the Gateway API standard v0.6.0. In a Kubernetes cluster, EnRoute can now listen for Gateway API artifacts.
In this article, we discuss how Gateway API can be used to program EnRoute Ingress Controller API Gateway.
We start with a simple example to introduce Gateway API capabilities. Subsequent articles in this series, with include more details depending on how our customers adopt and use it.
Gateway API Example
Prerequisites
This example needs a Kubernete cluster 1.23 or up
Gateway API does not need a service mesh. We use a simple non-mesh cluster to demonstrate it.
EnRoute version v0.13.0-b1 or later that has support for Gateway API
EnRoute helm charts
EnRoute can be easily configured using helm charts. To demonstrate gateway-api capabilities, a special chart called gateway-api is created. The following helm charts are available
Use this chart to configure EnRoute global configuration (eg: Global Rate-Limit Engine
Config, Configuration for Mesh Integration, Filters for all traffic - eg: Health Checker, Lua, etc.)
Use this chart to configure EnRoute using Gateway API
Add enroute helm repo
add the helm chart -
helm repo add saaras https://charts.getenroute.io
check repositories -
helm search repo
name chart version app version description
saaras/demo-services 0.1.0 0.1.0 Chart for Workloads used in EnRoute demo - http...
saaras/enroute 0.8.0 v0.12.0 EnRoute API Gateway
saaras/gateway-api 0.6.0 v0.13.0-b1 Configure EnRoute using Gateway API
saaras/service-globalconfig 0.2.0 v0.11.0 Global Config and Global Filters for EnRoute
saaras/service-host-route 0.2.0 v0.11.0 Host (GatewayHost), Route (ServiceRoute) config
saaras/service-policy 0.5.0 v0.12.0 Demo Service L7 Policy using EnRoute API Gateway
NAME: enroute-gw-api
LAST DEPLOYED: Wed Jan 18 23:57:18 2023
NAMESPACE: enroute
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
______ _____ _
| ____| | __ \ | |
| |__ _ __ | |__) |___ _ _| |_ ___
| __| | '_ \| _ // _ \| | | | __/ _ \
| |____| | | | | \ | (_) | |_| | || __/
|______|_| |_|_| \_\___/ \__,_|\__\___|
𝙴𝚗𝚁𝚘𝚞𝚝𝚎 Ingress API Gateway Community Edition Installed!
-------------------------------------------------------
Request a free evaluation license for enterprise version
by sending an email to contact@saaras.io
Slack Channel - https://slack.saaras.io
Getting Started Guide - https://docs.getenroute.io/docs/prologue/introduction/
EnRoute Docs - https://docs.getenroute.io/
EnRoute Features - https://getenroute.io/features/
kubectl get all -n enroute
name ready status restarts age
pod/enroute-5b4d45ff6c-mzv4b 3/3 running 0 16m
name type cluster-ip external-ip port(s) age
service/enroute loadbalancer 10.43.91.42 212.2.242.227 80:30808/tcp,443:31920/tcp 16m
name ready up-to-date available age
deployment.apps/enroute 1/1 1 1 16m
name desired current ready age
replicaset.apps/enroute-5b4d45ff6c 1 1 1 16m
We will use Gateway API to expose the service httpbin externally. Next we create a self-signed certificate which we can use to serve traffic over https.
Edit EnRoute service to direct traffic to Gateway API Listener
kubectl edit -n enroute service enroute
We will cover the configuration using Gateway API below, but the listener we defined in the Gateway uses port 8444. Traffic from the LoadBalancer EnRoute service, should be directed to this port. Set targetPort to 8444 to direct encrypted traffic from the external Load Balancer to this Gateway API defined listener.
Teams using EnRoute can continue to work with a simpler configuration model on their projects. When teams are ready for additional complexity arising from Gateway API, they can transition easily. This is possible since EnRoute’s flexibility provides an ability to work with simpler API, and evaluate Gateway API without any operational overhead.
Gateway API abstractions are similar to EnRoute and resemble EnRoute model closely. EnRoute architecture was defined years back to provide an easy-to-use interface for Ingress, when Ingress was just released and it’s capabilities were limited.
EnRoute architecture allows for working with Gateway API and EnRoute API concurrently. Abstractions defined using any of the API can be mixed and matched to achieve the desired behavior and program the underlying Envoy proxy. This is possible since Gateway API configuration model resembles the EnRoute config model.
Gateway API assumes roles like platform operator, cluster operator, developer and uses ReferenceGrant, GatewayClass and Gateway to define cross-namespace access-control using them. We will discuss them in a subsequent article. While EnRoute supports these custom resources, they are not covered here for simplicity.
EnRoute is feature rich and is validated for stablity. All the development done on EnRoute, its features can be configured using EnRoute’s config model and will work with Gateway API. The current version of EnRoute supports the latest v0.6.0 of Gateway API as of writing this.