Access, credentials and workloads follow one operating model instead of living in separate scripts, servers and chat messages.
01
Isolated Spaces
Separate teams, services and environments inside Kubernetes.
02
Controlled access
Route connections through policy-aware layers and a secure gateway.
03
Visible changes
Keep infrastructure reproducible through Git and GitOps.
Four services, one platform core.
Each component has a single responsibility. Together they form the path from an identity to a running workload.
API
Control Plane
Cluster API for the app: invitation-based enrolment, Spaces and members, sponsorship, devices, servers, push, sleep schedules.
SECRETS
Keyguard
The only reader of API keys. Proxies model, Git, MCP and web fetches through allowlists; enforces per-user budgets; verifies the signed-action schema before checking the signature.
SSH
SSH Gateway
The only path from an agent to a user's server. Commands go through signed actions; the gateway issues a short-lived certificate — 10 minutes, no standing keys.
K8S
Space Operator
Turns a Space object into an isolated namespace: gVisor-sandboxed agent pod, sleep after inactivity, deletion only by signature, encrypted backups.
CORE
Platform core
OpenBao (sealed Vault fork): secrets, PKI, SSH CA
Keycloak: identity, realms deck/ops
Postgres (CNPG): WAL archiving, daily base backups
External Secrets: platform/* from OpenBao to pods
EDGE
Edge & GitOps
Traefik: mTLS entrypoints, admin-only routes
cert-manager: public and internal certificates
Argo CD: the whole platform from a git branch
Kyverno: admission policies, image signatures
Access has a reason.
Every session has an identity, a target Space, a policy and an outcome.
APPROVED
Developer → staging
Temporary access with read and deploy permissions.
BLOCKED
Contractor → production DB
No matching policy, no connection, no exception hidden in a script.
AUDITED
SRE → production
Break-glass access with a traceable session.
One cluster. Separate worlds.
Spaces create clear boundaries around workloads, secrets and administrative access.
ISOLATED
team-alpha
Staging API and workers for one engineering team.
ISOLATED
production
Production services, data and secrets with restricted access.
RESTRICTED
platform-admin
Control plane, Keyguard and gateway operations.
How a request travels.
No hidden paths: every arrow on this schema is a real network route enforced by mTLS, policy or signature checks.
Defense in depth, as configuration.
The security properties are not promises — they are enforced by the cluster and verified by a smoke test after every change.
mTLS
Mutual TLS everywhere
Public API requires a device certificate; admin routes additionally require an administrator certificate and an IP allowlist.
SIGN
Signed actions
One compact JWS format for everything sensitive: enrolment, SSH commands, space deletion. A strict schema is checked in the app and in Keyguard.
VAULT
Sealed secrets
OpenBao keeps keys sealed at rest; the root token is revoked after bootstrap. Platform secrets reach pods only through External Secrets.
SANDBOX
gVisor + NetworkPolicy
Space agents run under gVisor; every namespace is default-deny, egress only through Squid allowlists and Keyguard.
SUPPLY
Signed images
Kyverno admits only images signed by the project's release workflows; everything else is rejected (or audited during test).
AUDIT
Tamper-evident logs
Kubernetes audit events ship to object storage with retention locks; admin actions are expected to appear there.
THE PROJECT
Infrastructure should explain itself.
Fugu Deck is a control layer for teams that need more than a server and a shared SSH key. It connects identity, policy, access and workload without hiding the path between them.
fugu-deck / system map
Control Planeusers · Spaces · state · workflows
COORDINATES
Keyguardkeys · policies · sensitive operations
CONTROLS
SSH Gatewaythe controlled path into an environment
ROUTES
Space Operatorisolated namespaces and workloads
ISOLATES
0.6.29services version
k3s 1.36Kubernetes
45/48smoke checks green
DE · FRAthis instance, self-hosted
THE MOMENT AFTER DEPLOYMENT
The useful question is not: is it running?
It is: who can reach it, through which boundary, with which policy, and what remains visible afterwards? Fugu Deck is built around that question.
IdentityWho is connecting?
PolicyWhat is allowed?
BoundaryWhich Space?
SessionWhat happened?
WorkloadWhat was reached?
Make every connection intentional.
Tell us what you are building and which environments you need to isolate.