A high-performance Kubernetes ingress controller using Envoy as the data plane, designed for handling large-scale ingress configurations with minimal latency.
- Fast ingress rule application (<5s with 100k+ rules)
- Efficient resource utilization
- High stability with multiple replica support
- Envoy-based data plane with xDS protocol
- Optimized for large-scale deployments
- Go 1.21 or later
- Docker
- Kubernetes cluster (v1.24+)
- Clone the repository:
git clone https://github.com/labring/labring-envoy-ingress-controller.git
cd labring-envoy-ingress-controller
- Build the controller binary:
go mod download
go build -o bin/controller cmd/controller/main.go
- Build the Docker image:
docker build -t labring/envoy-ingress-controller:latest .
- Deploy the controller to your Kubernetes cluster:
kubectl apply -f deployments/deployment.yaml
- Verify the deployment:
kubectl get pods -n kube-system -l app=envoy-ingress-controller
- Check controller logs:
kubectl logs -n kube-system -l app=envoy-ingress-controller
- Deploy a test application:
# Deploy test application
kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80
# Create test ingress
kubectl create ingress web-ingress --rule="example.com/*=web:80"
- Verify ingress configuration:
# Check ingress status
kubectl get ingress web-ingress
# Test access (update hostname as needed)
curl -H "Host: example.com" http://<ingress-ip>/
The project includes tools for performance testing under test/performance/
:
- Generate test ingress rules:
# Build the test tool
go build -o bin/generate-ingress test/performance/generate_ingress.go
# Generate 100,000 ingress rules across 100 namespaces
./bin/generate-ingress -count 100000 -namespaces 100
- Measure ingress application latency:
# Run latency test
./test/performance/measure_latency.sh
- Monitor resource usage:
# Check controller resource usage
kubectl top pod -n kube-system -l app=envoy-ingress-controller
The controller is designed to:
- Apply new ingress rules within 5 seconds even with 100,000+ existing rules
- Maintain low resource usage under high load
- Support multiple replicas for high availability
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is licensed under the Apache License 2.0 - see the LICENSE file for details