Envoy's defaults get you proxying in minutes, then hand you failure modes that only make sense once you know it fast-fails to protect the upstream, not to serve your request.
The defaults work. Until a backend slows down, connections pile up in a per-worker pool, the pending queue fills, and upstream_rq_pending_overflow starts returning 503s with response flag UO — Envoy protecting the upstream while looking broken. Until a cluster loses its last healthy host and every request comes back no healthy upstream. Until the xDS control plane drops, control_plane.connected_state goes to 0, and Envoy keeps serving last-known-good config while new endpoints, routes, and certificate rotations quietly never arrive. Until a pushed config is NACKed (update_rejected) and the change you deployed silently never takes effect. Until one worker thread pins a core and a slice of requests slow down while aggregate CPU looks fine.
These guides are written for engineers who already run Envoy — as an Istio sidecar, an edge gateway, or a front proxy — not for people learning what a proxy is. The goal is the mental model of how Envoy actually behaves under load, the failure patterns that keep recurring, the signals that catch them before they page anyone, and the runbooks you wish you'd had during your last 503 storm.