Skip to content

Architecture

Updated 1 min read

The Provenance Collector runs as a Kubernetes CronJob that discovers what is running on the cluster, enriches it with supply-chain data from the container registry, and ships a timestamped JSON report to the configured sink.

HTTP upload, default

/api proxy

Kubernetes CronJob

default: daily 06:00 UTC

Image Discovery

pods + workload owners

Helm Discovery

via Helm SDK

Enrichment

digest resolve · cosign verify

SBOM · SLSA · update check

JSON Provenance Report

Browser

React SPA · keycloak-js PKCE

Frontend

nginx · serves SPA · proxies /api

Dashboard API

JSON API · owns the PVC

ConfigMap

persistence.mode=configmap

Shared PVC

persistence.mode=pvc

Grafana

via Infinity datasource

The collector reads the Kubernetes API for inventory and the registry for enrichment, then ships the report to the dashboard’s internal upload endpoint (default), a ConfigMap, or a shared PVC depending on persistence.mode (see Storage Modes). It does not push to remote services or mutate cluster state outside the configured sink. The UI is served separately: the browser loads the React SPA from the frontend nginx container, which reverse-proxies /api/* to the dashboard.

CapabilityDescription
Image DiscoveryScans all pods across namespaces, deduplicates by workload owner
Digest ResolutionResolves every image tag to its immutable SHA256 digest
Signature VerificationChecks for cosign signatures (existence or key-based verification)
SLSA ProvenanceDetects SLSA provenance attestations via OCI referrers API
SBOM DetectionDetects attached SPDX / CycloneDX attestations
Update CheckingCompares running tags against latest semver tags (configurable level, pre-release filtering)
Helm Release TrackingDiscovers all deployed Helm releases with chart versions
Web DashboardOptional React + TypeScript SPA (served by nginx) with filters, sorting, pagination, and an image detail drawer
Grafana IntegrationJSON API compatible with the Infinity datasource for dashboards and alerting
Provenance ReportsOutputs timestamped JSON reports via the dashboard’s internal upload endpoint (default), a shared PVC, or a ConfigMap, with automatic retention