Proxmox VE
Dove nel pannello di amministrazione: Infrastructure › Cloud provider › Providers (
/infra/providers), quindi la pagina del provider (/infra/providers/<id>) con le schede Overview, Clusters, VMs, Servers e Credentials. I piani si impostano in Services › Virtual Machines › Plans & pricing (/vm/catalog).
Descrizione
NexCMP può vendere macchine virtuali eseguite su uno o più cluster Proxmox VE, in affiancamento o in sostituzione di CloudStack. Una VM viene creata clonando un template OS con clone completo, quindi configurata tramite cloud-init: dimensioni, indirizzo IP da un pool definito dall'utente, password di root e chiave SSH. I clienti ottengono il controllo dell'alimentazione, la console, gli snapshot, la reinstallazione, il reset della password e le metriche nel portale. Non vedono mai il cluster, il nodo o il nome dell'origine.
Usalo quando utilizzi già Proxmox VE o per offrire un secondo pool di VM con prezzi differenti.
Requisiti
| Elemento | Requisito |
|---|---|
| Proxmox VE | PVE 9.x. L'integrazione è stata verificata sulla 9.2. Richiede il contenuto storage import e l'opzione disco import-from (PVE 8.2 o versioni successive). |
| Rete dal pannello | HTTPS verso l'API del cluster, https://<host or IP>:8006. Nessun percorso, nome utente o query. Sia il pannello che il worker si connettono; la console del browser viene inoltrata tramite proxy attraverso il pannello. |
| Account | Un utente PVE dedicato con un API token e un ruolo personalizzato con i privilegi elencati di seguito. Non usare mai root@pam. |
| Storage | Uno storage per i dischi delle VM che supporta i clone (ad esempio local-lvm). Per il generatore di template integrato, lo storage denominato local con i tipi di contenuto import e snippets. |
| Rete | Un bridge Linux (ad esempio vmbr0) che raggiunge la rete in cui risiedono gli IP dei clienti. Usa un bridge compatibile con le VLAN se inserisci un tag VLAN. |
| IP | Un blocco IPv4 (da /16 a /30) instradato verso quel bridge, con un gateway. NexCMP assegna gli indirizzi in autonomia; Proxmox non dispone di una gestione degli IP. |
| Template | Una VM template cloud-init per ciascun OS, su ogni nodo su cui effettui il deployment, con il guest agent QEMU. |
| Zona | Una zona esistente a cui collegare il cluster. Vedi Zones. |
| Dipende da | Nessuno. |
Prepara l'infrastruttura
Esegui i comandi come root su qualsiasi nodo del cluster.
1. Crea un ruolo, un utente e un API token con privilegi minimi
Crea il ruolo. L'elenco dei privilegi corrisponde esattamente a ciò che utilizza NexCMP; non contiene nulla che modifichi utenti, definizioni di storage o il datacenter.
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.AccessNetworkè richiesto per il download dell'immagine cloud. PVE 9 non dispone del privilegioVM.Monitor; non aggiungerlo.Crea l'utente e un token.
--privsep 1significa che i diritti del token corrispondono all'intersezione tra i permessi dell'utente e quelli propri del token.bashpveum user add nexcmp@pve --comment "NexCMP" pveum user token add nexcmp@pve api --privsep 1Il comando stampa il token secret una sola volta (un UUID). Copialo adesso. L'ID del token è
nexcmp@pve!api.Assegna il ruolo sia all'utente che al token. Questo è il passaggio che spesso si dimentica: con la separazione dei privilegi, solo il token riceve errori 403 come
Datastore.Auditse l'utente non ha i permessi.bashpveum acl modify / --roles NexCMP --users nexcmp@pve pveum acl modify / --roles NexCMP --tokens 'nexcmp@pve!api'Verificalo dal server del pannello:
bashcurl -sk -H 'Authorization: PVEAPIToken=nexcmp@pve!api=<secret>' https://192.0.2.10:8006/api2/json/versionUn documento JSON con un
versionindica che il token funziona. (-kserve solo per questa verifica rapida; NexCMP memorizza il certificato autonomamente, vedi sotto.)
2. Controlla il bridge e lo storage
bash
pvesm status # storages, type, content and free space
ip -br link show type bridge- Le VM dei clienti ricevono
virtiointerfacce di rete sul bridge inserito in NexCMP. Se configuri una VLAN, il bridge deve supportare le VLAN. - Posiziona le VM dei clienti su un bridge o una VLAN separati dall'indirizzo di gestione del nodo. Se condividono una rete, il set di IP di gestione automatico del firewall di Proxmox apre le porte 22, 8006, 3128, 5900-5999 e 60000-60050 del nodo a ogni VM in quella rete. Se non puoi separarli, aggiungi una regola DROP esplicita per la subnet delle VM verso tali porte prima della regola ACCEPT di gestione.
3. Note sullo storage (LVM-thin)
- Lascia il zeroing del thin-pool sui valori predefiniti. Disattivarlo (
lvchange -Zn) può lasciare vecchi dati nei blocchi appena allocati e corrompere le tabelle delle partizioni o i file system delle VM clonate. - I dischi che segnalano "write cache: disabled" possono clonare a pochi MB/s. Controlla con
hdparm -W /dev/sdXe abilita la cache di scrittura se il disco dispone di protezione contro la perdita di alimentazione.
4. Abilita il contenuto import (solo per il generatore di template integrato)
Il generatore integrato scarica l'immagine cloud nello storage denominato local e crea il template da essa. Aggiungi import (e snippets) all'elenco dei contenuti di quello storage. Mantieni i tipi che usi già; --content sostituisce l'intero elenco:
bash
pvesm status --storage local # note the current content
pvesm set local --content iso,vztmpl,backup,import,snippets5. Crea un template OS da un'immagine cloud
Un template è una VM cloud-init clonata da NexCMP. Ciascuno è registrato sotto una breve OS key come ubuntu-24.04 con il relativo ID della VM. Crea un template per OS su ogni nodo che riceverà le VM, poiché il clone viene eseguito sul nodo scelto.
Opzione A, consigliata: crealo tu stesso. Le immagini cloud standard di Ubuntu e Debian non contengono il guest agent e non consentono il login come root, mentre NexCMP imposta la password di root tramite cloud-init. Prepara prima l'immagine:
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'Quindi crea la VM del template (l'ID 9000 è un esempio; mantieni gli ID dei template sotto il valore vmid from, predefinito 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 9000Opzione B: il generatore integrato. La scheda Create OS template from cloud image nella scheda Clusters (vedi sotto) scarica un'immagine qcow2, crea il template e lo registra. Crea la VM con cloud-init e il flag del guest agent, ma non modifica il contenuto dell'immagine. Usala solo con un'immagine che consente già il login come root e avvia il guest agent, oppure quando fornisci anche uno snippet vendor-data di cloud-init.
Il guest agent è necessario per Reset password e per mostrare l'indirizzo IP della VM.
6. Conosci l'impronta digitale del certificato (facoltativo)
NexCMP considera affidabile il cluster memorizzando l'impronta digitale SHA-256 del suo certificato TLS, quindi un certificato autofirmato va benissimo. Per visualizzare il valore che NexCMP memorizzerà:
bash
openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -fingerprint -sha256Collega in NexCMP
Apri Infrastructure › Cloud provider › Providers e fai clic su Add cloud provider. Scegli Proxmox VE e compila i campi:
Campo Valore di esempio Name Proxmox cluster 1Endpoint https://192.0.2.10:8006Token id nexcmp@pve!apiToken secret XXXX(l'UUID stampato al passaggio 1)Slug pve-1(a-z, 0-9, trattino, 2-32 caratteri)Default node pve1(vuoto: il nodo online con più RAM libera)Storage local-lvmBridge vmbr0
Fai clic su Save & open provider e inserisci un motivo quando richiesto. Il token viene crittografato prima di essere memorizzato.
Nella scheda Overview fai clic su Test connection. Il primo test riuscito memorizza l'impronta digitale TLS del cluster; da quel momento in poi verrà rifiutato qualsiasi certificato differente.
Apri la scheda Clusters. La scheda Node · storage · bridge elenca ciò che l'API rileva; la scheda Cluster configuration contiene le impostazioni:
Campo Significato Default node Nodo utilizzato per le nuove VM. Se vuoto, indica il nodo online con più RAM libera. Storage, Bridge, VLAN Storage del disco, bridge NIC e tag VLAN facoltativo (0 indica nessun tag). CPU type hostper impostazione predefinita. Utilizzax86-64-v2-AESquando i nodi dispongono di generazioni di CPU differenti.vmid from Primo ID di VM assegnato alle VM dei clienti (predefinito 1000). Storage ISO, Storage backup Lascia vuoto a meno che tu non li utilizzi; se vuoto, le funzioni ISO e di backup non vengono offerte. Template OS Uno per riga, os-key=vmid, ad esempioubuntu-24.04=9000.Pinned TLS fingerprint (SHA-256) Compilato dal primo test. Cancellalo ed esegui nuovamente il test dopo aver sostituito il certificato del cluster. 
Facoltativo: se hai utilizzato l'Opzione B precedente, compila Create OS template from cloud image (chiave OS
ubuntu-24.04, vmid9000, nodopve1, URL dell'immagine qcow2) e fai clic su Create template. L'operazione viene eseguita in background per alcuni minuti; il risultato si trova nel registro di audit.
Fai clic su Add pool in Cluster IP pool e crea il pool da cui le VM attingono gli indirizzi:
Campo Valore di esempio Name customers-1CIDR 198.51.100.0/24Gateway 198.51.100.1(mai assegnato a una VM)DNS 1.1.1.1,8.8.8.8(da 1 a 4 indirizzi IPv4)Bridge, VLAN vmbr0,0Already used IPs uno per riga, ip note, ad esempio198.51.100.10 monitoringNexCMP non assegna mai l'indirizzo di rete, l'indirizzo di broadcast, il gateway o un indirizzo riservato. I pool dello stesso cluster non possono sovrapporsi. Un pool può essere eliminato solo quando nessuno dei suoi indirizzi è in uso.

In Attach cluster to zone, scegli la zona e, facoltativamente, il nome di un nodo, quindi fai clic su Attach to zone. Il cluster si unisce alla zona che già vende VM, consentendo a una zona di includere contemporaneamente CloudStack e Proxmox. La nuova risorsa non viene venduta per impostazione predefinita e non modifica il comportamento dei piani esistenti.

Apri Services › Virtual Machines › Plans & pricing e fai clic su Add plan. In Infrastructure source scegli il cluster Proxmox, quindi imposta CPU, RAM, disco e prezzo. Un piano Proxmox non richiede alcuna offerta CloudStack. Per vendere la stessa configurazione da entrambe le fonti, utilizza Clone su un piano e seleziona l'altra fonte. Il disco del piano deve essere almeno grande quanto il disco del template; Proxmox non è in grado di ridurre le dimensioni di un disco.
Importa una VM già esistente
Apri la scheda Servers per elencare le macchine virtuali sul cluster. Import assegna una VM esistente a un account cliente senza alcun costo: non viene fatturato nulla per ore, tempo di spegnimento o traffico. Il cliente può avviare, arrestare, riavviare e aprire la console ma non può eliminarla; solo un amministratore può farlo. Durante l'importazione NexCMP legge solamente dal cluster.
Il cluster deve essere associato a una zona con il nome del nodo di quella VM (lascia vuoto il nodo e le importazioni segnalano che la regione non è configurata).
Per rendere una VM protetta (arresto, riavvio, reinstallazione, ripristino di snapshot, eliminazione e cambio piano vengono rifiutati), importala dalla riga di comando con
--protect:bashsudo -u nexcmp /opt/nexcmp/bin/nexcmp px-import --provider pve-1 --server-ref pve1/101 --account-id 12 --hostname web-1 --protect
Cosa è supportato e cosa non lo è su Proxmox
| Funzionalità | Proxmox VE |
|---|---|
| Crea, accendi/spegni/riavvia, elimina | Sì |
| Ridimensiona CPU e RAM, ingrandisci il disco | Sì, ma la VM viene arrestata, modificata e riavviata (nessun ridimensionamento a caldo) |
| Snapshots | Sì, fino a 5 per VM: crea, elenca, ripristina, elimina |
| Reinstallazione | Sì: la VM viene ricostruita dal template e mantiene il suo ID, IP e impostazioni, con una nuova password |
| Reimposta password | Sì, tramite il guest agent |
| Console | Sì, una console via browser inoltrata dal pannello |
| Metriche | Sì: CPU, memoria, rete e disco |
| Montaggio ISO, backup, firewall, IPv6, port forwarding, cambio IP, volumi extra, Auto Scaling, DDoS Shield, VPC, misurazione della banda | Non disponibile. La pagina della VM del cliente nasconde ciò che un source non può fare. |
Verifica
- Test connection mostra OK e lo stato del provider è attivo.
- Clusters elenca i tuoi nodi come online, con lo storage e il bridge.
- Cluster IP pool mostra i conteggi degli indirizzi liberi, usati e trattenuti.
- La chiave del sistema operativo compare tra i template della zona in Services › Virtual Machines › Template dopo che il cluster è stato collegato.
- Ordina una VM di test da un piano che utilizza il cluster. Dovrebbe ottenere un indirizzo dal pool, una password di root e una console funzionante; il pool mostra un indirizzo utilizzato.
Limiti e note
Zone a sorgente mista
A partire da NexCMP 1.4.0, il listino prezzi pubblico di Cloud Server funziona anche quando CloudStack e Proxmox VE condividono una zona. Ciascun piano utilizza la propria Infrastructure source. Dopo aver collegato un cluster, controlla il listino prezzi pubblico ed effettua un ordine di prova per ciascuna sorgente.
- È possibile aggiungere più cluster Proxmox. Ciascuno corrisponde a un provider.
- Una zona offre un source predefinito; un piano con il proprio Infrastructure source viene distribuito esattamente su quel cluster, a condizione che il cluster sia attivo e si trovi nella zona del piano.
- Un cluster dietro la stessa zona di CloudStack mantiene i suoi piani legacy su CloudStack. Esegui un test d'ordine completo prima del lancio.
- Il token API può essere solo sostituito, mai visualizzato. Sostituiscilo nella scheda Credentials: crea prima il nuovo token in Proxmox, inseriscilo, esegui Test connection, quindi revoca il vecchio token.
- Le azioni Test, Sync e cluster-info sono limitate a sei chiamate al minuto per amministratore.
- NexCMP fattura ai tuoi clienti; i costi dell'hardware e delle licenze del cluster sono a tuo carico.
Troubleshooting
| Sintomo | Causa | Soluzione |
|---|---|---|
| Test: "Key rejected (wrong access key / secret, or revoked)" o HTTP 401/403 | ID token o secret errati, oppure l'ACL è stata assegnata solo al token | Esegui nuovamente i due comandi pveum acl modify (utente e token) e verifica che l'ID del token sia user@realm!tokenid. |
| Test: "Could not connect to the provider" o "Timed out" | Firewall, host o porta errati | Controlla https://host:8006 dal server del pannello. |
| Test: "Endpoint non valido o non presente nella allowlist" | L'endpoint contiene un percorso, un utente, una query oppure non è HTTPS | Usa esattamente https://host:8006. |
| "il certificato TLS del cluster NON corrisponde al fingerprint associato" | Il certificato del cluster è stato sostituito | Cancella Pinned TLS fingerprint nella scheda Clusters, salva e riesegui Test connection. |
| Slug rifiutato | Non rispetta a-z, 0-9, trattino o non ha una lunghezza di 2-32 caratteri | Usa qualcosa di simile a pve-1. |
| "Formato ID token: user@realm!tokenid e secret obbligatorio" | ID token o segreto mancante | Inseriscili entrambi; il segreto è l'UUID stampato al momento della creazione del token. |
| "Riga del template non valida: …" | Una riga in Template OS non è key=vmid | Usa lettere, cifre, ., _, - nella chiave e un vmid di almeno 100. |
| "Chiave OS: a-z 0-9 . _ - e vmid ≥ 100" | Chiave o ID non validi in Create template | Correggi la chiave del sistema operativo e usa un vmid disponibile. |
| "vmid … already exists" durante la creazione di un template | Il vmid è già in uso | Scegli un altro ID. |
| "l'URL punta a un indirizzo interno" | L'URL dell'immagine è un IP interno | Usa un URL pubblico; i nomi vengono risolti da Proxmox. |
| L'attività del template fallisce durante il download | Lo storage local non dispone del contenuto import | pvesm set local --content …,import,snippets, quindi riprova. Un nome file deve terminare con .qcow2, .raw, .vmdk, .ova o .ovf. |
| "cluster has no online nodes" o "node … is not online" | Il nodo predefinito è spento o scritto in modo errato | Correggi Default node o lascialo vuoto. |
| "l'immagine non appartiene al cluster" | Il sistema operativo del piano non è presente in Template OS | Aggiungi la chiave all'elenco e salva. |
| La distribuzione rimane in attesa e poi fallisce durante la clonazione | La VM del template non si trova sul nodo scelto | Crea il template su quel nodo oppure imposta Default node sul nodo che lo contiene. |
| Il cliente non riesce ad accedere come root | L'immagine blocca il login come root | Ricrea il template come descritto nell'Opzione A. |
| Il ripristino della password non ha alcun effetto | Agent guest non installato nel guest | Installa e abilita qemu-guest-agent nel template. |
| "Nome, CIDR e gateway sono obbligatori" | Campo del pool mancante | Compilali tutti e tre. |
| Pool create: "overlaps with pool …", "gateway must be within range (not network/broadcast address)" oppure "cidr: network address must be …" | Pool sovrapposto, gateway errato o CIDR non su un confine di rete | Usa un intervallo libero, un gateway al suo interno e un CIDR scritto come indirizzo di rete (ad esempio 198.51.100.0/24). |
| Import: "la region non è impostata" | Il cluster è collegato senza il nome del nodo della VM | Collega il cluster alla zona specificando il nome del nodo. |