-
released this
2026-08-06 19:16:52 -04:00 | 36 commits to main since this releaseSummary
- cache successful public list responses for
/v0/serversand
/v0.1/serversat ingress-nginx for 30 seconds - give only those exact cached paths a 600 RPM per-controller budget
- preserve the existing 180 RPM limit for publish, auth, mutation,
detail, and other routes - expose
X-Registry-Cacheto make cache MISS/HIT behavior directly
observable
Why
Production ingress logs show that the current 180 RPM per-controller
limit rejects legitimate bulk pagination before it reaches the
application. The affected traffic is overwhelmingly registry-list reads,
not publishing.A ten-minute production sample contained 17,836 successful list
responses but only 3,188 unique URLs: 82.1% were repeated requests,
representing roughly 1 GB of duplicate response bodies. Raising the list
limit without caching would increase pressure on the application and its
shared PostgreSQL pool. The short ingress cache absorbs repeated
cursor-page reads before raising their scoped client budget.Publish latency is a separate concern. Reducing read pressure may help
indirectly, but slow external package validation is intentionally out of
scope for this PR.Relates to #826.
Safety
- caching is limited to exact public GET list paths and keyed by host
plus full request URI - only 200 responses are cached
- cache lifetime is 30 seconds; newly published entries can therefore
take up to 30 seconds to appear on a cached page - cache locking coalesces simultaneous misses
- stale cached responses may be served while refreshing or during
transient upstream 5xx/timeouts - each ingress replica uses at most 1 GB of ephemeral on-disk cache
Validation
go test ./...indeploy/go vet ./...indeploy/git diff --check- ingress-nginx chart 4.13.0 in a disposable kind cluster
- generated NGINX configuration passed
nginx -t - repeated list request verified
X-Registry-Cache: MISSfollowed by
HIT - non-list route verified uncached
- exact list locations verified with the higher rate zone while the
catch-all retained 180 RPM
Nothing was applied to production during investigation or validation.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- cache successful public list responses for