Caching in Kubernetes Ingress

Caching is a key strategy to reduce backend load and improve response times for clients. In Kubernetes, caching is usually implemented through the Ingress controller — particularly with NGINX.

Why Use Caching?

  • Reduce load on backend services
  • Improve speed for repeated requests
  • Minimize cost and bandwidth
  • Smooth handling of traffic spikes

Common Caching Setup: NGINX Ingress

The NGINX Ingress Controller supports proxy caching via annotations.

Step 1: Enable caching in your Ingress resource

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/proxy-cache: "my-cache-zone"
    nginx.ingress.kubernetes.io/proxy-cache-key: "$scheme$request_method$host$request_uri"
    nginx.ingress.kubernetes.io/proxy-cache-use-stale: "error timeout updating http_500 http_502 http_503 http_504"
spec:
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-app
                port:
                  number: 80

Step 2: Define the cache zone in the NGINX ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
data:
  proxy-cache-paths: |
    my-cache-zone keys_zone=my-cache-zone:10m max_size=100m inactive=60m use_temp_path=off;

⚠️ Requires restarting the Ingress controller or reloading its config.

Cache Invalidation

  • Change cache key or annotations to force refresh
  • Set low TTLs via response headers (Cache-Control)
  • Manually purge cache (advanced)

Gotchas

  • Not all responses are cached (e.g., dynamic API, POST requests)
  • Ensure proper headers to avoid serving stale data

Conclusion

Using caching in Kubernetes Ingress can drastically improve performance with minimal changes. It’s especially effective for static content or semi-dynamic pages. With proper setup and tuning, you can save compute resources and deliver faster user experiences.