Hand-authored illustration. The YAML on this page illustrates the shape of the policies kguardian generates for this workload — it is not captured generator output. Exact metadata, rule grouping, and selectors produced by kubectl kguardian gen will differ. Regeneration of this gallery from a live cluster is planned.
Workload
A golang:1.23 HTTP API in the app namespace. It serves JSON on TCP/8080 to upstream callers (an internal gateway), writes to Postgres in the data namespace, and makes outbound HTTPS calls to a single SaaS endpoint (api.stripe.com) for payment processing. It also exposes Prometheus metrics on TCP/9100.
Generated NetworkPolicy
Kubernetes-native NetworkPolicy cannot express “egress to api.stripe.com” by hostname. In real generator output, that traffic appears as a /32 ipBlock egress rule for the observed IP (not shown above) — functional, but brittle for CDN-backed endpoints whose addresses rotate.
Generated CiliumNetworkPolicy
Generated seccomp profile (excerpt)
Full profile contains 97 syscall names. Representative excerpt:
What kguardian observed
The Go runtime makes this profile easy to recognise: heavy futex (goroutine scheduling), getrandom (TLS), rseq and sched_yield (scheduler hints), and a small file-I/O footprint. Network-wise, the controller saw three distinct egress destinations — Postgres in the data namespace, CoreDNS for DNS, and api.stripe.com resolved at runtime. The generator does not emit hostname-based rules, so the Stripe traffic is covered by a /32 ipBlock egress rule for the resolved IP. That works, but is brittle for CDN-backed endpoints like Stripe whose addresses rotate — expect to re-generate or hand-maintain that rule.