Every public-facing service sits behind a network stack at the edge — Transport Layer Security (TLS) termination, authentication, rate limiting, circuit breakers, observability. The boring-but-load-bearing layer between the internet and your application code.

You can build this yourself. You probably should not. Off-the-shelf gateways have been compounding capability for a decade.

I’d been building gateway-core — a side-project gateway — and wanted an honest answer to a question I kept dodging: where does it fit among the existing options, and which capabilities are already solved well enough that I should just use one of them instead? So I wrote a reference doc comparing four mature container gateways against gateway-core. This post is the short version.

What lives in an edge stack

Client Browser, app, API caller HTTPS EDGE STACK TLS termination JWT / OIDC authentication Rate limiting Circuit breakers Reverse proxy + health checks HTTP / gRPC users-svc orders-svc billing-svc

Same five concerns, different vendors. Acronyms below: JSON Web Token (JWT), OpenID Connect (OIDC), Service Level Objective (SLO).

The four stacks at a glance

Stack Best at Trade-off In production at
Apache APISIX · diagram ↗ One container with everything — JWT, OIDC, rate limit, circuit breaker, Prometheus, OpenTelemetry You now operate etcd WeChat (Tencent)Bilibili also Airwallex, WPS Office
Envoy + adjuncts · diagram ↗ Deepest production feature set: adaptive concurrency, a real shadow router, outlier detection Four containers, non-trivial filter chain Lyft (origin)GoogleStripePinterestRedditIstio data plane
Traefik · diagram ↗ Docker-native — service discovery from labels, auto-TLS in one flag Single-instance state; rate limit and breaker do not share across replicas RancherK3sSelf-hosted Docker
Kong DB-less · diagram ↗ Largest open-source plugin catalogue, declarative YAML hot-reloaded No first-party circuit breaker plugin CiscoGESAPExpedia also Yahoo

A short heuristic:

  • Already on Docker / Compose / Swarm → Traefik.
  • Want one binary with everything → APISIX.
  • Need adaptive concurrency, distributed rate limits, or a real shadow router → Envoy.
  • Need the largest plugin catalogue → Kong.

The reference doc has the full feature matrix, docker-compose sketches, and diagrams of how each stack wires together.

Where the off-the-shelf path stops

There is a layer above the deterministic gateway that none of these ship: structured gating of configuration changes — code-level constraints, per-parameter bounded deltas, cooldown on a change source, mandatory shadow simulation that scores against SLOs and can veto a change.

That layer matters when something other than a human is writing the configuration. An agent that adjusts rate limits is useful; an agent that adjusts them unsafely is a liability. The four gateways treat configuration as configuration — there is no built-in contract that says “this knob may not move more than ±20% per window.”

gateway-core is a side project studying what that contract looks like — an “Agentic Envelope” of constraints, bounds, dampener, and shadow simulator that any agent-driven change has to pass through. The four stacks above solve the deterministic half well. The second half is open territory.

David Skowronski

Senior backend engineer building distributed systems, event-driven pipelines, and scalable APIs. 26+ years across telecom, defense, IoT, and AI security.

dskow dskowFL


Published