Getting Started

Prerequisites

What you need before connecting infrastructure to flex.plane.

This page covers everything you need before connecting your Proxmox nodes to flex.plane — whether you are using the managed SaaS offering or self-hosting the management plane.

Proxmox node requirements

You need at least one Proxmox VE node (version 8.0 or later). This is where your virtual machines will actually run. Each Proxmox node will have the flex.plane agent installed on it.

Requirements per node:

  • Proxmox VE 8.0 or later
  • Root SSH access (for agent installation)
  • Outbound internet access for downloading VM images from public sources (e.g., cloud-images.ubuntu.com). For air-gapped environments, you can host images on an internal HTTP server.

For multi-zone deployments, you can have separate Proxmox clusters in different locations. Each cluster becomes a "zone" in flex.plane.

Network connectivity

The following network paths must be open:

  • Proxmox nodes to the mesh control server: The agent uses WireGuard (UDP, typically port 41641) to join the mesh network. Outbound UDP must be allowed from your Proxmox nodes.
  • Proxmox nodes to the internet: Required for downloading VM images from public repositories. Not required if you host images internally.
The flex.plane agent communicates exclusively over the encrypted WireGuard mesh. It does not expose any ports on the node's public network interfaces. The orchestrator reaches the agent through the mesh, not through the node's public IP.

Management cluster requirements (self-hosted only)

If you are using the managed SaaS offering, skip this section entirely and go straight to Add Your First Node.

Self-hosting flex.plane requires a Kubernetes cluster to run the management plane components (orchestrator, portal, identity).

Kubernetes cluster

You need a cluster with:

  • Kubernetes 1.27 or later
  • At least 2 GiB of available memory for flex.plane pods
  • A storage class for persistent volumes (used by Zitadel's PostgreSQL and the orchestrator's mesh state)
  • An ingress controller (e.g., ingress-nginx, Traefik) for exposing the portal and API

This can be a lightweight cluster. A single-node k3s setup works fine for smaller deployments. The management cluster does not run your VM workloads; it only hosts the platform control plane.

The management Kubernetes cluster is separate from any Kubernetes clusters you provision through flex.plane for your workloads. Do not confuse the two.

Network connectivity

  • Management cluster to Proxmox nodes: The mesh overlay handles this via WireGuard (UDP, typically port 41641). The orchestrator and agents communicate exclusively over this encrypted mesh.
  • Users to management cluster: HTTPS (443) for the portal, API, and identity provider.

Required tools

Make sure the following tools are installed on your workstation:

ToolVersionPurpose
kubectl1.27+Kubernetes cluster management
helm3.12+Deploying flex.plane Helm charts

Verify your setup:

kubectl version --client
helm version

You should also have a working kubectl context pointing to your management Kubernetes cluster:

kubectl get nodes

Identity provider

flex.plane uses Zitadel for OIDC authentication. You have two options:

The identity Helm chart bundles Zitadel and PostgreSQL. This is the simplest path and is covered in the Identity Chart guide. No pre-configuration needed, just proceed to the next step.

Option B: Use an existing Zitadel instance

If you already run Zitadel, you can point flex.plane at your existing instance. You will need to:

  1. Create a new organization for your flex.plane tenant
  2. Create a project within that organization
  3. Create an OIDC application (type: web, auth method: PKCE) for the portal
  4. Create a machine user with a JWT private key for the orchestrator's Zitadel management API access
  5. Set up the role system (see Roles and Permissions)

You will need the following values from your Zitadel instance:

  • OIDC issuer URL
  • OIDC client ID
  • Organization ID
  • Project ID
  • JWT private key file (for the machine user)
The flex.plane role model depends on specific Zitadel project roles. Make sure your Zitadel configuration includes the roles USER, ADMIN, VDC_USER, and VDC_ADMIN as project roles. Details are in the Identity Chart guide.

Next steps

Ready to connect your first node? Head to Add Your First Node. If you are self-hosting, complete the Identity and Platform installation first.