Skip to content

feat(trust): wire per-tier egress NetworkPolicy + live telemetry ingestion#55

Draft
gnanirahulnutakki wants to merge 1 commit into
devfrom
fix/A5-tier-egress-telemetry
Draft

feat(trust): wire per-tier egress NetworkPolicy + live telemetry ingestion#55
gnanirahulnutakki wants to merge 1 commit into
devfrom
fix/A5-tier-egress-telemetry

Conversation

@gnanirahulnutakki

Copy link
Copy Markdown
Member

Closes #41

What

(a) Per-tier NetworkPolicy egress enforcement

go/pkg/trust/network_policy.go — pure Go generator, no cluster needed:

Tier Policy Egress rule
full (≥70) vibap-egress-full Allow all
limited (≥40) vibap-egress-limited Cluster-internal only (UDP 53 + TCP to pods, no IPBlock)
quarantine (<40) vibap-egress-quarantine TCP 9090 (Prometheus) same-namespace only

The reconciler (issueCredential) calls applyNetworkPolicyForTier after every credential issuance, so a tier change takes effect on the next reconcile without waiting.

(b) Live telemetry ingestion

go/cmd/operator/telemetry_handler.go — HTTP handler:

  • Endpoint: POST /telemetry/signal (default :8082, flag --telemetry-bind-address)
  • Accepts Tetragon / Kubescape / verifier signals as JSON (TelemetrySignal wire format)
  • Returns updated TrustScore JSON (including authorization_tier)
  • On tier change + namespace provided: fires applyPolicy callback to immediately re-enforce egress

Tests

Package New tests All pass
go/pkg/trust 9 (NetworkPolicy generation)
go/cmd/operator 9 (telemetry ingestor)
All Go packages ✅ 15/15

Needs a cluster

The following require a K8s cluster with a CNI that supports NetworkPolicy:

  • applyNetworkPolicy (Get + Create/Update K8s API calls in reconciler)
  • Acceptance criterion: "a tier change measurably changes egress on a test cluster"

Without a cluster, applyNetworkPolicyForTier logs a warning and continues — the trust score update still persists and the NetworkPolicy object is generated correctly (verified by 9 unit tests).

…stion

(a) NetworkPolicy generation: pkg/trust/network_policy.go generates K8s
NetworkPolicy objects per trust tier (full=allow-all, limited=cluster-
internal only, quarantine=Prometheus-only on TCP 9090). The reconciler
calls applyNetworkPolicyForTier after every credential issuance so tier
changes take immediate effect.

(b) Telemetry ingestor: cmd/operator/telemetry_handler.go exposes
POST /telemetry/signal (default :8082) accepting TelemetrySignal JSON
from Tetragon, Kubescape, and credential verifiers. On tier change the
handler fires applyPolicy so egress is re-enforced without waiting for
the next reconcile.

Locally testable: manifest generation (9 tests) and ingestor (9 tests)
run without a cluster. NetworkPolicy.Create/Update calls in
applyNetworkPolicy and the acceptance criterion (tier change measurably
changes egress) require a K8s cluster.

Fixes #41
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.

Wire trust-tier -> egress NetworkPolicy + live telemetry ingestion

1 participant