Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ adjacencies
[mM]ultitenant
navbar
[nN]amespace[ds]?
[nN]etkit
[nN]etmask
[nN]etwork[Pp]olic(y|ies)
[nN]etwork[Ss]et[s]?
Expand Down
33 changes: 32 additions & 1 deletion calico/operations/ebpf/enabling-ebpf.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -458,9 +458,40 @@ To revert to veth, set the field back to `Veth` (or remove it):
kubectl patch installation.operator.tigera.io default --type merge -p '{"spec":{"calicoNetwork":{"linuxPodInterfaceType":"Veth"}}}'
```

Existing pods keep their netkit interfaces, but the eBPF data plane treats those as veth (programs attach via TC/TCX, the same path used for actual veth interfaces).
Existing pods keep their netkit interfaces, and the eBPF data plane keeps driving those through netkit attachment unless `bpfAttachType` says otherwise (see below).
Only newly created pods get veth interfaces.

***Attach mechanism***

The `bpfAttachType` field of the `FelixConfiguration` selects how the eBPF data plane attaches its programs:

* `Netkit` (default) — netkit attachment on netkit interfaces, TCX on every other interface.
* `TCX` — TCX on every interface, including netkit interfaces.
* `TC` — the legacy qdisc-based attachment on every interface. Pod bandwidth QoS annotations are not supported with `TC`.
Comment on lines +466 to +470

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Claude: Correct that they disagree today, but _includes/components/FelixConfig/config-params.json is generated, not authored here — scripts/update-felix-config.sh syncs it from the product repos. Hand-editing it would be overwritten on the next sync.

The Netkit value is added by projectcalico/calico#13462, which updates the generated source. So the reference picks it up on the next sync after that merges, and this PR should not merge before it.


Setting `TCX` or `TC` also moves existing netkit interfaces onto that mechanism.
The interfaces stay netkit and no pod is recreated; only the attachment changes.
Changing the field restarts Felix on every node.

***Downgrading to a release without netkit support***

A release that has no concept of netkit attachment cannot remove netkit programs.
If you downgrade such a node directly, its pods keep the netkit programs attached — still enforcing the policy that was in force at downgrade time — while the downgraded Felix programs the same interfaces through TC/TCX, leaving two data planes on one interface.

Move the interfaces off netkit attachment before you downgrade:

```bash
kubectl patch felixconfiguration default --type merge -p '{"spec":{"bpfAttachType":"TCX"}}'
```

Felix restarts on each node and re-attaches its programs, removing the netkit links.

After upgrading again, remove the field to return to the default:

```bash
kubectl patch felixconfiguration default --type json -p '[{"op":"remove","path":"/spec/bpfAttachType"}]'
```

## Reversing the process

To revert to standard Linux networking:
Expand Down