Infrastructure Canvas
Interactive graph visualization of your entire infrastructure — hosts, clusters, deployments, networking, and storage
What you see
URL: /infrastructure
The infrastructure canvas is an interactive node-graph visualization of your entire PodWarden environment. Every host, cluster, deployment, ingress rule, domain, storage connection, and backup policy is rendered as a draggable node with edges showing how they relate.
Canvas views
Switch between two views using the toggle in the top-left corner:
| View | Focus | What it shows |
|---|---|---|
| Cluster | K8s infrastructure | Clusters → hosts → deployments → compose services → storage → backups |
| Network | DNS & ingress | Domains → DDNS → gateways → ingress rules → deployments |
Both views show the same underlying data from different perspectives. Switching views preserves your hidden/visible preferences per view.
Node types
| Node | Color | What it represents |
|---|---|---|
| Cluster | Blue border | A K3s cluster (contains host and deployment children) |
| Host | Slate | A server node in a cluster, showing CPU, RAM, disk, GPU |
| Deployment | Slate with status dot | A workload assignment deployed to a cluster |
| Service | Compact slate | A compose stack service (child of a deployment) |
| Gateway | Teal | A Tailscale exit node or public IP gateway |
| Ingress | Purple | A K3s ingress rule routing traffic to a deployment |
| Domain | Emerald | A registered DNS domain |
| DDNS | Amber | A dynamic DNS configuration |
| Storage | Orange | A storage connection (NFS or S3) |
| Backup | Purple | A backup policy attached to a deployment |
| Group | Minimal border | A visual container for categories (DNS, External Ingress, Storage, Backups) |
Status indicators
Every deployment, host, and service node shows a colored status dot:
| Color | Meaning |
|---|---|
| Green | Ready / deployed |
| Amber (pulsing) | Deploying / provisioning |
| Red | Error |
| Gray | Pending / unknown |
Edge types
| Style | Color | Meaning |
|---|---|---|
| Solid | Blue | Parent-child ownership (cluster→host, domain→DDNS) |
| Animated | Blue | Active connection (ingress→deployment, DNS→gateway) |
| Dotted | Blue | Compose service relationship (deployment→service) |
| Dotted | Red | Pod placement — which K8s node a deployment is actually running on |
| Dotted | Purple | Backup relationship (deployment→backup→storage) |
Pod placement edges
Red dotted edges show where each deployment's pods are actually running. PodWarden queries the K8s API for real pod-to-node assignments, so placement edges appear even when the deployment doesn't have an explicit node placement set.
If a deployment has pods on multiple nodes, multiple red dotted edges are drawn — one to each host.
Interactions
| Action | What happens |
|---|---|
| Drag a node | Repositions it; position is saved automatically |
| Click a node | Opens the detail panel on the right |
| Double-click a node | Navigates to the detail page for that resource |
| Click empty canvas | Closes the detail panel |
| Scroll wheel | Zoom in/out |
| Drag empty canvas | Pan the view |
Toolbar
The toolbar in the top-left provides:
| Button | Action |
|---|---|
| View toggle | Switch between Cluster and Network views |
| Auto-arrange | Runs the ELK layout engine to arrange all visible nodes, then fits the canvas to your screen |
| Refresh | Re-fetches all topology data from the API (also happens automatically every 30 seconds) |
Additional controls from React Flow appear at the bottom-left: zoom in, zoom out, fit view, and a mini-map for orientation.
Object tree panel
The collapsible panel on the left lists every object on the canvas, organized into categories:
- Clusters — cluster and host nodes
- Standalone Hosts — hosts not in any cluster
- Gateways — gateway nodes
- DNS & Domains — domain and DDNS nodes
- External Ingress — ingress rules not linked to a K3s deployment
- K3s Ingress — ingress rules linked to deployments
- Storage — storage connections
- Backups — backup policies
Category controls
Each category header shows the item count and provides a show/hide toggle (eye icon) that hides or shows all items in that category at once. When some items in a category are hidden, an amber dot appears on the header.
Per-item controls
Each item in the tree has two action buttons:
| Icon | Action |
|---|---|
| Crosshair (focus) | Isolates this object and everything related to it, hiding the rest |
| Eye (visibility) | Toggles visibility of this item and its dependents |
Focus mode
Clicking the focus button on any object keeps only:
- The object itself
- Its parent chain (e.g., cluster → host)
- Its descendants (e.g., deployment → services, backups, ingress)
- Edge-connected objects up to 2 hops (e.g., deployment → backup → storage)
- All hosts in any kept cluster (for context)
Everything else is hidden. Click the eye icon on a hidden category to restore visibility, or refresh the page to reset.
Focus skips placement edges on the second hop to avoid pulling in unrelated deployments that happen to share the same K8s node.
Compose stacks on canvas
Deployments that are compose stacks show their individual services as child nodes. Each service node displays:
- The service name from the compose file
- The container image (short name)
- A blue icon for the primary service, gray for secondary services
- Status dot matching the service's deployment status
Blue dotted edges connect the parent deployment to each service node.
Layout persistence
Your canvas layout is automatically saved and restored:
- Node positions — where you dragged each node
- Hidden nodes — which items you've hidden via the tree panel
- Edge routing — custom handle positions if you've reconnected edges
Each view (Cluster/Network) has its own saved layout. Positions persist across page refreshes and browser sessions.
The 30-second auto-refresh updates node data (status, counts) without disturbing your layout.
LAN access
Deployment nodes show a LAN access address when the deployment is exposed via NodePort. This appears as a green LAN: host:port label below the deployment name, showing the direct LAN address for accessing the service without ingress.
Related docs
- Deployments — Deploy and manage workloads
- Clusters — K3s cluster management
- Compose Stacks — Multi-service application stacks
- Networking — Network types and connectivity
- Backups — Volume backup policies