Everything on this domain runs on hardware I own: a two-node Proxmox cluster and a Kubernetes cluster at home, plus one small cloud node at the edge. Public traffic never touches the house directly. It lands on the edge node, crosses an outbound-only tunnel, and is checked by single sign-on before any service sees the request.
How a request travels
Four hops. Each one has a single job, and each one can refuse the request. The home network is never addressable from the internet. A second set of names exists for internal use only — those resolve on the home DNS server and simply do not exist on the public internet.
What is actually running
Chosen to be boring, reproducible, and recoverable from a backup and a config file. Service hostnames are deliberately not published here.
Public names arrive at the cloud node through outbound-only tunnels. Nothing at home listens on a public address, and certificates are issued automatically.
One login decides access for every private service, in front of the application instead of inside it. Revoking a person is one change in one place.
Two hypervisor nodes run the lab: light services as containers, anything that needs its own kernel as a virtual machine. Workloads move between nodes.
A K3s cluster on its own network runs the workloads that benefit from scheduling and replicated storage. Desired state lives in Git, not in my head.
A software router handles segmentation between the home, lab, and management networks. Internal names resolve only on the local DNS server, with ad blocking for the whole house.
Private repositories and the configuration that defines this lab, kept on the lab itself. The repo is the source of truth for every box above.
Hosts are configured by playbooks rather than by hand, run from a web UI with a history. Event-driven workflows glue the rest together.
Dashboards for metrics, searchable logs, external uptime checks, and push notifications — so a failure is noticed before anyone reports it.
Credentials stay on hardware I control, end-to-end encrypted, reachable only through the authenticated edge.
Language models run on lab hardware with a chat front end, plus a messaging assistant that answers from my own data. Prompts do not leave the house.
Media streaming for the household and a shared Postgres instance for the services that need real storage, both backed up on a schedule.
A throwaway Kubernetes cluster for certification practice, built to be broken and rebuilt without touching anything that matters.
Why it is built this way
The rules that decide what gets added and what gets turned off.