Salta ai contenuti

Console del sito

Acquisito il 2026-07-28 da un CE di questa distribuzione. sitecli/capture-manifest.json registra quale nodo, e scripts/capture-sitecli.sh --check riverifica la superficie dei comandi rispetto a un CE attivo.

Ogni Customer Edge espone la Console del sito di F5 su https://<sli-ip>:65500. In questa distribuzione è di solito il percorso da provare per primo.

È quello che richiede meno: nessuna chiave SSH da distribuire, nessun host di salto da mantenere, nessun IP pubblico sul nodo e nessuna sostituzione della VM per abilitarlo. Chi può connettersi diventa una decisione di Azure RBAC. E non richiede che il sito sia registrato: questa pagina è stata acquisita la prima volta mentre tutti e tre i siti riportavano site_state: FAILED, ed è stata riverificata invariata sugli stessi nodi una volta che erano ONLINE.

Il rovescio della medaglia è che la Console del sito risponde solo sull’indirizzo interno (SLI) del nodo, raggiungibile solo dall’interno della VNet. Azure Bastion colma questa lacuna senza aggiungere nient’altro sulla rete.

  1. Accedere ad Azure e aggiungere l’estensione Bastion. Il tunneling è una funzionalità del client nativo e l’estensione non è installata per impostazione predefinita.

    Terminal window
    az login
    az extension add --name bastion
  2. Disporre del ruolo Reader sulla macchina virtuale CE, sulla sua interfaccia di rete e sull’host Bastion. Questo è il requisito documentato da Microsoft ed è non verificato qui — ogni esecuzione in questa distribuzione è avvenuta come proprietario della sottoscrizione, quindi nessun ruolo inferiore è stato dimostrato sufficiente o insufficiente.

  3. Confermare che Bastion sia distribuito e adeguato. Lo SKU Basic non supporta né il tunneling né la connessione basata su IP, quindi qui sia Standard sia True sono essenziali.

    Terminal window
    az network bastion list -g "$(terraform output -raw resource_group_name)" \
    --query "[].{name:name, sku:sku.name, tunneling:enableTunneling}" -o table
    Name Sku Tunneling
    ----------------- -------- -----------
    mcn-ce-ha-bastion Standard True

Prelevare i valori da terraform output anziché digitarli — l’id della risorsa non è qualcosa da comporre a mano.

  1. Leggere il nome dell’host Bastion, il gruppo di risorse e l’id della risorsa VM del CE di destinazione.

    Terminal window
    cd terraform
    BASTION=$(terraform output -raw bastion_name)
    RG=$(terraform output -raw resource_group_name)
    VM_ID=$(terraform output -json ce_vm_ids | jq -r '.eastus01')
    mcn-ce-ha-bastion
    rg-mcn-ce-ha-<deployer>
    /subscriptions/…/providers/Microsoft.Compute/virtualMachines/f5-xc-ce-vm-01
  2. Avviare il tunnel. Mantiene la porta aperta finché non viene arrestato, quindi eseguirlo in background o usare un secondo terminale.

    Terminal window
    az network bastion tunnel \
    --name "$BASTION" \
    --resource-group "$RG" \
    --target-resource-id "$VM_ID" \
    --resource-port 65500 \
    --port 65500 &
    WARNING: Opening tunnel on port: 65500
    WARNING: Tunnel is ready, connect on port 65500
    WARNING: Ctrl + C to close

    Tutte e tre le righe hanno il prefisso WARNING:. Si tratta dell’interfaccia CLI di Azure che scrive l’avanzamento su stderr, non di un problema. Attendere Tunnel is ready prima di connettersi.

  3. Confermare che il listener sia locale, su loopback:

    Terminal window
    lsof -nP -iTCP:65500 -sTCP:LISTEN
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    Python 41648 you 7u IPv4 … 0t0 TCP 127.0.0.1:65500 (LISTEN)
  4. Aprire la console. Il tunnel la rende locale, quindi l’indirizzo è localhost — non l’indirizzo del nodo.

    Terminal window
    open https://localhost:65500/ # macOS
    xdg-open https://localhost:65500/ # Linux
  5. Arrestare il tunnel al termine — Ctrl-C, oppure kill %1 se è stato messo in background. Lasciarlo aperto occupa la porta locale 65500 e la sessione Bastion.

Una finestra di dialogo per le credenziali, non una pagina di accesso. La console usa l’autenticazione HTTP Basic, quindi il browser mostra la propria richiesta di nome utente e password. Non c’è alcun modulo da guardare:

Terminal window
curl -skI https://localhost:65500/
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Volterra Site Console"
Content-Type: text/html; charset=utf-8
Content-Length: 0

Un 401 con quel realm significa che la console funziona correttamente. È ciò che una richiesta non autenticata deve ricevere — e fornendo la credenziale admin allo stesso URL si ottiene 200, che è il modo per confermare la credenziale prima di aprire un browser:

Terminal window
curl -sk -u admin -o /dev/null -w '%{http_code}\n' https://localhost:65500/
Enter host password for user 'admin':
200

-u admin senza i due punti fa sì che curl richieda la password anziché prenderla dalla riga di comando, dove finirebbe nella cronologia della shell e nell’elenco dei processi.

Un avviso relativo al certificato, per tre motivi contemporaneamente. Controllando il certificato direttamente:

Terminal window
openssl s_client -connect localhost:65500 -servername localhost </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
subject=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.io
issuer=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.io
notBefore=Oct 25 04:51:31 2024 GMT
notAfter=Oct 25 04:51:31 2025 GMT

Il soggetto coincide con l’emittente, quindi è autofirmato. Il nome è site-local.volterra.io mentre ci si connette a localhost, quindi non corrisponderà. E sulla build eseguita da questa distribuzione, il certificato è scaduto il 25 ottobre 2025 — l’appliance lo fornisce, e nulla in questo repository lo rinnova.

Attendersi un avviso schietto del browser, e attenderselo ogni volta. La riga del soggetto qui sopra è la parte utile: è così che si conferma di aver raggiunto l’appliance e non qualcos’altro in ascolto sulla porta locale 65500.

Accedere come admin. Questa documentazione non pubblica la password, e non deve farlo.

Due motivi per cui non pubblicarla conta più qui di quanto possa sembrare:

  • Questa documentazione è pubblica. Stampare la password attuale della console della flotta trasformerebbe “disporre di Reader sul Bastion” in accesso completo all’appliance per chiunque legga la pagina.
  • Una password pubblicata nella documentazione è errata dal momento in cui qualcuno la ruota, ed errata nel modo più fuorviante — il lettore conclude che il proprio accesso è interrotto anziché che la pagina è obsoleta.

Una volta ruotata, recuperarla da dove il vostro team conserva i segreti operativi.

Perché il tunnel deve puntare all’id della risorsa

Sezione intitolata “Perché il tunnel deve puntare all’id della risorsa”

--target-resource-id è obbligatorio. Puntare invece all’indirizzo del nodo viene rifiutato — qualunque indirizzo si usi, quindi deliberatamente qui non ne viene stampato uno reale:

Terminal window
az network bastion tunnel --name "$BASTION" -g "$RG" \
--target-ip-address <any-sli-address> --resource-port 65500 --port 65501
ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389.

Il motivo non è che la connessione basata su IP sia disabilitata — su questo Bastion ip_connect_enabled è true. Microsoft non supporta porte personalizzate sulle connessioni con client nativo basate su IP indipendentemente da tale impostazione (documentazione Azure), e 65500 è una porta personalizzata. Ispezionare la configurazione di Bastion qui non porta a nulla; usare l’id della risorsa.

SintomoCausaSoluzione
ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389.È stato usato --target-ip-addressUsare --target-resource-id
ERROR: Defined port is currently unavailableUn altro tunnel occupa già quella porta localeArrestare l’altro tunnel, oppure passare un --port diverso; --resource-port resta 65500
terraform output -raw bastion_name è null o vuotoBastion non è distribuitoImpostare enable_bastion = true ed eseguire apply
Il tunnel si avvia ma l’id della risorsa è vuotoIl filtro jq ha usato il nome della VM anziché la chiave del sitoIndicizzare su eastus01/02/03
401 Unauthorized, realm Volterra Site ConsoleNon è un guasto — richiesta non autenticataFornire la credenziale admin
Il browser rifiuta il certificatoAutofirmato, nome non corrispondente e scaduto da ottobre 2025Previsto; confermare che il soggetto sia CN=site-local.volterra.io e procedere