Skip to content

KubeSpaces

The open control plane for virtual Kubernetes tenants.

Release CI E2E Build & images License

Docs · Roadmap · Project board · Contributing · Security

English · 简体中文 · Italiano

This is the KubeSpaces monorepo: backend API, Tenant operator, web frontend, and the umbrella Helm chart that deploys a complete installation. (Predecessor repos — kubespaces-io/login-api, ams0/frontend — are superseded by this codebase.)

Component Where What
Backend API api/ Go · chi · pgx · OIDC. Auth, tenant CRUD → Tenant CRs, kubeconfig
Operator operator/ Go · controller-runtime. Sole provisioner: Tenant CR → vCluster
Frontend frontend/ Next.js 15 · Auth.js (Keycloak). Self-service portal
CLI cli/ Go · cobra. kubespaces — device-flow login, tenant CRUD, kubeconfigs
Chart charts/kubespaces/ The product: one helm install for everything

Repository layout

.
├── api/                       # Backend API — Go (chi, pgx, go-oidc)
│   ├── cmd/api/               #   entrypoint
│   └── internal/              #   auth, server (handlers), store (Postgres + migrations), k8s (Tenant CRs)
├── operator/                  # Tenant operator — Go (controller-runtime, kubebuilder layout)
│   ├── api/v1alpha1/          #   Tenant types (source of truth for the CRD)
│   ├── config/                #   generated CRD + RBAC (make manifests)
│   └── internal/              #   controller (reconciler), provisioner (vCluster via Helm SDK)
├── frontend/                  # Self-service portal — Next.js 15 + Auth.js (Keycloak)
│   └── src/                   #   app router, components, hooks, lib
├── cli/                       # kubespaces CLI — Go (cobra), OIDC device-flow login
│   ├── cmd/kubespaces/        #   entrypoint
│   ├── internal/              #   cli, client, auth, config, kubeconfig
│   └── DESIGN.md              #   command set & design decisions
├── charts/
│   └── kubespaces/            # Umbrella Helm chart — THE product: one install for everything
├── examples/                  # values profiles: kind demo, GKE test, production
├── docs/
│   ├── contracts.md           # inter-component contract (read before touching any component)
│   ├── host-cluster.md        # host prep for tenant exposure (Gateway API, DNS)
│   └── prerequisites.md       # what you need: demo tier vs production tier
├── .github/workflows/         # ci (per-component), build (images → ghcr), release (CLI), chart mirror
├── .goreleaser.yaml           # CLI release: binaries, checksums, Homebrew tap
├── Makefile                   # helm lint / template / install, kind dev loop, CRD apply
├── LICENSE                    # Apache 2.0
└── NOTICE                     # vCluster credit

Versioning: one line for the whole repo — a vX.Y.Z tag releases the CLI binaries (goreleaser) and the api/operator/frontend images together.

Quickstart

helm install kubespaces oci://ghcr.io/kubespaces-io/charts/kubespaces \
  --namespace kubespaces --create-namespace

The chart is published as a signed OCI artifact on every release; pin a version with --version X.Y.Z. To install from a source checkout instead, point Helm at charts/kubespaces. Verify the chart signature with cosign.

The default install is fully self-contained: API + frontend + PostgreSQL (official postgres image) + Keycloak (official image, dev mode, realm auto-imported). For production, toggle in external Postgres, an external OIDC provider, and real ingress — see examples/values-production.yaml.

Acceptance test (gates every release): fresh kind cluster → helm install kubespaces → working tenant + kubeconfig in under 10 minutes.

Dev loop

make lint        # helm lint
make template    # render manifests locally
make kind-up     # local kind cluster
make install     # install/upgrade the chart into the current context

Design notes

  • No Bitnami subcharts. Broadcom moved Bitnami images behind a subscription (2025); a new OSS project should not depend on them. Postgres and Keycloak are shipped as minimal built-in StatefulSets on official images for the all-in-one profile, and are expected to be replaced by external services in production (postgresql.enabled=false, keycloak.enabled=false).
  • Env-var contract with the API is provisional until the backend refactor lands — names are centralized in templates/api/deployment.yaml.
  • Operator architecture discussion: operator/README.md.
  • Planning & decision log: the plan repo (sibling directory).

License

Apache 2.0 — see LICENSE. Built on vCluster (Apache 2.0) — see NOTICE.

About

The open control plane for virtual Kubernetes tenants

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages