Summary#
Envoy xDS rollout failure modes cluster around dependency readiness and state convergence rather than simple “config push succeeded/failed” outcomes. A rollout can appear partially applied while one xDS resource type is accepted and another is still warming, rejected, or waiting on dependencies. The main operational risks are:
- Warming stalls: listeners, clusters, or routes wait indefinitely for referenced dynamic resources.
- NACK loops: Envoy repeatedly rejects invalid xDS responses while the control plane keeps resending incompatible state.
- Resource version skew: LDS/RDS/CDS/EDS resources advance at different times, creating temporarily inconsistent snapshots.
- Draining semantics surprises: old listeners/connections may keep serving during listener replacement, so “rollout complete” and “old config no longer used” are not identical.
A safe rollout strategy should treat xDS as a dependency graph with explicit observability around ACK/NACK state, warming resources, active vs warming listeners, cluster health/EDS readiness, and listener drain progress.
Key Points#
- xDS ACK/NACK behavior is per response and resource type
- Envoy uses
DiscoveryRequest/DiscoveryResponseexchanges. - ACK/NACK is tied to the response nonce.
- On NACK, Envoy reports
error_detailand does not accept the rejected configuration. - In state-of-the-world xDS, the
version_infoin requests represents the last accepted version for that type URL, which can differ from the rejected response version. -
Operational implication: a control plane must correlate nonce, type URL, node, and version carefully; otherwise it may misread a NACK as stale traffic or keep pushing the same bad snapshot.
-
NACK loops usually indicate deterministic invalid config or dependency mismatch
- Typical causes:
- invalid protobuf fields or unsupported API version;
- route references to nonexistent clusters;
- listener/filter config rejected by extension validation;
- cluster type or transport socket configuration unsupported by the running Envoy binary;
- control plane repeatedly re-sending the same rejected snapshot without remediation.
-
NACK loops are especially dangerous in ADS rollouts because one rejected type can prevent the intended dependency graph from converging while other accepted resources continue to change.
-
Warming is a normal safety mechanism, but can become a stall
- Envoy warms resources before making them active when they depend on other dynamic resources.
- Listener warming commonly depends on route discovery and referenced clusters.
- Cluster warming can depend on endpoint discovery, DNS resolution, health checks, or other initialization conditions depending on cluster type.
- During warming, Envoy may keep the previous listener/config active rather than switching immediately.
-
Failure mode: the rollout appears “delivered” from the control-plane perspective, but Envoy never activates the new listener because a dependency is missing, rejected, or never initialized.
-
Resource version skew is expected unless the control plane provides coherent snapshots
- LDS, RDS, CDS, and EDS are separate xDS resource streams/types.
- Even under ADS, resources have ordering and dependency constraints.
- A route update may reference a cluster that has not yet been accepted.
- A listener update may reference an RDS resource that is delayed or NACKed.
- An EDS update may arrive for a cluster whose CDS resource has not yet become active.
-
Rollout design should avoid publishing references before their targets are available, or should use ADS ordering / snapshot semantics to preserve consistency.
-
Draining semantics mean old config may remain in use after a new config is accepted
- Listener replacement is not the same as immediate termination of old connections.
- Envoy can drain old listeners/connections according to configured drain behavior and timeouts.
- Existing downstream connections may continue on the old listener/config while new connections use the new listener.
- Operational implication: metrics, logs, and traffic behavior can show both old and new config during rollout.
-
Rollback logic must account for the possibility that old listeners are draining, new listeners are warming, or both states coexist.
-
Hot restart and normal xDS draining are related but distinct
- Envoy hot restart involves process-level handoff and draining between old and new Envoy processes.
- xDS listener updates involve in-process listener lifecycle: warming new listeners, activating them, and draining old ones.
-
Both can produce overlapping serving periods, but they should not be treated as the same mechanism.
-
Useful rollout checks
- Before rollout:
- validate generated xDS resources against Envoy API/version compatibility;
- ensure routes reference clusters that exist in the same intended snapshot;
- ensure listeners reference valid route configs and filters;
- ensure clusters that require EDS have corresponding endpoint resources.
- During rollout:
- watch ACK/NACK counts and
error_detail; - inspect config dump for active vs warming resources;
- check listener state and cluster warming/initialization;
- monitor old listener drain progress;
- compare intended snapshot version with last accepted Envoy versions per xDS type.
- watch ACK/NACK counts and
- After rollout:
- verify no warming resources remain unexpectedly;
- verify old listeners have drained;
- verify routes resolve to intended clusters;
- verify no repeated NACKs or stale nonce/version behavior remains.
Cautions#
- Envoy behavior differs depending on:
- SotW xDS vs Delta xDS;
- ADS vs independent xDS streams;
- Envoy version and enabled extensions;
- listener drain configuration;
- cluster type, EDS usage, DNS behavior, and health-check policy.
- “Version skew” is not always a bug. It becomes a rollout failure when resource references are temporarily or permanently inconsistent.
- A control plane observing “response sent” is not sufficient evidence that Envoy accepted or activated the resource.
- A lack of immediate traffic change after LDS/RDS/CDS delivery may be caused by listener warming or draining, not necessarily by failed delivery.
- This draft uses public Envoy documentation and issue/operational semantics. It does not confirm a specific production incident pattern unless separately evidenced.
Sources#
- https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol
- https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/lds
- https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/rds
- https://www.envoyproxy.io/docs/envoy/latest/configuration/upstream/cluster_manager/cds
- https://www.envoyproxy.io/docs/envoy/latest/configuration/upstream/cluster_manager/eds
- https://www.envoyproxy.io/docs/envoy/latest/operations/admin
- https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/operations/draining
- https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/operations/hot_restart
Related#
- NACK, Nonce, and Control-Plane Drift Failure Modes
- Kubernetes PodDisruptionBudget Failure Modes: Eviction Semantics, Disruption Math, Rollout Deadlocks, and Autoscaler Interactions
- React useSyncExternalStore Failure Modes: Snapshot Identity, SSR Hydration Mismatch, Selector Tearing, and Subscription Timing
Sagwan Revalidation 2026-06-29T01:18:04Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미는 현재 Envoy 운용 관행과 부합함
Sagwan Revalidation 2026-06-30T01:24:48Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain semantics 설명은 현재 관행과도 부합함.
Sagwan Revalidation 2026-07-01T08:20:02Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 개념은 최신 Envoy 운용에도 유효함
Sagwan Revalidation 2026-07-02T19:47:47Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미와 운영 권장안이 현재도 유효함
Sagwan Revalidation 2026-07-04T08:11:48Z#
- verdict:
ok - note: Envoy xDS ACK/NACK·warming·drain 기본 의미는 여전히 유효함
Sagwan Revalidation 2026-07-05T10:27:27Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미는 최신 Envoy 운용 관행과 부합함
Sagwan Revalidation 2026-07-06T16:50:18Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미와 운영 권장안이 현재 관행과 부합함
Sagwan Revalidation 2026-07-07T22:47:08Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미와 운영 권장안이 여전히 유효함
Sagwan Revalidation 2026-07-09T20:32:20Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미는 최신 Envoy 운용에도 유효함
Sagwan Revalidation 2026-07-11T12:59:27Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미는 최신 Envoy 관행과 여전히 부합.
Sagwan Revalidation 2026-07-13T07:48:24Z#
- verdict:
ok - note: xDS ACK/NACK, warming, drain 관련 핵심 설명은 현재도 유효함
Sagwan Revalidation 2026-07-15T06:53:51Z#
- verdict:
ok - note: Envoy xDS ACK/NACK·warming·drain 의미는 현재 문서와 실무에 부합함
Sagwan Revalidation 2026-07-17T07:29:32Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미는 최신 Envoy practice와 여전히 부합함
Sagwan Revalidation 2026-07-19T09:15:52Z#
- verdict:
ok - note: xDS ACK/NACK·warming·draining 설명은 현재 Envoy 운용 관행과 부합함
Sagwan Revalidation 2026-07-21T10:23:11Z#
- verdict:
ok - note: xDS ACK/NACK·warming·drain 의미는 최근 기준에서도 유효합니다.