Proxmox VE
Wo im Admin-Bereich: Infrastructure › Cloud provider › Providers (
/infra/providers), dann die Anbieterseite (/infra/providers/<id>) mit den Registerkarten Overview, Clusters, VMs, Servers und Credentials. Tarife werden unter Services › Virtual Machines › Plans & pricing (/vm/catalog) festgelegt.
Funktion
NexCMP kann virtuelle Maschinen verkaufen, die auf einem oder mehreren Proxmox VE-Clusters laufen — parallel zu oder anstelle von CloudStack. Eine VM wird durch Klonen einer OS-Vorlage mit Full Clone erstellt und anschließend über cloud-init konfiguriert: Größe, IP-Adresse aus einem von Ihnen definierten Pool, Root-Passwort und SSH Key. Kunden erhalten im Portal Steuerungsmöglichkeiten für Power, Konsole, Snapshots, Neuinstallation, Passwort-Reset und Metriken. Sie bekommen niemals den Cluster-, Node- oder Quellnamen zu Gesicht.
Verwenden Sie dies, wenn Sie Proxmox VE bereits einsetzen oder einen zweiten, preislich anders gestalteten VM-Pool anbieten möchten.
Anforderungen
| Komponente | Anforderung |
|---|---|
| Proxmox VE | PVE 9.x. Die Integration wurde unter 9.2 verifiziert. Sie erfordert den Speicherinhalt import und die Festplattenoption import-from (PVE 8.2 oder neuer). |
| Netzwerk aus dem Panel | HTTPS zur Cluster-API, https://<host or IP>:8006. Kein Pfad, Benutzername oder Query-String. Sowohl das Panel als auch der Worker verbinden sich; die Browser-Konsole wird über das Panel geproxt. |
| Konto | Ein dedizierter PVE-Benutzer mit einem API-Token und einer benutzerdefinierten Rolle mit den unten aufgeführten Berechtigungen. Verwenden Sie niemals root@pam. |
| Storage | Ein Speicher für VM-Disks, der Clones unterstützt (zum Beispiel local-lvm). Für den integrierten Template-Builder wird der Speicher namens local mit den Inhaltstypen import und snippets benötigt. |
| Netzwerk | Eine Linux-Bridge (zum Beispiel vmbr0), die das Netzwerk erreicht, in dem sich die Kunden-IPs befinden. Verwenden Sie eine VLAN-fähige Bridge, wenn Sie ein VLAN-Tag eingeben. |
| IPs | Ein IPv4-Block (/16 bis /30), der zu dieser Bridge geroutet wird, inklusive Gateway. NexCMP weist Adressen selbst zu; Proxmox verfügt über kein IP-Management. |
| Vorlagen | Eine Cloud-init-Template-VM pro Betriebssystem auf jedem Node, auf dem Sie bereitstellen, inklusive des QEMU Guest Agent. |
| Zone | Eine bestehende Zone, der der Cluster zugeordnet werden soll. Siehe Zones. |
| Abhängig von | Nichts. |
Infrastruktur vorbereiten
Führen Sie die Befehle als Root auf einem beliebigen Cluster-Node aus.
1. Rolle, Benutzer und API-Token mit minimalen Rechten erstellen
Erstellen Sie die Rolle. Die Liste der Berechtigungen entspricht exakt dem, was NexCMP verwendet; sie enthält nichts, was Benutzer, Speicherdefinitionen oder das Datacenter bearbeitet.
bashpveum role add NexCMP -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.PowerMgmt VM.Audit VM.Console VM.Snapshot VM.Snapshot.Rollback VM.Backup VM.GuestAgent.Audit VM.GuestAgent.Unrestricted Datastore.Audit Datastore.AllocateSpace Datastore.AllocateTemplate Sys.Audit Sys.AccessNetwork SDN.Use SDN.Audit Pool.Audit Mapping.Audit Mapping.Use"Sys.AccessNetworkist für den Download des Cloud-Images erforderlich. PVE 9 verfügt über keine BerechtigungVM.Monitor; fügen Sie diese nicht hinzu.Erstellen Sie den Benutzer und ein Token.
--privsep 1bedeutet, dass die Rechte des Tokens aus der Schnittmenge der eigenen Berechtigungen des Benutzers und des Tokens resultieren.bashpveum user add nexcmp@pve --comment "NexCMP" pveum user token add nexcmp@pve api --privsep 1Der Befehl gibt das Token secret once aus (eine UUID). Kopieren Sie es jetzt. Die Token-ID ist
nexcmp@pve!api.Weisen Sie die Rolle sowohl dem Benutzer als auch dem Token zu. Dies ist der Schritt, der oft übersehen wird: Bei der Trennung von Berechtigungen erhalten nur Token 403-Fehler wie
Datastore.Audit, wenn der Benutzer keine Berechtigung hat.bashpveum acl modify / --roles NexCMP --users nexcmp@pve pveum acl modify / --roles NexCMP --tokens 'nexcmp@pve!api'Testen Sie es vom Panel-Server aus:
bashcurl -sk -H 'Authorization: PVEAPIToken=nexcmp@pve!api=<secret>' https://192.0.2.10:8006/api2/json/versionEin JSON-Dokument mit einer
versionbedeutet, dass das Token funktioniert. (-kdient nur diesem Schnelltest; NexCMP pinnt das Zertifikat selbst, siehe unten.)
2. Brücke und Speicher überprüfen
bash
pvesm status # storages, type, content and free space
ip -br link show type bridge- Kunden-VMs erhalten
virtioNetzwerkschnittstellen auf der Brücke, die Sie in NexCMP eingeben. Wenn Sie ein VLAN festlegen, muss die Brücke VLAN-fähig sein. - Verbinden Sie Kunden-VMs mit einer Brücke oder einem VLAN, das von der Verwaltungsadresse des Knotens getrennt ist. Wenn sie sich ein Netzwerk teilen, öffnet der automatische Verwaltungs-IP-Satz der Proxmox-Firewall die Ports 22, 8006, 3128, 5900-5999 und 60000-60050 des Knotens für jede VM in diesem Netzwerk. Wenn Sie sie nicht trennen können, fügen Sie oberhalb der Verwaltungs-ACCEPT-Regel eine explizite DROP-Regel für das VM-Subnetz für diese Ports hinzu.
3. Hinweise zum Speicher (LVM-thin)
- Belassen Sie das Nullen des Thin-Pools auf dem Standardwert. Das Ausschalten (
lvchange -Zn) kann dazu führen, dass alte Daten in neu zugewiesenen Blöcken verbleiben und Partitionstabellen oder Dateisysteme geklonter VMs beschädigt werden. - Disks mit der Meldung „write cache: disabled“ klonen oft nur mit wenigen MB/s. Überprüfen Sie dies mit
hdparm -W /dev/sdXund aktivieren Sie den Schreibcache, wenn der Datenträger über einen Stromausfallschutz verfügt.
4. Aktivieren Sie den Inhalt import (nur für den integrierten Template-Builder)
Der integrierte Builder lädt das Cloud-Image in den Speicher namens local herunter und erstellt daraus das Template. Fügen Sie import (und snippets) zur Inhaltsliste dieses Speichers hinzu. Behalten Sie die bereits verwendeten Typen bei; --content ersetzt die gesamte Liste:
bash
pvesm status --storage local # note the current content
pvesm set local --content iso,vztmpl,backup,import,snippets5. Ein OS-Template aus einem Cloud-Image erstellen
Ein Template ist eine Cloud-Init-VM, die von NexCMP geklont wird. Jedes wird unter einem kurzen OS key wie ubuntu-24.04 mit seiner VM-ID registriert. Erstellen Sie ein Template pro OS auf jedem Knoten, der VMs erhalten soll, da der Klon auf dem ausgewählten Knoten ausgeführt wird.
Option A, empfohlen: Selbst erstellen. Standardmäßige Ubuntu- und Debian-Cloud-Images enthalten den Guest Agent nicht, erlauben keinen Root-Login und NexCMP setzt das Root-Passwort über Cloud-Init. Bereiten Sie das Image zuerst vor:
bash
apt install -y libguestfs-tools
wget -O noble.qcow2 https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
virt-customize -a noble.qcow2 --install qemu-guest-agent \
--write /etc/cloud/cloud.cfg.d/99-nexcmp.cfg:$'ssh_pwauth: true\ndisable_root: false\n' \
--write /etc/ssh/sshd_config.d/00-nexcmp.conf:$'PermitRootLogin yes\nPasswordAuthentication yes\n'Erstellen Sie anschließend die Template-VM (ID 9000 ist ein Beispiel; halten Sie Template-IDs unter dem Wert vmid from, Standard 1000):
bash
qm create 9000 --name tpl-ubuntu-24-04 --memory 2048 --cores 2 --cpu host --ostype l26 \
--scsihw virtio-scsi-single --net0 virtio,bridge=vmbr0 --agent 1 --serial0 socket --vga serial0
qm set 9000 --scsi0 local-lvm:0,import-from=$PWD/noble.qcow2,discard=on,iothread=1
qm set 9000 --ide2 local-lvm:cloudinit --boot order=scsi0
qm template 9000Option B: Der integrierte Builder. Die Karte Create OS template from cloud image auf der Registerkarte Clusters (siehe unten) lädt ein qcow2-Image herunter, erstellt das Template und registriert es. Sie erstellt die VM mit Cloud-Init und dem Guest-Agent-Flag, ändert jedoch nichts am Inhalt des Images. Verwenden Sie sie nur mit einem Image, das bereits einen Root-Login erlaubt und den Guest Agent ausführt, oder wenn Sie zusätzlich ein Cloud-Init-Vendor-Data-Snippet bereitstellen.
Der Guest Agent ist für Reset password und die Anzeige der IP-Adresse der VM erforderlich.
6. Den Zertifikatsfingerabdruck kennen (optional)
NexCMP vertraut dem Cluster, indem es den SHA-256-Fingerabdruck seines TLS-Zertifikats pinnt, sodass ein selbstsigniertes Zertifikat problemlos verwendet werden kann. So zeigen Sie den Wert an, den NexCMP pinnen wird:
bash
openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -fingerprint -sha256In NexCMP verbinden
Öffnen Sie Infrastructure › Cloud provider › Providers und klicken Sie auf Add cloud provider. Wählen Sie Proxmox VE aus und füllen Sie die Felder aus:
Feld Beispielwert Name Proxmox cluster 1Endpoint https://192.0.2.10:8006Token id nexcmp@pve!apiToken secret XXXX(die in Schritt 1 ausgegebene UUID)Slug pve-1(a-z, 0-9, Bindestrich, 2-32 Zeichen)Default node pve1(leer: Der Online-Node mit dem meisten freien RAM)Storage local-lvmBridge vmbr0
Klicken Sie auf Save & open provider und geben Sie auf Nachfrage einen Grund ein. Das Token wird vor dem Speichern verschlüsselt.
Klicken Sie im Reiter Overview auf Test connection. Der erste erfolgreiche Test pinnt den TLS-Fingerabdruck des Clusters; ab diesem Zeitpunkt wird ein abweichendes Zertifikat abgelehnt.
Öffnen Sie den Reiter Clusters. Die Karte Node · storage · bridge zeigt an, was die API erkennt; die Karte Cluster configuration enthält die Einstellungen:
Feld Bedeutung Default node Für neue VMs verwendeter Node. Leer bedeutet der Online-Node mit dem meisten freien RAM. Storage, Bridge, VLAN Festplattenspeicher, NIC-Bridge und optionales VLAN-Tag (0 bedeutet keines). CPU type hoststandardmäßig. Verwenden Siex86-64-v2-AES, wenn die Nodes unterschiedliche CPU-Generationen aufweisen.vmid from Erste VM-ID, die an Kunden-VMs vergeben wird (Standard: 1000). Storage ISO, Storage backup Leer lassen, sofern nicht verwendet; leer bedeutet, dass ISO- und Backup-Funktionen nicht angeboten werden. Template OS Einer pro Zeile, os-key=vmid, zum Beispielubuntu-24.04=9000.Pinned TLS fingerprint (SHA-256) Wird beim ersten Test automatisch ausgefüllt. Löschen Sie den Wert und testen Sie erneut, nachdem Sie das Cluster-Zertifikat ausgetauscht haben. 
Optional: Wenn Sie obige Option B verwendet haben, füllen Sie Create OS template from cloud image aus (OS-Key
ubuntu-24.04, vmid9000, Nodepve1, die qcow2-Image-URL) und klicken Sie auf Create template. Dies läuft einige Minuten im Hintergrund; das Ergebnis befindet sich im Audit-Log.
Klicken Sie auf Add pool unter Cluster IP pool und erstellen Sie den Pool, aus dem VMs Adressen beziehen:
Feld Beispielwert Name customers-1CIDR 198.51.100.0/24Gateway 198.51.100.1(wird niemals an eine VM vergeben)DNS 1.1.1.1,8.8.8.8(1 bis 4 IPv4-Adressen)Bridge, VLAN vmbr0,0Already used IPs einer pro Zeile, ip note, zum Beispiel198.51.100.10 monitoringNexCMP weist niemals die Netzwerkadresse, die Broadcast-Adresse, das Gateway oder eine reservierte Adresse zu. Pools desselben Clusters dürfen sich nicht überlappen. Ein Pool kann nur gelöscht werden, wenn keine seiner Adressen in Verwendung ist.

Wählen Sie unter Attach cluster to zone die Zone und optional einen Nodenamen aus und klicken Sie auf Attach to zone. Das Cluster tritt der Zone bei, die bereits VMs verkauft, sodass eine Zone CloudStack und Proxmox gemeinsam nutzen kann. Die neue Quelle wird standardmäßig nicht verkauft und ändert nichts am Verhalten bestehender Tarife.

Öffnen Sie Services › Virtual Machines › Plans & pricing und klicken Sie auf Add plan. Wählen Sie unter Infrastructure source das Proxmox-Cluster aus und legen Sie anschließend CPU, RAM, Festplatte und Preis fest. Ein Proxmox-Tarif benötigt kein CloudStack-Offering. Um dieselbe Konfiguration von beiden Quellen aus anzubieten, verwenden Sie Clone bei einem Tarif und wählen Sie die andere Quelle aus. Die Festplatte des Tarifs muss mindestens so groß sein wie die des Templates; Proxmox kann eine Festplatte nicht verkleinern.
Bereits existierende VM importieren
Öffnen Sie die Registerkarte Servers, um die VMs auf dem Cluster aufzulisten. Import weist einem Kundenkonto eine bestehende VM kostenlos zu: Es wird nichts für Stunden, Ausschaltzeiten oder Traffic berechnet. Der Kunde kann die VM starten, stoppen, neu starten und die Konsole öffnen, sie jedoch nicht löschen; dies kann nur ein Administrator. NexCMP liest beim Importieren nur vom Cluster.
Der Cluster muss mit einer Zone verknüpft sein, die den Nodename dieser VM enthält (lassen Sie den Node leer, meldet der Import, dass die Region nicht eingerichtet ist).
Um eine VM als geschützt zu markieren (Stoppen, Neustarten, Neuinstallieren, Snapshot-Wiederherstellung, Löschen und Tarifänderungen werden verweigert), importieren Sie diese über die Befehlszeile mit
--protect:bashsudo -u nexcmp /opt/nexcmp/bin/nexcmp px-import --provider pve-1 --server-ref pve1/101 --account-id 12 --hostname web-1 --protect
Was auf Proxmox unterstützt wird und was nicht
| Funktion | Proxmox VE |
|---|---|
| Erstellen, Ein-/Ausschalten/Neustarten, Löschen | Ja |
| CPU und RAM anpassen, Festplatte vergrößern | Ja, aber die VM wird gestoppt, geändert und wieder gestartet (keine Live-Größenänderung) |
| Snapshots | Ja, bis zu 5 pro VM: Erstellen, Auflisten, Wiederherstellen, Löschen |
| Reinstall | Ja: Die VM wird aus dem Template neu erstellt und behält ihre ID, IP und Einstellungen bei, mit einem neuen Passwort |
| Reset password | Ja, über den Guest Agent |
| Konsole | Ja, eine vom Panel bereitgestellte Browser-Konsole |
| Metriken | Ja: CPU, Arbeitsspeicher, Netzwerk und Festplatte |
| ISO-Mount, Backups, Firewall, IPv6, Portweiterleitung, IP ändern, zusätzliche Datenträger, Auto Scaling, DDoS Shield, VPC, Bandbreitenmessung | Nicht verfügbar. Die Kunden-VM-Seite blendet aus, was eine Quelle nicht unterstützt. |
Verifizierung
- Test connection zeigt OK und der Anbieterstatus ist aktiv.
- Clusters listet Ihre Nodes als online, samt Speicher und Bridge.
- Cluster IP pool zeigt die Anzahl der freien, genutzten und gehaltenen IPs.
- Der OS-Key erscheint nach dem Zuordnen des Clusters unter den Vorlagen der Zone in Services › Virtual Machines › Template.
- Bestellen Sie eine Test-VM über einen Tarif, der das Cluster verwendet. Sie sollte eine Adresse aus dem Pool, ein Root-Passwort und eine funktionierende Konsole erhalten; der Pool zeigt eine verwendete Adresse an.
Grenzwerte und Hinweise
Zonen mit gemischten Quellen
Seit NexCMP 1.4.0 funktioniert die öffentliche Preisliste für Cloud Server auch, wenn sich CloudStack und Proxmox VE eine Zone teilen. Jeder Plan nutzt seine eigene Infrastructure source. Prüfen Sie nach dem Anbinden eines Clusters die öffentliche Preisliste und geben Sie für jede Quelle eine Testbestellung auf.
- Es können mehrere Proxmox-Cluster hinzugefügt werden. Jedes repräsentiert einen Anbieter.
- Eine Zone bietet eine Standardquelle; ein Tarif mit einer eigenen Infrastructure source wird genau auf diesem Cluster bereitgestellt, sofern das Cluster aktiv ist und in der Zone des Tarifs liegt.
- Ein Cluster hinter derselben Zone wie CloudStack behält seine Legacy-Tarife auf CloudStack bei. Testen Sie eine Bestellung vor dem Launch von Anfang bis Ende.
- Der API-Token kann nur ersetzt, nie eingesehen werden. Ersetzen Sie ihn im Tab Credentials: Erstellen Sie den neuen Token zuerst in Proxmox, geben Sie ihn ein, führen Sie Test connection aus und sperren Sie anschließend den alten Token.
- Die Aktionen Test, Sync und Cluster-Info sind auf sechs Aufrufe pro Minute und Administrator beschränkt.
- NexCMP stellt Ihren Kunden Rechnungen; die Kosten für Hardware und Lizenzen des Clusters tragen Sie.
Fehlerbehebung
| Symptom | Ursache | Behebung |
|---|---|---|
| Test: „Key rejected (wrong access key / secret, or revoked)“ oder HTTP 401/403 | Falsche Token-ID oder falsches Secret, oder die ACL wurde nur dem Token zugewiesen | Führen Sie die beiden pveum acl modify Befehle (Benutzer und Token) erneut aus und prüfen Sie, ob die Token-ID user@realm!tokenid lautet. |
| Test: „Could not connect to the provider“ oder „Timed out“ | Firewall, falscher Host oder Port | Prüfen Sie https://host:8006 vom Panel-Server aus. |
| Test: „Invalid endpoint or not on the allowlist“ | Der Endpunkt enthält einen Pfad, Benutzer, Query oder verwendet kein HTTPS | Verwenden Sie genau https://host:8006. |
| „cluster TLS certificate DOES NOT match pinned fingerprint“ | Das Cluster-Zertifikat wurde ausgetauscht | Löschen Sie Pinned TLS fingerprint auf der Registerkarte Clusters, speichern Sie und führen Sie Test connection erneut aus. |
| Slug abgelehnt | Keine a-z, 0-9, Bindestriche oder nicht 2–32 Zeichen lang | Verwenden Sie etwas wie pve-1. |
| „Token id format: user@realm!tokenid and secret is required“ | Token-ID oder Secret fehlt | Geben Sie beides ein; das Secret ist die UUID, die bei der Erstellung des Tokens ausgegeben wurde. |
| „Invalid template line: …“ | Eine Zeile in Template OS entspricht nicht key=vmid | Verwenden Sie im Schlüssel Buchstaben, Ziffern, ., _, - und eine vmid von mindestens 100. |
| „OS key: a-z 0-9 . _ - and vmid ≥ 100“ | Ungültiger Schlüssel oder ID in Create template | Korrigieren Sie den OS-Schlüssel und verwenden Sie eine freie vmid. |
| „vmid … already exists“ beim Erstellen einer Vorlage | Die vmid ist bereits vergeben | Wählen Sie eine andere ID. |
| „url points to internal address“ | Die Image-URL ist eine interne IP | Verwenden Sie eine öffentliche URL; Namen werden von Proxmox aufgelöst. |
| Vorlagenaufgabe schlägt beim Download fehl | Der Speicher local hat keinen import-Inhalt | pvesm set local --content …,import,snippets, dann erneut versuchen. Ein Dateiname muss auf .qcow2, .raw, .vmdk, .ova oder .ovf enden. |
| „cluster has no online nodes“ oder „node … is not online“ | Der Standardknoten ist offline oder falsch geschrieben | Korrigieren Sie Default node oder lassen Sie das Feld leer. |
| „image does not belong to cluster“ | Das Betriebssystem des Tarifs ist nicht in Template OS enthalten | Fügen Sie den Schlüssel zur Liste hinzu und speichern Sie. |
| Bereitstellung wartet und schlägt dann beim Klonen fehl | Die Vorlagen-VM befindet sich nicht auf dem ausgewählten Knoten | Erstellen Sie die Vorlage auf diesem Knoten oder setzen Sie Default node auf den Knoten, der sie enthält. |
| Kunde kann sich nicht als root anmelden | Das Image blockiert die root-Anmeldung | Erstellen Sie die Vorlage wie in Option A neu. |
| Passwort zurücksetzen bewirkt nichts | Kein Gastagent im Gastsystem installiert | Installieren und aktivieren Sie qemu-guest-agent in der Vorlage. |
| "Name, CIDR and gateway sind erforderlich" | Fehlendes Pool-Feld | Füllen Sie alle drei aus. |
| Pool-Erstellung: "overlaps with pool …", "gateway must be within range (not network/broadcast address)" oder "cidr: network address must be …" | Überlappender Pool, falsches Gateway oder eine CIDR, die nicht auf einer Netzwerkgrenze liegt | Verwenden Sie einen freien Bereich, ein Gateway darin und eine als Netzwerkadresse geschriebene CIDR (zum Beispiel 198.51.100.0/24). |
| Import: „region is not set up“ | Das Cluster ist ohne den Knotennamen der VM angebunden | Binden Sie das Cluster mit dem Knotennamen an die Zone an. |