Generic Gateway API Manager for Kubernetes
Caution
This project is still very unstable and not ready for use in production environments.
Kubvernor is a Rust implementation of Kubernetes Gateway APIs. The aim of the project is to be as generic as possible so Kubvernor could be used to manage/deploy different gateways (Envoy, Nginx, HAProxy, etc.)
Objectives:
- Kubvernor should be proxy agnostic and should be capable of deploying different types of proxies (such as Envoy, Agentgateway or others).
- The architecture should be scalable and flexible. Kubvernor re-calculates the deployment based on clearly documented events (object has changed, references have changed, etc..) which will impact how the gateway is deployed and configured.
- Deployer services responsible for deploying and configuring actual proxies are isolated from all other components and communicate with other components via a well-defined API.
-
Install Rust, Docker and Kind, Helm ...
-
Deploy your cluster
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/refs/heads/main/hack/implementations/common/create-cluster.sh | bash- Run scipt to apply necessary CDRs, configure and run Kubvernor in Kind Cluster
./scripts/deploy_kubvernor.sh- All is well if you see a pod in running state
kubectl get pod -n kubvernorThis should deploy three different gateways using Envoy Proxy, Agentgateway and Orion Proxy
- Deploy hello world... two gateways, two http routes, one backend
kubectl apply -f kubernetes/kubvernor-hello-world.yaml- Check that all is well
kubectl get gateway- Make some requests
curl -vki -H 'Host: service-one.com' http://GATEWAY_ADDRESS:1080/data- Using more or less the steps documented here
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/refs/tags/v1.1.0/config/manifests/vllm/sim-deployment.yaml
helm install vllm-llama3-8b-instruct --set inferencePool.modelServers.matchLabels.app=vllm-llama3-8b-instruct --set inferencePool.image.pullPolicy=IfNotPresent --set inferenceExtension.image.pullPolicy=IfNotPresent --version v1.1.0 oci://registry.k8s.io/gateway-api-inference-extension/charts/inferencepool- Deploy Gateway API Inference Extension Routes
kubectl apply -f kubernetes/kubvernor-hello-inference-world.yaml- Make some requests
curl -vki http://GATEWAY_ADDRESS:1080/v1/chat/completions --header 'Host: www.inference-one.com' -H "Content-Type: application/json" -d '{"model":"meta-llama/Llama-3.1-8B-Instruct", "messages": [{"role":"user", "content":"What is the story?"}]}'scripts/clear_kind.sh
