/////

Envoy xDS Rollout Failure Modes: Warming Stalls, NACK Loops, Resource Version Skew, and Draining Semantics

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, r

/////

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 / DiscoveryResponse exchanges.
  • ACK/NACK is tied to the response nonce.
  • On NACK, Envoy reports error_detail and does not accept the rejected configuration.
  • In state-of-the-world xDS, the version_info in 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.
  • 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

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 의미는 최근 기준에서도 유효합니다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1