Skip to content

kubvernor/kubvernor

Repository files navigation

Logo

Kubvernor

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.)

Architecture

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.

Diaagram

Gateway API Conformance Reports

Conformance reports

Prerequisites

  1. Install Rust, Docker and Kind, Helm ...

  2. 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
  1. Run scipt to apply necessary CDRs, configure and run Kubvernor in Kind Cluster
./scripts/deploy_kubvernor.sh
  1. All is well if you see a pod in running state
kubectl get pod -n kubvernor

Run Hello World Gateway API!

This should deploy three different gateways using Envoy Proxy, Agentgateway and Orion Proxy

  1. Deploy hello world... two gateways, two http routes, one backend
kubectl apply -f kubernetes/kubvernor-hello-world.yaml
  1. Check that all is well
kubectl get gateway
  1. Make some requests
curl -vki -H 'Host: service-one.com' http://GATEWAY_ADDRESS:1080/data

Run Hello World Gateway API Inference Extension!

  1. 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
  1. Deploy Gateway API Inference Extension Routes
kubectl apply -f kubernetes/kubvernor-hello-inference-world.yaml
  1. 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?"}]}'

Cleanup

scripts/clear_kind.sh

Packages

 
 
 

Contributors

Languages