Rate Limiting
NGINX’s limit-rps and limit-rpm annotations map to a kgateway TrafficPolicy with local rate limiting.
Before: Ingress with rate limits
cat <<'EOF' > ratelimit-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ratelimit-demo
annotations:
nginx.ingress.kubernetes.io/limit-rps: "10"
nginx.ingress.kubernetes.io/limit-burst-multiplier: "2"
spec:
ingressClassName: nginx
rules:
- host: api.example.com
http:
paths:
- backend:
service:
name: api-service
port:
number: 8080
path: /
pathType: Prefix
EOFConvert
ingress2gateway print --providers=ingress-nginx --emitter=kgateway \
--input-file ratelimit-ingress.yaml > ratelimit-kgateway.yamlAfter: TrafficPolicy with token bucket
cat ratelimit-kgateway.yamlThe generated TrafficPolicy uses a token bucket algorithm. With 10 RPS and a 2x burst multiplier, you get maxTokens: 20:
apiVersion: gateway.kgateway.dev/v1alpha1
kind: TrafficPolicy
metadata:
name: ratelimit-demo-policy
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: HTTPRoute
name: ratelimit-demo-api-example-com
rateLimit:
local:
tokenBucket:
maxTokens: 20
tokensPerFill: 10
fillInterval: 1sApply
kubectl apply -f ratelimit-kgateway.yaml