Skip to main content

Cilium boundary

Paqtra is the Cilium-native observe/ops sibling. Netra is the independent eBPF sibling. They must not fight.

Roles​

RoleOwnsMust not
CiliumCNI, policy maps, identity, datapath (cil_*)—
PaqtraInstall/status CLI, DaemonSet agent, Hubble/API/UI, read-only map + program inventoryAttach/replace Cilium programs; write Cilium maps; second CNI
NetraOwn programs under /sys/fs/bpf/netra, TCX/XDP, netlinkModify Cilium maps

Hard boundaries​

  • Never write Cilium BPF maps or pin over cil_*
  • Agent = observe / health / inventory; enforcement = Cilium CNP
  • Prefer Hubble for flows; maps for node-local enrichment
  • Attachment inventory classifies cil_* / netra_* / other — never attach, detach, or replace

CLI​

paqtra features # discovery catalog (observe tiers)
paqtra ebpf attachments # read-only program inventory
paqtra status # includes BPF drift rows when available

Agent HTTP (node-local)​

GET /health
GET /attachments
GET /drift

Classification​

Program names (full or truncated to 15 characters) map to owners:

  • cilium — cil_*, cilium*
  • netra — netra_*
  • other — everything else

Drift findings (warn-only)​

KindSeverityMeaning
bpf-inventory-unavailableinfobpftool missing/failed
bpf-cilium-missingwarningNo cil_* programs visible
bpf-inventory-truncatedinfoCap hit (200 programs)

None of these findings mutate the datapath.

Network change assurance​

Paqtra explains failures and previews Cilium policy changes; it does not become a second datapath:

  • POST /api/v1/investigate/path — why can’t A reach B (evidence + confidence)
  • POST /api/v1/investigate/flow — why was this connection denied (from a DROPPED flow)
  • Prefer Hubble Observer gRPC for flows (HUBBLE_MODE=grpc in the chart); maps for node-local enrichment only
  • POST /api/v1/policies/simulate — flow-matched preview; unsupported constructs → unknown
  • Apply / rollback only via Cilium CRDs (CiliumNetworkPolicy)

See investigate.md.