Skip to content

Repository files navigation

Portside

Portside

Lightweight Kubernetes dashboard. ASP.NET Core 10 backend, Angular 21 frontend with SignalR for live updates.

Features

  • Cluster overview: aggregated CPU/memory + per-node cards.
  • Pod table with search, namespace + status filters, sortable columns, and 24h error/warning counts.
  • Live pod log viewer streamed straight from the K8s API (no agent).
  • Multi-level + time-range filtering, syntax highlighting, day dividers.
  • JWT auth backed by SQLite via RoboDodd.OrmLite.

Quick start

This repo uses git submodules:

git clone --recurse-submodules https://github.com/timothydodd/portside
# or, if already cloned:
git submodule update --init --recursive

Run locally

# Backend
cd src/api
dotnet run

# Frontend (separate terminal)
cd src/web/portside
npm install
npm start

The dev build proxies http://localhost:4200 to the API on http://localhost:5211.

Default seeded user: admin / admin — change via the user menu after first login.

Run with Docker

docker build -t portside:dev .
docker run -p 8080:8080 \
  -v $HOME/.kube:/home/app/.kube:ro \
  -v portside-data:/app/data \
  portside:dev

Deploy to k3s

A sample manifest is in deploy/k3s/portside.yaml. It includes:

  • ServiceAccount + ClusterRole with the read-only permissions the dashboard needs.
  • A Secret for the JWT signing key (replace before applying).
  • A PersistentVolumeClaim backing the SQLite user store.
  • Liveness/readiness probes pointed at /api/health/live and /api/health/ready.
  • Traefik Ingress (k3s default).
# Generate a real JWT secret first, then replace the placeholder in the manifest.
openssl rand -base64 48

kubectl apply -f deploy/k3s/portside.yaml

Architecture

src/
  api/                  ASP.NET Core 10 API + SignalR hubs
  RoboDodd.OrmLite/     submodule - ORM
  web/portside/
    src/rd-ui/          submodule - shared Angular UI library
    src/app/            portside app
deploy/k3s/             sample manifest
.github/workflows/ci.yml
Dockerfile

Health endpoints

Endpoint Use
GET /api/health/live Liveness — process responding.
GET /api/health/ready Readiness — sqlite + kube API reachable.
GET /api/health Full report (JSON).

License

MIT.

About

Lightweight Kubernetes dashboard - .NET 10 + Angular 21 + SignalR

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages