Skip to content

[WIP] [PMREQ-818] BGP EVPN Phase 1 operator changes - #5281

Draft
skoryk-oleksandr wants to merge 3 commits into
tigera:masterfrom
skoryk-oleksandr:poc/bgp-evpn-installation
Draft

[WIP] [PMREQ-818] BGP EVPN Phase 1 operator changes#5281
skoryk-oleksandr wants to merge 3 commits into
tigera:masterfrom
skoryk-oleksandr:poc/bgp-evpn-installation

Conversation

@skoryk-oleksandr

@skoryk-oleksandr skoryk-oleksandr commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Summary

WIP / do not merge. Operator changes for BGP EVPN Phase 1 (PMREQ-818).

Companion PoC branch in tigera/calico-private: https://github.com/tigera/calico-private/pull/13561. Design doc lives at tigera/designs under 2026/PMREQ-818-bgp-evpn-research/design.md.

What is included

  • api/v1/installation_types.go: Installation.spec.calicoNetwork.evpn API (EVPNSpec, EVPNMode string enum, per-cluster peer defaults).
  • pkg/render/evpn_bgp_daemon.go: renders the calico-bgp DaemonSet when evpn.mode: Enabled (hostNetwork, hostPath UDS mount for /var/run/calico, TolerateAll, RollingUpdate).
  • pkg/render/node.go: propagates FELIX_EVPN_* env vars (SOCKET_PATH, NODE_IP via status.hostIP fieldRef, NODE_ASN, PEER_IP, PEER_ASN, MAX_HOP_LIMIT) onto the calico-node DaemonSet.
  • pkg/controller/installation/core_controller.go: conditionally passes the EVPN DaemonSet renderer when Mode == Enabled.
  • pkg/controller/utils/merge.go: adds the EVPN case to mergeCalicoNetwork so the field is not stripped during Installation defaulting.

Test plan

  • pkg/controller/utils (full package, merge regression)
  • pkg/render (full package, render regression)
  • FV against the companion calico-private PoC branch in a kind cluster
  • End-to-end: apply Installation with EVPN block, confirm calico-bgp DaemonSet renders and FELIX_EVPN_* env vars appear on calico-node

Adds an EVPN block to the Installation CalicoNetworkSpec so the operator
can enable BGP EVPN feature end-to-end:

- Installation.spec.calicoNetwork.evpn = {mode, peerIP, peerASN,
  localASN, maxHopLimit}. Mode is a Disabled/Enabled enum defaulting to
  Disabled.
- Regenerated CRD manifests and deepcopy via 'make gen-files'.

Follow-on commits will:
- Propagate the config to Felix via FELIX_EVPN_* env vars in nodeEnvVars.
- Render a calico-bgp DaemonSet on every node when EVPN is Enabled.
- Add the shared UDS hostPath volume between calico-node and calico-bgp.
When Installation.spec.calicoNetwork.evpn.mode == Enabled:
- Render a calico-bgp DaemonSet with hostNetwork=true and hostPath UDS.
- Propagate FELIX_EVPN_* env vars to calico-node.
Without this, Installation.spec.calicoNetwork.evpn is silently
dropped during Installation defaulting: mergeCalicoNetwork() copies
each CalicoNetworkSpec field individually and had no case for the
new EVPN field.

Result of the miss: the operator never sets FELIX_EVPN_* env vars
on calico-node and never renders the calico-bgp DaemonSet, even
when the user's Installation had the EVPN block populated.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants