- netboot-base.nix with SSH key auth - Launch scripts for node01/02/03 - Node configuration.nix and disko.nix - Nix modules for first-boot automation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
30 KiB
30 KiB
Network Topology Diagram
Document Version: 1.0 Last Updated: 2025-12-10
Physical Network Layout
┌─────────────────────────────────────────────────────────────────────────┐
│ Physical Datacenter Layout │
└─────────────────────────────────────────────────────────────────────────┘
Internet
│
│
┌──────┴──────┐
│ Firewall │
│ Router │
└──────┬──────┘
│
┌──────────────┴──────────────┐
│ Core Switch (L3) │
│ - VLANs: 10,100,200,300,400│
│ - Routing between VLANs │
│ - 10/25/100 Gbps uplinks │
└───────────┬─────────────────┘
│
┌───────────────────┼───────────────────┬──────────────────┐
│ │ │ │
┌─────┴─────┐ ┌──────┴──────┐ ┌────┴────┐ ┌─────┴─────┐
│ ToR │ │ ToR │ │ ToR │ │ PXE/Mgmt │
│ Switch 1 │ │ Switch 2 │ │ Switch 3│ │ Switch │
│ (Rack 1) │ │ (Rack 2) │ │ (Rack 3)│ │ │
└─────┬─────┘ └──────┬──────┘ └────┬────┘ └─────┬─────┘
│ │ │ │
┌───┴───┐ ┌───┴───┐ ┌───┴───┐ ┌─────┴─────┐
│node01 │ │node04 │ │node07 │ │PXE Server │
│node02 │ │node05 │ │node08 │ │10.0.100.10│
│node03 │ │node06 │ │node09 │ └───────────┘
│ │ │ │ │ │
│(BMC) │ │(BMC) │ │(BMC) │
│10.0. │ │10.0. │ │10.0. │
│10.5x │ │10.5x │ │10.5x │
└───────┘ └───────┘ └───────┘
Legend:
node01-03: Control plane (3-node Raft cluster)
node04-09: Worker nodes (compute + storage)
BMC: Baseboard Management Controller (IPMI/iDRAC/iLO)
Logical VLAN Layout
┌─────────────────────────────────────────────────────────────────────────┐
│ VLAN Segmentation │
└─────────────────────────────────────────────────────────────────────────┘
VLAN 10: Management (10.0.10.0/24)
═══════════════════════════════════════════════════════════════════════════
┌────────────────────────────────────────────────────────────────────────┐
│ Purpose: BMC/IPMI access, administrative SSH, monitoring │
│ Access: Restricted to admin workstations only │
└────────────────────────────────────────────────────────────────────────┘
10.0.10.1 10.0.10.5 10.0.10.10 10.0.10.50-99
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────────┐
│ Gateway │ │Monitoring│ │Admin │ │ BMC/IPMI │
│ │ │ Server │ │Workstation│ │ (node01-09) │
└─────────┘ └─────────┘ └─────────┘ └──────────────┘
VLAN 100: Provisioning (10.0.100.0/24)
═══════════════════════════════════════════════════════════════════════════
┌────────────────────────────────────────────────────────────────────────┐
│ Purpose: PXE boot network, temporary during installation │
│ Access: Nodes during PXE boot only │
└────────────────────────────────────────────────────────────────────────┘
10.0.100.1 10.0.100.10 10.0.100.50-99 10.0.100.100-200
┌─────────┐ ┌─────────┐ ┌──────────┐ ┌───────────────┐
│ Gateway │ │PXE Server│ │Static │ │DHCP Pool │
│ │ │DHCP/TFTP │ │Reservations│ │(temp assign) │
│ │ │HTTP │ │ │ │ │
└─────────┘ └─────────┘ └──────────┘ └───────────────┘
VLAN 200: Production Cluster (10.0.200.0/24)
═══════════════════════════════════════════════════════════════════════════
┌────────────────────────────────────────────────────────────────────────┐
│ Purpose: Inter-node cluster communication, Raft, gossip │
│ Access: Cluster nodes only, fully isolated │
└────────────────────────────────────────────────────────────────────────┘
10.0.200.1 10.0.200.10-12 10.0.200.20-29 10.0.200.100-199
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐
│ Gateway │ │Control │ │Worker │ │Service VIPs │
│ │ │Plane │ │Nodes │ │(load balanced)│
│ │ │node01-03 │ │node04-09 │ │ │
└─────────┘ └──────────┘ └──────────┘ └──────────────┘
VLAN 300: Client Access (10.0.300.0/24)
═══════════════════════════════════════════════════════════════════════════
┌────────────────────────────────────────────────────────────────────────┐
│ Purpose: External client access to APIs (IAM, PlasmaVMC, etc.) │
│ Access: External clients, applications │
└────────────────────────────────────────────────────────────────────────┘
10.0.300.1 10.0.300.10-19 10.0.300.100
┌─────────┐ ┌──────────┐ ┌──────────┐
│ Gateway │ │FiberLB │ │Client │
│NAT │ │(L4/L7 LB)│ │VIP │
└─────────┘ └──────────┘ └──────────┘
VLAN 400: Storage (10.0.400.0/24)
═══════════════════════════════════════════════════════════════════════════
┌────────────────────────────────────────────────────────────────────────┐
│ Purpose: iSCSI, NFS, block storage traffic │
│ Access: Worker nodes and storage nodes only │
└────────────────────────────────────────────────────────────────────────┘
10.0.400.1 10.0.400.10-19 10.0.400.20-29
┌─────────┐ ┌──────────┐ ┌──────────┐
│ Gateway │ │Storage │ │Worker │
│ │ │Nodes │ │Nodes │
└─────────┘ └──────────┘ └──────────┘
Node Network Interface Layout
┌─────────────────────────────────────────────────────────────────────────┐
│ Control Plane Node (node01) │
└─────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────┐
│ Physical Server │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ BMC Port (IPMI/iDRAC/iLO) │ │
│ │ ├─ 10.0.10.50 (VLAN 10) │ │
│ │ └─ Dedicated management network │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ eth0 (1 GbE or 10 GbE) │ │
│ │ ├─ 10.0.100.50 (VLAN 100, untagged) - PXE boot only │ │
│ │ └─ Removed after provisioning or reassigned │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ eth1 (10 GbE or 25 GbE) - PRODUCTION │ │
│ │ ├─ VLAN 200: 10.0.200.10/24 (cluster communication) │ │
│ │ ├─ VLAN 300: 10.0.300.10/24 (client access) │ │
│ │ └─ 802.1Q trunking enabled │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ eth2 (10 GbE or 25 GbE) - STORAGE (optional) │ │
│ │ └─ VLAN 400: 10.0.400.10/24 (storage traffic) │ │
│ └────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ Worker Node (node04) │
└─────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────┐
│ Physical Server │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ BMC Port │ │
│ │ └─ 10.0.10.54 (VLAN 10) │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ eth0 (1 GbE or 10 GbE) │ │
│ │ └─ 10.0.100.60 (VLAN 100, PXE boot only) │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ eth1 (25 GbE or 100 GbE) - PRODUCTION │ │
│ │ ├─ VLAN 200: 10.0.200.20/24 (cluster communication) │ │
│ │ └─ VLAN 300: 10.0.300.20/24 (client workload traffic) │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ eth2 (25 GbE or 100 GbE) - STORAGE │ │
│ │ └─ VLAN 400: 10.0.400.20/24 (iSCSI, NFS) │ │
│ └────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
Traffic Flow Patterns
┌─────────────────────────────────────────────────────────────────────────┐
│ Traffic Flow by Service │
└─────────────────────────────────────────────────────────────────────────┘
Chainfire Raft Replication (VLAN 200)
═══════════════════════════════════════════════════════════════════════════
┌──────────┐ Raft heartbeats ┌──────────┐ Raft log ┌──────────┐
│ node01 │ (2380) every 50ms │ node02 │ replication │ node03 │
│ (Leader) ├───────────────────>│(Follower)│<───────────────┤(Follower)│
│ │<───────────────────┤ │────────────────>│ │
└──────────┘ ACK responses └──────────┘ Vote requests └──────────┘
Client API Requests (VLAN 300 → VLAN 200)
═══════════════════════════════════════════════════════════════════════════
┌──────────┐ HTTPS (8080) ┌──────────┐ Internal ┌──────────┐
│ Client ├──────────────────>│ FiberLB │ routing │ IAM │
│ │ 10.0.300.100:8080 │ ├──────────────>│(node01) │
└──────────┘ └──────────┘ 10.0.200.10 └──────────┘
Gossip Protocol (VLAN 200)
═══════════════════════════════════════════════════════════════════════════
All nodes exchange cluster membership and health status
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│node01│◄──────┤node02│◄──────┤node03│◄──────┤node04│
└──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘
│ │ │ │
└──────────────┴──────────────┴──────────────┘
UDP port 2381, multicast or unicast gossip
Storage Traffic (VLAN 400)
═══════════════════════════════════════════════════════════════════════════
┌──────────┐ iSCSI (3260) ┌──────────┐
│ Worker ├──────────────────>│ Storage │
│ Node │ Block I/O │ Node │
│(node04) │<───────────────────┤(node01) │
└──────────┘ 10.0.400.20 └──────────┘
<─> 10.0.400.10
VM-to-VM Overlay Network (VXLAN on VLAN 200)
═══════════════════════════════════════════════════════════════════════════
┌──────────────────────────────────────────────────────────────────────────┐
│ VM on node04 VXLAN Tunnel (4789) VM on node05 │
│ ┌────────┐ ──────────────────────── ┌────────┐ │
│ │VM-101 │ Overlay: 10.100.0.10 │VM-102 │ │
│ │10.100. │◄─────────────────────────────────────┤10.100. │ │
│ │ 0.10 │ Underlay: 10.0.200.20 → 10.0.200.21 │ 0.20 │ │
│ └────────┘ UDP encapsulation └────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
Bandwidth Allocation
┌─────────────────────────────────────────────────────────────────────────┐
│ Bandwidth Reservation by VLAN │
└─────────────────────────────────────────────────────────────────────────┘
Control Plane Node (25 GbE total on eth1)
═══════════════════════════════════════════════════════════════════════════
│
├─ VLAN 200 (Cluster): 15 Gbps reserved
│ ├─ Raft replication: 5 Gbps
│ ├─ Gossip protocol: 1 Gbps
│ └─ Inter-service communication: 9 Gbps
│
├─ VLAN 300 (Client): 10 Gbps reserved
│ ├─ API requests: 8 Gbps
│ └─ Ingress traffic: 2 Gbps
│
└─ Burst capacity: Up to 25 Gbps (shared)
Worker Node (100 GbE total on eth1 + eth2)
═══════════════════════════════════════════════════════════════════════════
│
├─ eth1 (25 GbE):
│ ├─ VLAN 200 (Cluster): 10 Gbps
│ └─ VLAN 300 (Client): 15 Gbps (VM traffic)
│
└─ eth2 (25 GbE):
└─ VLAN 400 (Storage): 25 Gbps (iSCSI, block I/O)
Firewall Zones
┌─────────────────────────────────────────────────────────────────────────┐
│ Firewall Zone Model │
└─────────────────────────────────────────────────────────────────────────┘
Internet (Untrusted)
│
│ Firewall + NAT
│ (stateful inspection)
v
┌──────────────────────┐
│ DMZ / Edge Zone │
│ (VLAN 300) │
│ • FiberLB │
│ • Public APIs │
│ • Rate limiting │
└──────────┬───────────┘
│
│ Internal Firewall
│ (API gateway, mTLS)
v
┌────────────────────┴────────────────────┐
│ Internal Zone (Trusted) │
│ (VLAN 200) │
│ • Control plane │
│ • Worker nodes │
│ • Cluster communication │
│ • No direct external access │
└─────────────┬───────────────────────────┘
│
│ Storage Firewall
│ (port-based ACLs)
v
┌─────────────────────────────────┐
│ Storage Zone (Isolated) │
│ (VLAN 400) │
│ • iSCSI targets │
│ • NFS servers │
│ • Only accessible from workers │
└─────────────────────────────────┘
Management Zone (Separate)
════════════════════════════════════
┌─────────────────────────────────┐
│ VLAN 10: Management │
│ • BMC/IPMI (out-of-band) │
│ • Admin SSH (bastion host) │
│ • Monitoring agents │
│ • Isolated from production │
└─────────────────────────────────┘
Multi-Site Topology (Advanced)
┌─────────────────────────────────────────────────────────────────────────┐
│ Multi-Datacenter Topology │
└─────────────────────────────────────────────────────────────────────────┘
Site A (Primary) Site B (Secondary) Site C (DR)
┌────────────────┐ ┌────────────────┐ ┌──────────┐
│ node01-03 │ │ node04-06 │ │ node07-09│
│ Control Plane │◄────────────┤ Worker Nodes │◄─────────────┤ Backup │
│ 10.0.200.10-12 │ WAN Link │ 10.1.200.20-22 │ WAN Link │ 10.2.200.│
└────────────────┘ (10 Gbps) └────────────────┘ (10 Gbps) └──────────┘
│ │ │
│ Raft sync (async) │ Raft sync (async) │
└───────────────────────────────┴─────────────────────────────┘
Global Cluster State
(distributed consensus)
Considerations:
• Latency: <5ms for synchronous replication, <100ms for async
• Bandwidth: Dedicated inter-site links for cluster traffic
• Failure modes: Site failure triggers leader election in remaining sites
• Split-brain prevention: Requires odd number of sites (3/5/7)
Document End