Skip to content

Correct what survives the switch to eBPF mode - #3009

Open
tomastigera wants to merge 1 commit into
tigera:mainfrom
tomastigera:tomas/ebpf-migration-preexisting-conns
Open

Correct what survives the switch to eBPF mode#3009
tomastigera wants to merge 1 commit into
tigera:mainfrom
tomastigera:tomas/ebpf-migration-preexisting-conns

Conversation

@tomastigera

Copy link
Copy Markdown
Contributor

The Enable eBPF mode section says preexisting connections "should not be disrupted". That holds only for TCP, so the page currently promises more than the dataplane delivers.

Replaced with what actually happens, per protocol: TCP connections survive including any address translation, because the translation lives in the Linux conntrack entry rather than in the kube-proxy rules Calico removes; non-TCP traffic is treated as new, so a UDP flow to a service with several backends can move to a different one; and connections over a VXLAN overlay do not survive, because the device is recreated in eBPF mode and the kernel drops the conntrack state with it.

Verified against the dataplane code and covered by a new functional verification test in projectcalico/calico#13778, which holds a TCP connection through a service across the switch and confirms it survives the removal of the kube-proxy rules.

Product Version(s): all — the sentence is identical and equally wrong in every version directory, so all 12 copies are corrected.

Issue: CORE-12056

Link to docs preview:

SME review:

  • An SME has approved this change.

DOCS review:

  • A member of the docs team has approved this change.

Additional information: the wording change came out of an investigation into which connections survive the iptables to eBPF switch. Written with Claude Code; I have reviewed every line and can explain the change.

The page said preexisting connections "should not be disrupted", which
is true only for TCP. Say what happens per protocol: TCP survives
including its address translation, non-TCP is re-evaluated and can move
to a different service backend, and flows over a VXLAN overlay do not
survive the device being recreated.

CORE-12056
Copilot AI lite review requested due to automatic review settings September 4, 2026 02:39
@tomastigera
tomastigera requested a review from a team as a code owner September 4, 2026 02:39
@netlify

netlify Bot commented Sep 4, 2026

Copy link
Copy Markdown

Deploy Preview succeeded!

Built without sensitive environment variables

Name Link
🔨 Latest commit 17bbf7a
🔍 Latest deploy log https://app.netlify.com/projects/tigera/deploys/6a9a2f6af88f830008ff699b
😎 Deploy Preview https://deploy-preview-3009--tigera.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 80 (🔴 down 15 from production)
Accessibility: 98 (no change from production)
Best Practices: 92 (no change from production)
SEO: 100 (no change from production)
PWA: -
View the detailed breakdown and full score reports
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify

netlify Bot commented Sep 4, 2026

Copy link
Copy Markdown

Deploy Preview for calico-docs-preview-next ready!

Name Link
🔨 Latest commit 17bbf7a
🔍 Latest deploy log https://app.netlify.com/projects/calico-docs-preview-next/deploys/6a9a2f6a2e676800081b1f7c
😎 Deploy Preview https://deploy-preview-3009--calico-docs-preview-next.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The updated text introduces repeated terminology/consistency and grammar issues in the newly added paragraphs that should be corrected across all touched copies before merging.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Updates the “Enable eBPF mode” documentation to accurately describe what happens to preexisting traffic when switching a running cluster from the standard data plane to the eBPF data plane, applied consistently across current and versioned product docs.

Changes:

  • Replaces the blanket “should not be disrupted” statement with protocol-specific behavior (TCP vs non-TCP vs VXLAN overlay).
  • Applies the same wording correction across Calico Open Source, Calico Enterprise, and Calico Cloud docs (including multiple versioned copies).
File summaries
File Description
calico/operations/ebpf/enabling-ebpf.mdx Clarifies survivability of existing traffic across the switch, per protocol.
calico-enterprise/operations/ebpf/enabling-ebpf.mdx Same protocol-specific clarification for Enterprise docs.
calico-cloud/operations/ebpf/enabling-ebpf.mdx Same protocol-specific clarification for Cloud docs.
calico-enterprise_versioned_docs/version-3.24-2/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released Enterprise doc version.
calico-enterprise_versioned_docs/version-3.24-1/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released Enterprise doc version.
calico-enterprise_versioned_docs/version-3.23-2/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released Enterprise doc version.
calico-enterprise_versioned_docs/version-3.22-2/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released Enterprise doc version.
calico-enterprise_versioned_docs/version-3.21-2/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released Enterprise doc version.
calico-cloud_versioned_docs/version-23-2/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released Cloud doc version.
calico_versioned_docs/version-3.32/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released OSS doc version.
calico_versioned_docs/version-3.31/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released OSS doc version.
calico_versioned_docs/version-3.30/operations/ebpf/enabling-ebpf.mdx Propagates the clarification to this released OSS doc version.
Review details

Suppressed comments (12)

calico/operations/ebpf/enabling-ebpf.mdx:402

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-enterprise/operations/ebpf/enabling-ebpf.mdx:238

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-cloud/operations/ebpf/enabling-ebpf.mdx:251

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-enterprise_versioned_docs/version-3.24-2/operations/ebpf/enabling-ebpf.mdx:238

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-enterprise_versioned_docs/version-3.24-1/operations/ebpf/enabling-ebpf.mdx:238

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-enterprise_versioned_docs/version-3.22-2/operations/ebpf/enabling-ebpf.mdx:206

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-enterprise_versioned_docs/version-3.21-2/operations/ebpf/enabling-ebpf.mdx:206

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-enterprise_versioned_docs/version-3.23-2/operations/ebpf/enabling-ebpf.mdx:238

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico-cloud_versioned_docs/version-23-2/operations/ebpf/enabling-ebpf.mdx:251

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico_versioned_docs/version-3.32/operations/ebpf/enabling-ebpf.mdx:403

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.
- **Connections over a VXLAN overlay do not survive.** $[prodname] recreates the VXLAN device when it

calico_versioned_docs/version-3.30/operations/ebpf/enabling-ebpf.mdx:369

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  with several backends can move to a different backend.

calico_versioned_docs/version-3.31/operations/ebpf/enabling-ebpf.mdx:402

  • The phrase “cannot tell a packet from an established UDP flow apart from a fresh one” mixes two idioms (“tell X from Y” vs “tell X apart from Y”) and reads ungrammatically.
  connection through a service keeps reaching the backend it was already using.
- **Traffic that is not TCP is treated as new.** eBPF mode cannot tell a packet from an established UDP flow
  apart from a fresh one, so it applies policy and picks a service backend again. A UDP flow to a service
  • Files reviewed: 12/12 changed files
  • Comments generated: 12
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +243 to +244
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines +243 to +244
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines +230 to +231
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines +198 to +199
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines +198 to +199
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines +230 to +231
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines +394 to +395
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines +361 to +362
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:
Comment on lines 394 to +395

When enabling eBPF mode, preexisting connections continue to use the non-BPF datapath; such connections should
not be disrupted, but they do not benefit from eBPF mode’s advantages.
When enabling eBPF mode, preexisting connections keep using the non-eBPF datapath. They do not benefit from
Comment on lines +395 to +396
eBPF mode’s advantages, and whether they survive the switch depends on the protocol:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants