An Open Source Proof of Concept demonstrating Kubernetes Gateway API routing with Envoy Gateway.
Envoy Gateway PoC is an educational Proof of Concept developed by OpenMind Systems Lab.
This project demonstrates how to deploy and use Envoy Gateway with the Kubernetes Gateway API in a local Kubernetes environment.
The PoC installs Envoy Gateway, deploys two demo HTTP applications, creates a GatewayClass, configures a Gateway and an HTTPRoute, then validates path-based routing through Envoy Proxy.
This repository is designed to be simple, reproducible and easy to understand.
After completing this Proof of Concept you will understand how to:
- Install Envoy Gateway on Kubernetes
- Use the Kubernetes Gateway API
- Create a
GatewayClass - Deploy a
Gatewayresource - Configure an
HTTPRoute - Route traffic to multiple backend services
- Test local routing with
kubectl port-forward - Understand the role of Envoy Proxy as a Kubernetes gateway
Request flow:
Client
β
βΌ
Envoy Proxy
β
βΌ
Gateway API HTTPRoute
β
βββ /v1 βββΊ app-v1 Service βββΊ app-v1 Pod
β
βββ /v2 βββΊ app-v2 Service βββΊ app-v2 Pod
The objective of this PoC is to expose two demo applications through Envoy Gateway using path-based routing.
| Path | Backend service | Expected response |
|---|---|---|
/v1 |
app-v1 |
hello from app v1 |
/v2 |
app-v2 |
hello from app v2 |
.
βββ manifests/
β βββ 00-namespace.yaml
β βββ 01-demo-apps.yaml
β βββ 02-gatewayclass.yaml
β βββ 03-gateway.yaml
βββ media/
β βββ schema.png
βββ README.md
βββ LICENSE
- Kubernetes cluster
kubectl- Internet access to pull Envoy Gateway manifests and container images
Example local environments:
- Docker Desktop Kubernetes
- kind
- minikube
Check your cluster:
kubectl cluster-info
kubectl get nodesInstall Envoy Gateway:
kubectl apply --server-side \
-f https://github.com/envoyproxy/gateway/releases/download/v1.8.1/install.yamlWait for the Envoy Gateway controller:
kubectl wait --timeout=5m \
-n envoy-gateway-system deployment/envoy-gateway \
--for=condition=AvailableVerify the installation:
kubectl get pods -n envoy-gateway-systemExpected result:
NAME READY STATUS
envoy-gateway-xxxxxxxxxx-xxxxx 1/1 Running
Apply the demo applications:
kubectl apply -f manifests/01-demo-apps.yamlVerify:
kubectl get pods
kubectl get svcExpected resources:
app-v1
app-v2
Create the GatewayClass used by the PoC:
kubectl apply -f manifests/02-gatewayclass.yamlApply the Gateway and HTTPRoute resources:
kubectl apply -f manifests/03-gateway.yamlVerify:
kubectl get gatewayclass
kubectl get gateway
kubectl get httprouteExpected resources:
GatewayClass: eg
Gateway: eg-poc
HTTPRoute: eg-poc-route
Wait for the Gateway to be accepted and programmed:
kubectl wait --for=condition=Accepted gateway/eg-poc --timeout=60s
kubectl wait --for=condition=Programmed gateway/eg-poc --timeout=180sCheck all PoC resources:
kubectl get gatewayclass
kubectl get gateway eg-poc
kubectl get httproute eg-poc-route
kubectl get pods
kubectl get svc
kubectl get pods,svc -n envoy-gateway-systemYou should see:
- Envoy Gateway running in
envoy-gateway-system - One generated Envoy data-plane Pod running in
envoy-gateway-system - Two demo applications running in the default namespace
- A
GatewayClassnamedeg - A
Gatewaynamedeg-poc - An
HTTPRoutenamedeg-poc-route
Envoy Gateway creates an Envoy Proxy service for the Gateway.
Retrieve the generated Envoy service name:
ENVOY_SERVICE=$(kubectl get svc -n envoy-gateway-system \
-o name | grep envoy-default-eg-poc | head -n 1)
echo $ENVOY_SERVICEPort-forward the Envoy service locally:
kubectl -n envoy-gateway-system port-forward $ENVOY_SERVICE 8888:80In another terminal, test the /v1 route:
curl http://localhost:8888/v1Expected result:
hello from app v1
Test the /v2 route:
curl http://localhost:8888/v2Expected result:
hello from app v2
Envoy Gateway exposes an admin interface that can be used for local inspection and troubleshooting.
Port-forward the Envoy Gateway deployment:
kubectl -n envoy-gateway-system port-forward deployment/envoy-gateway 19000:19000Open:
http://localhost:19000
Once the PoC is deployed:
- Envoy Gateway is installed successfully.
- The
GatewayClassis accepted by Envoy Gateway. - The
Gatewayis accepted and programmed. - Envoy Proxy routes
/v1traffic toapp-v1. - Envoy Proxy routes
/v2traffic toapp-v2. - Local traffic is accessible through
http://localhost:8888.
If the Gateway stays in Programmed=False, inspect it:
kubectl describe gateway eg-pocIf you see Waiting for controller, verify the GatewayClass:
kubectl get gatewayclass
kubectl describe gatewayclass egIf you see Envoy replicas unavailable, check the generated Envoy data-plane Pod:
kubectl get pods -A | grep -i envoy
kubectl get events -A --sort-by=.lastTimestamp | tail -30If the route does not answer, verify the HTTPRoute:
kubectl describe httproute eg-poc-routeThis Proof of Concept introduces several important Kubernetes and platform engineering concepts:
- Gateway API fundamentals
- Envoy Gateway architecture
- GatewayClass and controller binding
- Path-based HTTP routing
- Kubernetes services and deployments
- Local traffic testing with port-forwarding
- Cloud Native ingress patterns
This repository is part of the OpenMind Systems Lab research program focused on:
- βΈοΈ Cloud Native
- π Infrastructure Security
- π¨ Distributed Messaging
- βοΈ Platform Engineering
- π Technical Benchmarking
- π€ Artificial Intelligence & MCP
Discover all projects:
https://github.com/openmind-systems-lab
Delete the Gateway API resources:
kubectl delete -f manifests/03-gateway.yaml --ignore-not-found=true
kubectl delete -f manifests/02-gatewayclass.yaml --ignore-not-found=trueDelete the demo applications:
kubectl delete -f manifests/01-demo-apps.yaml --ignore-not-found=trueUninstall Envoy Gateway:
kubectl delete -f https://github.com/envoyproxy/gateway/releases/download/v1.8.1/install.yaml \
--ignore-not-found=trueContributions, ideas and improvements are welcome.
Feel free to:
- Open an Issue
- Submit a Pull Request
- Suggest improvements
- Share feedback
This project is released under the MIT License.
OpenMind Systems Lab is an independent French non-profit association dedicated to research, experimental development and technical benchmarking in Cloud Native technologies.
Our mission is to produce practical, reproducible and educational Open Source Proofs of Concept covering Kubernetes, Platform Engineering, Distributed Messaging, Infrastructure Security and Artificial Intelligence.
GitHub Organization:
https://github.com/openmind-systems-lab
Made with β€οΈ by OpenMind Systems Lab

