Back to portfolio · Case study

KubeHarbor

Back to portfolio · Case study & README

Architecture

Diagram of ingress-nginx, the ledgerlite namespace, monitoring, kube-dns, and an external database

The same drawing is architecture.svg.

Environments

Parsed from the Helm renders. The Kustomize render for the same environment is compared field by field.
EnvironmentReplicasHPAAPI resourcesPDBDatabaseServiceMonitorIssuerImageHelm matches Kustomize
dev1off50m/64Mi → 250m/256MinoneinClusteroffletsencrypt-stagingghcr.io/OWNER/ledgerlite:0.1.0yes
staging22–4100m/128Mi → 500m/256MiminAvailable 1externalonletsencrypt-stagingghcr.io/OWNER/ledgerlite:0.1.0yes
prod33–10250m/256Mi → 1/512MiminAvailable 2externalonletsencrypt-prodghcr.io/OWNER/ledgerlite@sha256:deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefyes

dev → prod

Checks recorded at build time

Recorded at 2026-10-04T03:20:04+08:00. Tool versions are read from the binaries. Kubernetes schemas are the 1.30.14 standalone-strict set; kubeconform v0.6.7 rejects the version token 1.30.x, so the run uses 1.30.14.

helm lint v3.16.4+g7877b45

helm unittest 0.7.2

6 suites passed, 26 tests passed, 0 tests failed.

kubeconform v0.6.7

kube-linter 0.7.6

Errors: 0. Exit code 0.

kube-linter exclusions: 0. No check is excluded; the default rules passed.

checkov 3.2.449

Passed 2115, failed 0, skipped 61. Skipped counts findings from a run with no skip flags whose check id is in the skip list. 4 skip rules are configured. Scans: Kubernetes framework on rendered/ and gitops/, Helm framework on the chart with values-dev.yaml.

pytest pytest 8.3.5

Passed 17, failed 0.

Security baseline

Rendered manifests

Pygments highlighted these at build time. Each page groups objects by kind.

Downloads

The chart archive is from helm package. The YAML files are the Helm renders, not the Kustomize renders.

Install snippets

These are the commands a cluster would use. They were not run here. There is no live cluster in this demo.

Helm

helm install ledgerlite charts/ledgerlite \
  --namespace ledgerlite-dev --create-namespace \
  -f charts/ledgerlite/values-dev.yaml

Kustomize

kubectl apply -k kustomize/overlays/dev

Argo CD

kubectl apply -f gitops/argocd/project.yaml
kubectl apply -f gitops/argocd/app-of-apps.yaml

Prod automation is disabled in gitops/argocd/app-prod.yaml. Prune and selfHeal stay on. The files are not applied.