Skip to content

[PMREQ-810]: L2 support phase 1: Add Network CRD and RBAC for L2 VM mobility#4719

Draft
fasaxc wants to merge 3 commits intotigera:masterfrom
fasaxc:l2-prod
Draft

[PMREQ-810]: L2 support phase 1: Add Network CRD and RBAC for L2 VM mobility#4719
fasaxc wants to merge 3 commits intotigera:masterfrom
fasaxc:l2-prod

Conversation

@fasaxc
Copy link
Copy Markdown
Member

@fasaxc fasaxc commented Apr 20, 2026

Summary

Unblocks the WIP calico-private branch wt-l2-prod-cni (PMREQ-810 L2 VM mobility) by:

  • Bundling the new projectcalico.org/v3.Network CRD into the enterprise CRD imports tree.
  • Granting each Calico component the minimum RBAC verbs it needs for the new resource.

Verb matrix added:

Component Verbs File
calico-node (Felix) get/list/watch pkg/render/node.go
calico-cni-plugin get pkg/render/node.go
calico-typha get/list/watch pkg/render/typha.go
calico-apiserver full CRUD pkg/render/apiserver.go
non-cluster-host Felix get/list/watch pkg/render/nonclusterhost/nonclusterhost.go

calico-kube-controllers is intentionally left out: the finalizer controller is Phase 2 per the design.

Caveat — draft until calico-private lands

config/enterprise_versions.yml is temporarily pointed at the wt-l2-prod-cni branch so make fetch-enterprise-crds finds the new CRD. Reset to master once wt-l2-prod-cni merges into tigera/calico-private:master. Keeping this as a draft PR until then.

Test plan

  • make format-check
  • make static-checks
  • make test-crds (validates the bundled CRD serialises)
  • make ut UT_DIR=./pkg/render focused on Node / Typha / API server / nonclusterhost suites — all pass
  • Reset enterprise_versions.yml back to master once wt-l2-prod-cni merges
  • Smoke test against a kind cluster (operator installs the new CRD and Felix/CNI/typha start cleanly)

Related

  • Design: tigera/designs/2026/PMREQ-810-L2_VM_Mobility/
  • Calico-private branch: wt-l2-prod-cni (already includes the operator-SA update RBAC for the CRD in manifests/ocp/02-role-tigera-operator.yaml)

@marvin-tigera marvin-tigera added this to the v1.43.0 milestone Apr 20, 2026
@fasaxc fasaxc changed the title PMREQ-810: Add Network CRD and RBAC for L2 VM mobility [PMREQ-810]: L2 support phase 1: Add Network CRD and RBAC for L2 VM mobility Apr 22, 2026
fasaxc and others added 3 commits April 27, 2026 17:55
Unblocks the calico-private wt-l2-prod-cni branch, which introduces
the new projectcalico.org/v3 Network resource for Layer 2 VM bridging.
Bundles the CRD into the enterprise imports tree and grants each
Calico component the minimum verbs it needs to operate against
Networks:

  - calico-node (Felix):   get/list/watch (bridge reconcile)
  - calico-cni-plugin:     get             (resolve L2 attachments)
  - calico-typha:          get/list/watch (syncer fan-out)
  - calico-apiserver:      full CRUD      (aggregated API backing)
  - non-cluster-host Felix: get/list/watch (Felix watch layer
                                            errors without RBAC,
                                            even when the feature
                                            is unused)

kube-controllers is intentionally out of scope: the finalizer
controller is Phase 2 per the PMREQ-810 design.

config/enterprise_versions.yml is temporarily pointed at the
wt-l2-prod-cni branch so "make fetch-enterprise-crds" pulls the new
CRD.  Reset to "master" once wt-l2-prod-cni merges into
calico-private master.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dropping the title bump keeps EnterpriseRelease as "master" and
avoids a stale pkg/components/enterprise.go (which tripped CI
dirty-check on the previous commit).  Only libcalico-go.version
needs to point at wt-l2-prod-cni for the CRD fetch.

Also picks up crd.projectcalico.org_networks.yaml, which landed
on the wt-l2-prod-cni branch after the first fetch.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Picks up the latest design iteration of the Network resource on
the calico-private wt-l2-prod-cni branch:
- Status subresource removed (deferred to Phase 2 with the
  kube-controllers Network controller).
- "untagged" VLAN match replaced by per-trunk "nativeVLAN" semantics.
- "broadcastMulticast" field dropped.

No operator-side code or RBAC changes — Phase 1 RBAC is unchanged.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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