A GitOps-managed Kubernetes homelab running TalosOS on Proxmox, with secure public access via Tailscale mesh networking and an Oracle VPS entry point.
flowchart TB
subgraph Internet["🌐 Public Internet"]
Users(["Users"])
end
subgraph Private["🏠 Private Network"]
Devices(["Private Devices"])
end
subgraph Oracle["☁️ Oracle Cloud"]
HAProxy["HAProxy<br/>Entry Point"]
end
subgraph Tailscale["🔐 Tailscale Mesh"]
TS(("Encrypted<br/>Overlay"))
end
subgraph Proxmox["🖥️ Proxmox Host"]
subgraph Cluster["TalosOS Cluster"]
T1["talos-1<br/>GPU"]
T2["talos-2"]
T3["talos-3"]
end
iSCSI[("ZFS<br/>iSCSI<br/>15TB")]
end
Users -->|HTTPS| HAProxy
Devices -->|Tailscale| TS
HAProxy -->|Tailscale| TS
TS <-->|Encrypted| T1 & T2 & T3
T1 & T2 & T3 <-->|LongHorn| iSCSI
style Internet fill:#e1f5fe
style Private fill:#f3e5f5
style Oracle fill:#fff3e0
style Tailscale fill:#e8f5e9
style Proxmox fill:#fce4ec
style Cluster fill:#fff8e1
Loading
Layer
Technology
OS
TalosOS (immutable Linux)
Orchestration
Kubernetes
GitOps
ArgoCD (app-of-apps pattern)
Networking
Flannel CNI, MetalLB L2, Tailscale
Ingress
Traefik v3.3 with PROXY protocol + CrowdSec plugin
Storage
LongHorn CSI → iSCSI → ZFS zvol
Secrets
Bitwarden Secrets Manager + External Secrets Operator
Security
CrowdSec WAF (Traefik plugin), ClamAV malware scanning
Observability
Grafana, Loki, Mimir, Promtail, Alloy
IaC
Terraform, Ansible, GitHub Actions
Component
Specification
CPU
Intel Core i5-12600K (6P + 4E cores)
RAM
32GB DDR4
Storage
1TB NVMe + 15TB ZFS pool (5x3TB, iSCSI target)
GPU
Intel Arc B580 (passed to talos-1)
Network
1Gbps + Tailscale mesh
TalosOS Cluster (3 nodes)
Node
vCPU
RAM
Role
Special
talos-1
8
16GB
Control Plane + Worker
GPU passthrough
talos-2
8
16GB
Control Plane + Worker
—
talos-3
8
16GB
Control Plane + Worker
—
Component
Specification
Instance
VM.Standard.A1.Flex (ARM)
CPU
4 Ampere cores
RAM
24GB
Network
4Gbps + public IP
Role
HAProxy → Tailscale → Traefik
Service
Access
Description
Jellyfin
Public
Media streaming (GPU transcoding)
Seerr
Public
Media request management
Sonarr
Tailscale
TV show automation
Radarr
Tailscale
Movie automation
Prowlarr
Tailscale
Indexer management
Bazarr
Tailscale
Subtitle management
qBittorrent
Tailscale
Download client
Recyclarr
Internal
TRaSH guide sync
Decluttarr
Internal
Auto-cleanup
Service
Access
Description
Copyparty
Tailscale + OAuth
File sharing (GPU processing)
Immich
Tailscale
Photo management (ML on GPU)
AdGuard Home
Tailscale
DNS + ad blocking
MCPJungle
Internal
MCP server aggregator
Component
Description
ArgoCD
GitOps continuous deployment
Traefik
Ingress controller
CrowdSec
WAF + threat detection
MetalLB
Load balancer (L2 mode)
LongHorn
Distributed block storage
External Secrets
Bitwarden integration
Tailscale Operator
Service mesh + auth
Reloader
Auto-reload on config changes
ClamAV
Malware scanning for downloads
Interstellar/
├── .github/workflows/ # CI/CD pipelines
│ ├── terraform.yaml # Infrastructure deployment
│ ├── ansible.yaml # Host configuration
│ ├── kubernetes-lint.yaml # Manifest linting
│ └── tailscale-acl.yaml # ACL policy sync
├── .kube-linter.yaml # Kube-linter configuration
├── Ansible/ # Host configuration playbooks
│ └── setup-oracle.yaml # HAProxy, Tailscale
├── Kubernetes/
│ ├── bootstrap/ # Core infrastructure
│ │ ├── argocd/
│ │ ├── metallb/
│ │ ├── longhorn/
│ │ ├── traefik/
│ │ ├── crowdsec/
│ │ ├── external-secrets/
│ │ ├── tailscale-operator/
│ │ ├── observability/
│ │ └── clamav/
│ └── apps/ # Application manifests
├── scripts/
│ └── lint-kubernetes.sh # Local linting script
├── Tailscale/
│ └── policy.hujson # ACL policy
├── Terraform/ # Infrastructure as Code
│ ├── proxmox.tf # VM provisioning
│ ├── talos.tf # Cluster configuration
│ ├── cloudflare.tf # DNS records
│ ├── tailscale.tf # Auth keys
│ ├── oracle.tf # VPS infrastructure
│ └── bitwarden.tf # Secret references
├── haproxy.cfg # Oracle HAProxy config
└── compose.proxy.yaml # HAProxy Docker Compose
All setup and bootstrap instructions live in SETUP.md . Use that file as the single source of truth.
NFS endpoint values are configured once in Kubernetes/nfs-storage-config.yaml .
data.server: NFS server IP/hostname
data.path: NFS export path
Top-level Kustomize replacements apply these values to both the static media PV and the nfs-csi StorageClass.
Network Topology : Talos VMs are bridged directly to the home LAN (vmbr0)
Zero Trust : All inter-service communication via Tailscale
Public Access : Only through Oracle VPS → Tailscale → Traefik
Private Services : Require Tailscale authentication
Malware Scanning : ClamAV scans all downloaded files
WAF Protection : CrowdSec with community threat feeds
This project is for personal use and educational purposes.