Vulnerability scanning
Trivy, pinned into the image. Findings by severity, with the fixed version where one exists.
Portiger Kapan is a Kubernetes operator that scans image vulnerabilities, verifies signatures, decides what admission accepts, and keeps the record an auditor asks for. All of it runs inside your cluster. Nothing about your images, your workloads or your infrastructure ever leaves it.
Most image-security products are hosted somewhere else. To work, they need a list of every image you run, which registries you pull from, and often a read path into the cluster itself. That inventory is a map of your estate, and it now lives on somebody else's infrastructure, under somebody else's breach notification duty.
Kapan is installed into a namespace you own, and it stays there.
The operator, its API, its console and its database go in with one Helm release. There is no agent to register and no account to create in your cluster; the one route out is the daily licence check, and it carries three values that say nothing about what you run. When the licence expires the installation falls back to the free edition rather than switching your admission control off.
A webhook that scans inline is a webhook that eventually times out and takes deployments with it. Kapan decides from a cache that a separate scanner keeps warm, so an admission review is a database read and a policy evaluation, not a network call to a registry.
The API server calls the validating webhook with the pod's images.
By digest, from the cache. A digest never seen before is Unknown, never Compliant.
Severity thresholds, tag rules, registry allow-lists, signature requirements, workload hardening.
The scanner pulls the job, runs Trivy and cosign, and writes the verdict back for next time.
The default failure policy is Ignore. If the operator is down, deployments proceed unguarded rather than stopping. A licensed installation can set Fail and deny until scanned.
Trivy, pinned into the image. Findings by severity, with the fixed version where one exists.
cosign verification, by key or keyless, plus in-toto attestations with a maximum age.
Accept a risk with a reason and a deadline. Break-glass when a deployment cannot wait. Both are recorded.
Slack, Teams, e-mail and a generic webhook for everything else. They name the cluster, never its topology.
A period report mapped to the control set you select, stating what it cannot prove as clearly as what it can.
Pull from your own registry, mirror the vulnerability database into it. The documented default, not a workaround.
Policy changes, admission overrides, triage decisions, evidence exports and access events in one record, kept for a retention you set.
Google, GitHub, GitLab, Okta, Microsoft Entra ID, Keycloak or plain OIDC, tested before you save. Roles decide who may change a policy.
Fifteen hardening controls, severity thresholds, tag and registry rules. The form and the manifest are one object, and the editor knows when Argo CD or Flux owns it.
The same Helm release that installs the operator installs the console it serves. There is no separate deployment, no tenant to attach somewhere else and no second bill. You sign in at an address your own cluster exposes, and every screen reads the database sitting next to it.
Operators sign in through the identity provider you already run, so an account here is never a second place to remember to revoke access. Roles decide who may change a policy, accept a risk or generate evidence, and each of those actions lands in the audit log with a name against it.
English and Turkish, light and dark, and a help panel on every screen written in both. Verdicts appear as they are decided; nothing waits for a page refresh.
Image posture, admission decisions and operator health, with the severity trend for the period.
Every image admission has seen in this cluster, and the scan report behind each one.
Findings across every image, grouped by CVE, with triage that carries a reason and an expiry date.
The rules admission applies. Edit the form or edit the manifest — they are the same resource.
One consolidated document per audit period: generated, printed, downloaded, and marked delivered.
Policy changes, overrides, triage, evidence exports and access, searchable by actor, policy, image or CVE.
Distinct image names counted this period, the edition that sets the limit, and six periods of history.
Accounts, roles and identity providers, with a connection test that reports the address it actually contacted.
Notification channels, SMTP, per-role e-mail preferences, appearance, and what this installation scans with.
Kapan generates a period report mapped to the control set you select. Every control lands in one of four states, and the honest two are not hidden: a control that was only partly operating says partial, and one with no supporting record says gap. If the webhook was down for forty minutes on a Tuesday, that window is in the document.
The package is JSON, and the console renders it for printing. It is evidence produced from your own records. It is not a certification and no auditor is obliged to accept it.
{
"report_id": "PS-EU-PRODEU-20260801-20260831-7A3F91",
"framework": "eu-cra",
"cluster": "production-eu",
"period": { "from": "2026-08-01", "to": "2026-08-31" },
"availability": {
"continuous": false,
"outages": [
{ "from": "2026-08-12T09:14:02Z",
"to": "2026-08-12T09:54:40Z",
"detail": "controller heartbeat gap" }
]
}
}
13 criteria a container image control actually speaks to, each cited rather than paraphrased.
34 requirements across two instruments that bind different subjects: the manufacturer and the entity.
22 requirements for the financial sector's digital operational resilience.
Three instruments today, and the mapping ships inside the operator rather than being fetched. ISO 27001 is not among them yet. When it is, it will be a table like the others, written by someone who knows the standard.
The chart brings its own PostgreSQL, or takes a DSN to one you already run. Either way the operator creates and migrates its tables on first start, so there is no SQL for you to run and no migration step to forget on upgrade.
# 1 — add the chart
helm repo add portiger https://charts.portiger.com
helm repo update
# 2 — install into a namespace you own
helm install kapan portiger/portiger-kapan \
--namespace portiger-kapan --create-namespace \
--set clusterName=production-eu --wait
# 3 — open the console
kubectl -n portiger-kapan port-forward svc/kapan 8080:8080
Scanning, signature verification, admission enforcement and evidence packages are not held back. What a key buys is scale: more clusters, more frameworks, a larger image allowance, and the two capabilities a regulated estate needs.
Three values, once a day, for licensing: the licence identifier, a fingerprint of the cluster, and the operator version. No image names, no findings, no workload names, no cluster topology, nothing from your database. The image and framework limits your plan sets are counted inside your own cluster, so those counts never leave it.
The installation falls back to Community Edition. It does not stop, it does not lock you out, and it does not start denying deployments. Scanning and admission carry on under the free limits. A security control that switches itself off over a billing date is a worse outcome than an unpaid invoice.
Not in this release. Each cluster runs its own operator with its own database and its own console. They are independent by design, which is why nothing has to cross a cluster boundary. A fleet view is on the roadmap. No date on it yet.
Up to the number your plan pays for. That is what the cluster count on the price list means. Every activation spends a slot, your account shows which clusters hold them and how many are free, and beyond that number an activation is refused rather than quietly allowed. How licensing works has the rest.
The Helm chart brings its own PostgreSQL, or takes a DSN to one you already run. Either way the operator creates and migrates its own tables on first start, so there is no SQL for you to run and no migration step to forget on upgrade.
In the public issue tracker at github.com/portiger/kapan-k8s. Reports are handled there in the open, and fixed security issues are published as advisories on the same repository.
Community Edition is free and unlimited in time. The trial adds the Enterprise feature set for 30 days, and falls back rather than shutting anything off.
No account is created in your cluster. No agent registers with us.