Bjørn2Scan v2

June 18, 2026 · View on GitHub

Important

This repository is archived. Bjørn2Scan v2 now lives at github.com/bvboe/bjorn2scan. b2s-go was the original development home of the Go rewrite and is kept read-only for history. All releases, container images, and the Helm chart are published from the bjorn2scan repository.

Bjørn2Scan v2

bjorn2scan

Kubernetes-native vulnerability scanner. It continuously scans the images and hosts running in your cluster with Grype and Syft, then surfaces the results in a built-in web dashboard and as Prometheus / OpenTelemetry metrics.

  • Cluster scanning — every running container image, deduplicated and risk-scored
  • Host & node scanning — Linux hosts inside or outside Kubernetes
  • Web dashboard — images, containers, and nodes, plus deployment-wide CVE listings
  • Metrics — Prometheus endpoint and OpenTelemetry export for Grafana
  • Auto-update — signed, self-updating deployments and agents

Quick start (Kubernetes)

You need a Kubernetes cluster (kind, minikube, k3s, MicroK8s, or production), Helm 3, and kubectl.

# 1. Install bjorn2scan from the signed OCI chart
helm install bjorn2scan oci://ghcr.io/bvboe/b2s-go/bjorn2scan \
  --namespace bjorn2scan --create-namespace \
  --set clusterName="My Cluster" \
  --wait

# 2. Open the dashboard
kubectl port-forward -n bjorn2scan svc/bjorn2scan 8080:80

Then visit http://localhost:8080. Scanning starts automatically — results appear within a few minutes as the vulnerability database downloads and pods are scanned.

K3s, MicroK8s, and standard Kubernetes are auto-detected (containerd socket location) — no extra configuration needed.

Scan Linux hosts (agent)

To scan a Linux host outside Kubernetes, install the standalone agent:

curl -sSfL https://github.com/bvboe/b2s-go/releases/latest/download/install.sh | sudo sh

This installs a systemd service that scans the host and reports results (curl http://localhost:9999/health to check it). See bjorn2scan-agent/README.md.

Metrics & dashboards

Bjørn2Scan exposes vulnerability metrics for Prometheus and can export them over OpenTelemetry — point Grafana at them for trends and multi-cluster views. Ready-made Grafana dashboards live in docs/; details in docs/PROMETHEUS_METRICS.md.

Auto-update

Auto-update is enabled by default — the in-cluster update controller and the host agent both keep themselves current, cosign-verified and with health-checked rollback.

To disable it in Kubernetes:

helm upgrade --install bjorn2scan oci://ghcr.io/bvboe/b2s-go/bjorn2scan \
  --namespace bjorn2scan --create-namespace \
  --set updateController.enabled=false

For the host agent, set auto_update_enabled=false in agent.conf. Configuration, version policies, and operational runbooks: docs/AUTO_UPDATE.md and docs/RUNBOOKS.md.

Configuration

Override any chart value with --set or a values file:

helm upgrade bjorn2scan oci://ghcr.io/bvboe/b2s-go/bjorn2scan \
  --namespace bjorn2scan -f my-values.yaml

All options are documented in helm/bjorn2scan/values.yaml.

Upgrade & uninstall

# Upgrade to the latest chart
helm upgrade bjorn2scan oci://ghcr.io/bvboe/b2s-go/bjorn2scan -n bjorn2scan

# Uninstall
helm uninstall bjorn2scan -n bjorn2scan
kubectl delete namespace bjorn2scan

Verifying releases

Container images and Helm charts are signed with cosign, and every release is gated on a Grype scan:

cosign verify \
  --certificate-identity-regexp="https://github.com/bvboe/b2s-go/*" \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \
  ghcr.io/bvboe/b2s-go/bjorn2scan:<version>

Development

make build-all          # build every module
make test-all           # run all tests
make helm-kind-deploy   # build images and deploy to a local kind cluster

Architecture, module layout, and contributor setup are in DEVELOPMENT.md.

Documentation & support

  • DEVELOPMENT.md — architecture and development guide
  • docs/ — auto-update, runbooks, metrics, scheduled jobs, CI/CD validation
  • GitHub Issues — bugs and feature requests

License

Bjørn2Scan is released under the Apache License 2.0.