GET /version) and then bootstraps any missing storage and networking (see below). For environments behind an SSH jumphost, the direct probe is skipped and the connection is tested during cluster provisioning instead.
Proxmox VE credentials are managed from the portal or API - there is no
ankra credentials proxmox CLI command.What Ankra Accesses
Ankra drives the Proxmox VE API with your token:
The token needs these privileges on the target nodes, storage, and bridges:
VM.*, Datastore.Allocate, Datastore.AllocateSpace, Sys.Audit, Sys.Modify, and SDN.Use. Sys.Modify and Datastore.Allocate are only exercised by the one-time bootstrap - after it completes you can remove those two grants if they are not otherwise needed, keeping the runtime VM, Datastore.AllocateSpace, audit, and SDN.Use grants required for provisioning and catalog visibility. Enabling Tailscale additionally requires VM.GuestAgent.Unrestricted (see below).
Creating a Proxmox VE API Credential
1
Create an API token in Proxmox
- In the Proxmox VE web UI, go to Datacenter → Permissions → API Tokens
- Create a token for a user whose role carries the privileges listed above, and copy the token ID (
user@realm!name) and secret
2
Add to Ankra (UI)
Go to Credentials → Add → Proxmox VE, then provide:
- Name: a unique identifier - lowercase letters and numbers only, cannot start with a hyphen (e.g.
proxmox-lab) - API URL: the HTTPS address of your Proxmox API (e.g.
https://proxmox.example.com:8006) - Token ID and Token Secret: from the previous step
- Skip TLS certificate verification (
tls_insecurein the API): enable only for self-signed certificates on trusted networks
root). Optionally attach Tailscale/Headscale to have provisioned VMs join your tailnet (see below).Click Test connection, then save.- Storage — when no active storage supports VM images, Ankra enables
imagesandrootdiron thelocaldirectory storage, or createslocalat/var/lib/vz. Theimportcontent type is enabled for cloud-image downloads. - Management bridge — when no Linux bridge exists, Ankra converts the single active Ethernet or bond management interface to
vmbr0. Static andmanual-method interfaces are supported (including dedicated servers where the provider assigns the IP outside Proxmox’s network config); DHCP-managed interfaces cannot be converted through the Proxmox API and are refused with instructions. - Private network — Ankra creates the
ankraSDN simple zone, vnet, and subnet 10.20.0.0/16 with SNAT and dnsmasq-served DHCP, giving cluster VMs an isolated NAT’d network. Each node needs thednsmasqpackage (apt install dnsmasq && systemctl disable --now dnsmasq). - Cloud-init template — nodes without any VM template get the
ankra-ubuntu-24-04template, built automatically from the Ubuntu 24.04 cloud image.
The token ID and secret can be rotated later from the credential’s page. The API URL is fixed - to point at a different Proxmox installation, create a new credential.
Tailscale and Headscale (optional)
Attach Tailscale/Headscale settings to a Proxmox VE credential and every VM Ankra provisions with it installs Tailscale and joins your tailnet on first boot — each VM getting its own tailnet address, reachable across Proxmox hosts and from your own networks over an encrypted mesh. Provide both fields, or leave both empty:- Tailscale login server (
login_serverin the API) — the Headscale control-server URL (for examplehttps://net.ankra.dev). Tailscale’s own coordination server also works. - Tailscale auth key (
auth_key) — a reusable pre-auth key from your control server.
You can add, change, or remove Tailscale on an existing credential from the credential’s page — no need to delete and recreate it. The stored auth key is never shown back.
accept_routes defaults to false — importing the route for the guest’s own SDN subnet would send its reply traffic into the tailnet and can cut it off from the bastion mid-provisioning). Host-spread clusters use the tailnet address for cross-node traffic: the Proxmox SDN private network is node-local, so a control plane placed on a different host than the bastion is only reachable through the tailnet. Kubeadm advertise/join, haproxy upstreams, etcd peering, and cert SANs all follow the recorded tailnet address once a guest has joined.
The tailnet join runs through the Proxmox QEMU guest agent, which requires the credential’s Proxmox token to hold
VM.GuestAgent.Unrestricted — a separate, higher privilege than the read-only VM.GuestAgent.Audit that address discovery already needs. A token with only VM.GuestAgent.Audit provisions fine until Tailscale is configured, then every VM’s tailnet join fails with an API 403 on /agent/exec. Add VM.GuestAgent.Unrestricted to the token’s role before enabling Tailscale on the credential.Troubleshooting Proxmox VE Credentials
The table below covers the Test connection result in the Ankra UI:
Saving can additionally fail with “Could not configure Proxmox VE storage and networking” - the bootstrap could not complete. Common causes: the token is missing
Sys.Modify or Datastore.Allocate, the management interface is DHCP-managed (convert it to a static or manual configuration first), or dnsmasq is not installed on a node. “Proxmox VE infrastructure setup is already running for this organisation or target” means another save is mid-bootstrap against the same installation - wait for it to finish and retry.