Skip to content

Edge serves stale TrafficProtectionPolicy config during upstream→edge propagation with no lag visibility #266

Description

@ecv

Summary

TrafficProtectionPolicy spec changes made on the upstream control plane take an unbounded, unobservable amount of time to reach the edge data plane. During that window an edge serves the stale (previously-valid-or-invalid) WAF config, with no signal — on the cluster or in metrics — that a given edge is behind the control plane for a given policy.

This surfaced while investigating #242: a tenant corrected an inverted-paranoia TPP upstream, but the edge continued serving the old inverted config (which 500s 100% of the route via CRS 901500 fail-closed) for a window before converging.

Evidence

Observed on prod us-central-1-alice, policy ns-c5f1cf4e…/kev1n-proxy:

Source generation paranoiaLevels
upstream (karmada control plane) 8 {detection: 2, blocking: 2} (valid — tenant-corrected)
edge us-central-1-alice (first read) 7 {detection: 1, blocking: 2} (inverted — 500s all traffic)
edge us-central-1-alice (later read) 8 {detection: 2, blocking: 2} (converged)

So the projection is eventually consistent — it did converge — but the edge served the broken inverted config for the lag window, and nothing exposed that the edge was a generation behind. This is not a stuck/broken sync; it's propagation latency with zero visibility.

Why it matters

Asks

  1. Observability: expose the applied TPP generation / resourceVersion per edge (metric or status), so control-plane vs edge skew is queryable. A spec.observedGeneration-style signal on the edge-side attachment, or a metric labeled by policy + edge, would let us alert on lag.
  2. Bound / quantify the latency: measure typical and worst-case upstream→edge propagation time for a TPP spec change; decide whether it needs an SLO.
  3. (stretch) Consider surfacing staleness at the control plane so a tenant/operator sees "not yet applied on N edges" after an edit.

Not this issue

Related: #242, #255.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions