diff --git a/README.md b/README.md index 2d9ce21..cd5c35a 100644 --- a/README.md +++ b/README.md @@ -6,45 +6,90 @@ A fully automated private cloud environment deployed from bare metal. This proje ## 🗺️ System Architecture -```mermaid -graph TD - subgraph PhysicalHost ["Physical Host: hypervisor.lab.local - 172.30.1.200"] - HostOS[AlmaLinux 10 / Cockpit / KVM] +### Ingress & Traffic Routing - subgraph VirtualNetwork ["Virtual Network: Bridge Network (br0 - 172.30.1.0/24)"] - VM1["freeipa.lab.local (172.30.1.85) [AlmaLinux 10]"] - VM2["portfolio.lab.local (172.30.1.93) [Debian 12]"] - VM3["minecraft.lab.local (172.30.1.91) [Debian 12]"] - VM4["navidrome.lab.local (172.30.1.92) [Debian 12]"] +This diagram traces how external users connect to the various VM workloads hosted on the physical hypervisor without any port-forwarding or open inbound firewall rules on the local router. + +```mermaid +graph LR + %% My Color Palette + classDef extNode fill:#212c2a,stroke:#9580ff,color:#f8f8f2,stroke-width:2px; + classDef tunnelNode fill:#212c2a,stroke:#ffca80,color:#ffca80,stroke-width:1px,stroke-dasharray: 5 5; + classDef vmNode fill:#2b3b38,stroke:#70a99f,color:#f8f8f2,stroke-width:1px; + classDef hostNode fill:#161d1c,stroke:#415854,color:#f8f8f2,stroke-width:2px; + + %% Public Clients & Cloud Services + PublicUsers["🌐 Web Users"]:::extNode + Gamers["🎮 Minecraft Players"]:::extNode + GDrive["☁️ Google Drive (Cloud)"]:::extNode + + %% Inbound Tunnels + subgraph Tunnels ["Secure Tunnels (Outbound-Only Ingress)"] + CF["☁️ Cloudflared Tunnel"]:::tunnelNode + PI["🔌 Playit.gg Tunnel"]:::tunnelNode + end + + %% Physical Host & VMs + subgraph Host ["Physical Host: hypervisor.lab.local"] + subgraph Bridge ["Virtual Bridge Network (br0)"] + VM2["📄 portfolio (172.30.1.93)
Nginx Web Server"]:::vmNode + VM3["⚔️ minecraft (172.30.1.91)
Fabric Server"]:::vmNode + VM4["🎵 navidrome (172.30.1.92)
Music Streamer"]:::vmNode end end - subgraph IdentityServices ["Identity & Core Services"] - VM1 -->|Provides| LDAP[Directory Service] - VM1 -->|Provides| Kerberos[Auth Realm] - VM1 -->|Provides| BIND[DNS / BIND9] - VM2 & VM3 & VM4 -->|DNS Resolution| VM1 + %% Traffic Routing Paths + PublicUsers -->|HTTPS| CF + Gamers -->|Port 25565| PI + + CF -->|Forward Port 80| VM2 + PI -->|Forward Port 25565| VM3 + + %% Storage Mounting Path + VM4 -->|rclone FUSE Mount| GDrive + + %% Subgraph Colors + style Host fill:#161d1c,stroke:#415854,stroke-width:2px; + style Bridge fill:#212c2a,stroke:#70a99f,stroke-width:1px; + style Tunnels fill:#212c2a,stroke:#ffca80,stroke-width:1px,stroke-dasharray: 5 5; +``` + +### System Administration & Observability + +This diagram details the internal control plane, showing how client VMs authenticate via **FreeIPA** (LDAP/Kerberos/DNS) and how **Prometheus** scrapes host metrics via **Node Exporters** across all nodes. + +```mermaid +graph TD + %% My Color Palette + classDef hostNode fill:#161d1c,stroke:#415854,color:#f8f8f2,stroke-width:2px; + classDef ipdNode fill:#2b3b38,stroke:#ff9580,color:#ff9580,stroke-width:1.5px; + classDef vmNode fill:#2b3b38,stroke:#70a99f,color:#f8f8f2,stroke-width:1px; + classDef obsNode fill:#2b3b38,stroke:#8aff80,color:#8aff80,stroke-width:1.5px; + + %% Core Services + VM1["🔑 freeipa.lab.local (172.30.1.85)
LDAP / Kerberos / BIND DNS"]:::ipdNode + + %% Monitored VMs (Nodes) + subgraph Nodes ["Monitored Nodes (Port: 9100)"] + HostOS["🖥️ Hypervisor Host (172.30.1.200)"]:::hostNode + VM3["⚔️ minecraft VM (172.30.1.91)"]:::vmNode + VM4["🎵 navidrome VM (172.30.1.92)"]:::vmNode end - subgraph ContainerizedWorkloads ["Containerized Workloads (Podman)"] - VM2 -->|Runs| Nginx[Nginx Portal Website] - VM2 -->|Runs| Prom[Prometheus TSDB] - VM2 -->|Runs| Grafana[Grafana Dashboard] - - VM3 -->|Runs| Minecraft[Fabric Minecraft Server] - - VM4 -->|Runs| ND[Navidrome Server] - VM4 -->|Mounts| GDrive[rclone Google Drive FUSE] + %% Monitoring Stack + subgraph PortfolioVM ["portfolio VM (172.30.1.93)"] + Prom["📈 Prometheus TSDB"]:::obsNode + Grafana["📊 Grafana Dashboard"]:::obsNode end - subgraph IngressTunnels ["Secure Ingress & Tunnels"] - VM2 -->|Exposes Nginx / Grafana| CF[Cloudflared Tunnel] - VM3 -->|Exposes Port 25565| PI[Playit.gg Tunnel] - end + %% Telemetry Connections + HostOS & VM1 & VM3 & VM4 & PortfolioVM -.->|Node Exporter Scrape| Prom + Prom -->|Data Source| Grafana - subgraph ClusterTelemetry ["Cluster Telemetry"] - HostOS & VM1 & VM2 & VM3 & VM4 -->|Node Exporter:9100| Prom - end + %% DNS Registry Connections + Nodes & PortfolioVM --->|DNS Lookups| VM1 - CF -->|Secure HTTPS| PublicInternet((Public Internet)) - PI -->|Secure UDP/TCP| Gamers((Minecraft Clients)) + %% Subgraph Colors + style Nodes fill:#212c2a,stroke:#7099f,stroke-width:1px; + style PortfolioVM fill:#161d1c,stroke:#415854,stroke-width:2px; +```