Skip to content

Architecture Overview

Satusky is a multi-tenant PaaS built directly on Kubernetes. It does not replace Kubernetes with a proprietary scheduler; it uses Kubernetes as the workload runtime and wraps it with a purpose-built API for tenancy, deployment orchestration, networking, billing, machine management, and observability.

This architecture section documents both:

  • current implementation — what the system does today, and
  • target architecture — the shape the platform is intentionally moving toward where a migration is already underway.

When those differ, the docs call the difference out explicitly instead of presenting the target state as though it already exists.

┌─────────────────────────────────────────────────────────────┐
│ Control Plane │
│ Satusky API (Go/Fiber) + PostgreSQL │
│ Auth, desired state, billing, orchestration, WebSockets │
└────────────────────┬────────────────────────────────────────┘
│ client-go / Talos API / SideroLink
┌────────────────────▼────────────────────────────────────────┐
│ Workload Plane │
│ Kubernetes clusters — Deployments, Services, HTTPRoutes, │
│ legacy Ingresses, Secrets, PVCs │
└────────────────────┬────────────────────────────────────────┘
│ nodes, storage, edge networking
┌────────────────────▼────────────────────────────────────────┐
│ Infrastructure Plane │
│ Talos Linux nodes, SideroLink, Gateway API, cert-manager, │
│ external-dns, Ceph RGW, Prometheus │
└─────────────────────────────────────────────────────────────┘

Control plane. The Satusky API stores platform metadata in PostgreSQL and drives other systems: Kubernetes through client-go, Talos machines through Talos APIs, and machine discovery through SideroLink. It is the source of truth for desired platform state, not for every live runtime fact.

Workload plane. Kubernetes clusters run user workloads. PostgreSQL says what should exist; Kubernetes says what is actually running now. The API reconciles between the two.

Infrastructure plane. Talos nodes provide the machine substrate; SideroLink provides management reachability; Gateway API / legacy Ingress, cert-manager, external-dns, Ceph RGW, and Prometheus provide networking, storage, and telemetry primitives.

Developer
1ctl / dashboard
│ HTTPS REST + WebSocket
Satusky API ───── PostgreSQL
│ │
│ ├──── Talos API over SideroLink
│ └──── Prometheus / metrics APIs
└──── client-go
Kubernetes clusters
Deployments / Services / routes / PVCs

A single API service coordinates multiple clusters. PostgreSQL stores tenant metadata, deployment intent, billing records, and domain state. Kubernetes stores workload runtime state. SideroLink and Talos extend the control plane below Kubernetes for bring-your-own-machine workflows.

LayerResponsibility
RoutesHTTP registration, middleware, path parameters
ControllersRequest parsing, validation, response shaping
ServicesBusiness orchestration across DB, Kubernetes, Talos, DNS, and events
QueriersSQL access through generated query code

Services are where platform meaning lives. A deploy is not merely an insert plus a Kubernetes call; it is desired-state resolution, persistence, reconciliation, and event publication.

User
└── Organization
└── Kubernetes namespace
└── Deployments / routes / Secrets / PVCs

An Organization is the primary billing and isolation boundary. In the current backend, each organization has one stored Kubernetes namespace, and resources for that organization are created in that namespace. Users can belong to multiple organizations through organization_users membership records.

Deployments also carry an environment field, but that is metadata/configuration — it is not currently a second Kubernetes namespace hierarchy beneath the organization namespace.

If Satusky later introduces richer project/environment isolation inside an organization, the architecture should state that explicitly and define whether it becomes:

  • separate Kubernetes namespaces,
  • labels inside one namespace, or
  • a higher-level Satusky-only grouping.

Until then, the clean mental model is organization = Kubernetes namespace boundary.

ComponentCurrent role
Gateway APIDefault/generated app domains use HTTPRoute when Gateway mode is enabled.
Legacy IngressStill used today for custom domains, aliases, and www redirects. It is a compatibility path, not the target end state.
cert-managerProvisions TLS certificates for public hostnames.
external-dns / DNS automationPublishes platform-managed records and participates in domain reconciliation.
SideroLinkDiscovers Talos machines and gives the control plane stable management reachability through a WireGuard overlay.
Talos APISupplies machine lifecycle and low-level OS state below Kubernetes.
Ceph RGWS3-compatible object storage.
Prometheus + Kubernetes metrics APIsPower live telemetry, historical observations, machine health, and billing-adjacent measurement.
NATSInternal coordination primitive for platform workflows such as TCP port allocation.
AreaCurrent stateTarget state
Public routingDefault domains use Gateway API; custom domains still use legacy Ingress.Gateway API becomes the single public routing primitive.
Marketplace workloadsSeparate marketplace deployment path eventually creates ordinary deployment records.Template resolution feeds the shared deployment pipeline.
Machine managementBackend has rich SideroLink/Talos primitives; CLI is still thin.Tenant-facing fleet management through 1ctl machine.
Domain diagnosticsMetadata exists, but reconciliation is not yet fully user-visible.One domain model spanning metadata, route, DNS, TLS, and probe health.
ObservabilityBackend has useful metrics, WebSockets, and health jobs.One coherent user-facing model for workload, endpoint, and machine health.