Condividi tramite


Sessioni di contenitori personalizzate di App Azure Container

Oltre all'interprete di codice predefinito fornito dalle sessioni dinamiche di App Contenitore di Azure, è anche possibile usare contenitori personalizzati per definire sandbox di sessione personalizzate.

Usi delle sessioni di contenitori personalizzate

I contenitori personalizzati consentono di creare soluzioni personalizzate in base alle esigenze. Consentono di eseguire codice o eseguire applicazioni in ambienti veloci e temporanei e offrono spazi protetti e in modalità sandbox con Hyper-V. Inoltre, possono essere configurati con l'isolamento di rete facoltativo. Alcuni esempi includono:

  • Interpreti di codice: quando è necessario eseguire codice non attendibile in sandbox sicure da un linguaggio non supportato nell'interprete predefinito oppure è necessario il controllo completo sull'ambiente dell'interprete del codice.

  • Esecuzione isolata: quando è necessario eseguire applicazioni in scenari multi-tenant ostili in cui ogni tenant o utente ha un proprio ambiente in modalità sandbox. Questi ambienti sono isolati l'uno dall'altro e dall'applicazione host. Alcuni esempi includono applicazioni che eseguono codice fornito dall'utente, codice che concede all'utente finale l'accesso a una shell basata su cloud, agenti di intelligenza artificiale e ambienti di sviluppo.

Uso delle sessioni di contenitori personalizzate

Per usare sessioni di contenitori personalizzate, creare prima di tutto un pool di sessioni con un'immagine del contenitore personalizzata. Le App contenitore di Azure avviano automaticamente i contenitori nelle proprie sandbox Hyper-V usando l'immagine fornita. Dopo l'avvio, il contenitore è disponibile per il pool di sessioni.

Quando l'applicazione richiede una sessione, un'istanza viene allocata immediatamente dal pool. La sessione rimane attiva fino a quando non entra in uno stato di inattività, e viene quindi arrestata ed eliminata automaticamente.

Creazione di un pool di sessioni di contenitori personalizzato

Per creare un pool di sessioni di contenitori personalizzato, è necessario fornire un'immagine del contenitore e le impostazioni di configurazione del pool.

È possibile richiamare o comunicare con ogni sessione usando richieste HTTP. Il contenitore personalizzato deve esporre un server HTTP su una porta specificata per rispondere a queste richieste.

Per creare un pool di sessioni di contenitori personalizzato usando l'interfaccia della riga di comando di Azure, assicurarsi di disporre delle versioni più recenti dell'interfaccia della riga di comando di Azure e dell'estensione App contenitore di Azure con i comandi seguenti:

az upgrade
az extension add --name containerapp --upgrade --allow-preview true -y

I pool di sessioni di contenitori personalizzati richiedono un profilo del carico di lavoro abilitato per l'ambiente App Contenitore di Azure. Se non si ha un ambiente, usare il comando az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles per crearne uno.

Usare il comando az containerapp sessionpool create per creare un pool di sessioni di contenitori personalizzato.

Nell'esempio seguente viene creato un pool di sessioni denominato my-session-pool con un'immagine del contenitore personalizzata myregistry.azurecr.io/my-container-image:1.0.

Prima di inviare la richiesta, sostituire i segnaposto tra le parentesi <> con i valori appropriati per il pool di sessioni e l'identificatore di sessione.

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --environment <ENVIRONMENT> \
    --registry-server myregistry.azurecr.io \
    --registry-username <USER_NAME> \
    --registry-password <PASSWORD> \
    --container-type CustomContainer \
    --image myregistry.azurecr.io/my-container-image:1.0 \
    --cpu 0.25 --memory 0.5Gi \
    --target-port 80 \
    --cooldown-period 300 \
    --network-status EgressDisabled \
    --max-sessions 10 \
    --ready-sessions 5 \
    --env-vars "key1=value1" "key2=value2" \
    --location <LOCATION>

Questo comando crea un pool di sessioni con le impostazioni seguenti:

Parametro valore Descrizione
--name my-session-pool Il nome del pool di sessioni.
--resource-group my-resource-group Il gruppo di risorse che contiene il pool di sessioni.
--environment my-environment Il nome o l'ID della risorsa dell'ambiente app contenitore.
--container-type CustomContainer Il tipo di contenitore del pool di sessioni. Deve essere CustomContainer per le sessioni di contenitori personalizzate.
--image myregistry.azurecr.io/my-container-image:1.0 L'immagine del contenitore da usare per il pool di sessioni.
--registry-server myregistry.azurecr.io Il nome host del server del registro contenitori.
--registry-username my-username Il nome utente per accedere al registro contenitori.
--registry-password my-password La password per accedere al registro contenitori.
--cpu 0.25 La CPU richiesta in core.
--memory 0.5Gi La memoria richiesta.
--target-port 80 La porta di sessione usata per il traffico in ingresso.
--cooldown-period 300 Il numero di secondi in cui una sessione può essere inattiva prima che venga terminata. Il periodo di inattività viene reimpostato ogni volta che viene chiamata l'API della sessione. Il valore deve essere compreso tra 300 e 3600.
--network-status Indica se il traffico di rete in uscita è consentito dalla sessione. I valori validi sono EgressDisabled (valore predefinito) e EgressEnabled.
--max-sessions 10 Il numero massimo di sessioni che è possibile allocare contemporaneamente.
--ready-sessions 5 Numero di sessioni di destinazione pronte per tutto il tempo nel pool di sessioni. Aumentare questo numero se le sessioni vengono allocate più velocemente del pool in fase di rifornimento.
--env-vars "key1=value1" "key2=value2" Variabili di ambiente da impostare nel contenitore.
--location "Supported Location" La posizione del pool di sessioni.

Per verificare lo stato del pool di sessioni, usare il az containerapp sessionpool show comando :

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

Per aggiornare il pool di sessioni, usare il comando az containerapp sessionpool update.

Importante

Se la sessione viene usata per eseguire codice non attendibile, non includere informazioni o dati a cui non si vuole che il codice non attendibile acceda. Si supponga che il codice sia dannoso e abbia accesso completo al contenitore, incluse le variabili di ambiente, i segreti e i file.

Memorizzazione nella cache delle immagini

Quando un pool di sessioni viene creato o aggiornato, App Azure Container memorizza nella cache l'immagine del contenitore nel pool. Questa memorizzazione nella cache consente di velocizzare il processo di creazione di nuove sessioni.

Le modifiche apportate all'immagine non vengono riflesse automaticamente nelle sessioni. Per aggiornare l'immagine, aggiornare il pool di sessioni con un nuovo tag immagine. Usare un tag univoco per ogni aggiornamento dell'immagine per assicurarsi che la nuova immagine venga estratta.

Uso delle sessioni

L'applicazione interagisce con una sessione usando l'API di gestione del pool di sessioni.

Un endpoint di gestione del pool per le sessioni di contenitori personalizzate segue questo formato: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

Per recuperare l'endpoint di gestione del pool di sessioni, usare il comando az containerapp sessionpool show:

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

Tutte le richieste all'endpoint di gestione del pool devono includere un'intestazione Authorization con un token di connessione. Per informazioni su come eseguire l'autenticazione con l'API di gestione del pool, vedere Autenticazione.

Ogni richiesta API deve includere anche il parametro della stringa di query identifier con l'ID sessione. Questo ID sessione univoco consente all'applicazione di interagire con sessioni specifiche. Per altre informazioni sugli identificatori di sessione, vedere Identificatori di sessione.

Importante

L'identificatore di sessione è costituito da informazioni riservate che richiedono un processo sicuro durante la creazione e la gestione del relativo valore. Per proteggere questo valore, l'applicazione deve assicurarsi che ogni utente o tenant abbia accesso solo alle proprie sessioni. L'impossibilità di proteggere l'accesso alle sessioni può comportare l'uso improprio o l'accesso non autorizzato ai dati archiviati nelle sessioni degli utenti. Per altre informazioni, vedere Identificatori di sessione

Inoltro delle richieste al contenitore della sessione:

Qualsiasi elemento nel percorso che segue l'endpoint di gestione del pool di base viene inoltrato al contenitore della sessione.

Ad esempio, se si effettua una chiamata a <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile, la richiesta viene instradata al contenitore della sessione in 0.0.0.0:<TARGET_PORT>/api/uploadfile.

Interazione di sessione continua:

È possibile continuare a effettuare richieste alla stessa sessione. Se non sono presenti richieste alla sessione per più tempo rispetto al periodo di raffreddamento, la sessione viene eliminata automaticamente.

Esempio di richiesta

Nell'esempio seguente viene illustrata una richiesta a una sessione di contenitore personalizzata in base a un ID utente.

Prima di inviare la richiesta, sostituire i segnaposto tra le parentesi <> con valori specifici della richiesta.

POST https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io/<API_PATH_EXPOSED_BY_CONTAINER>?identifier=<USER_ID>
Authorization: Bearer <TOKEN>
{
  "command": "echo 'Hello, world!'"
}

Questa richiesta viene inoltrata alla sessione del contenitore personalizzata con l'identificatore per l'ID dell'utente. Se la sessione non è già in esecuzione, App Contenitore di Azure assegna una sessione dal pool prima di inoltrare la richiesta.

Nell'esempio, il contenitore della sessione riceve la richiesta in http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.

Uso dell'identità gestita

Un'identità gestita da Microsoft Entra ID consente ai pool di sessioni di contenitori personalizzati e alle relative sessioni di accedere ad altre risorse protette di Microsoft Entra. Per altre informazioni sulle identità gestite in Microsoft Entra ID, vedere Identità gestite per le risorse di Azure.

È possibile abilitare le identità gestite per i pool di sessioni di contenitori personalizzati. Sono supportate sia le identità gestite assegnate dal sistema che le identità gestite assegnate dall'utente.

Esistono due modi per usare le identità gestite con pool di sessioni di contenitori personalizzati:

  • Autenticazione pull dell'immagine: usare l'identità gestita per eseguire l'autenticazione con il registro contenitori per eseguire il pull dell'immagine del contenitore.

  • Accesso alle risorse: usare l'identità gestita del pool di sessioni in una sessione per accedere ad altre risorse protette di Microsoft Entra. A causa delle implicazioni di sicurezza, questa funzionalità è disabilitata per impostazione predefinita.

    Importante

    Se si abilita l'accesso all'identità gestita in una sessione, qualsiasi codice o programma in esecuzione nella sessione può creare token Entra per l'identità gestita del pool. Poiché le sessioni in genere eseguono codice non attendibile, usare questa funzionalità con cautela.

Per abilitare l'identità gestita per un pool di sessioni di contenitori personalizzato, usare Azure Resource Manager.

Registrazione

I log della console dalle sessioni di contenitori personalizzati sono disponibili nell'area di lavoro Log Analytics di Azure associata all'ambiente App Azure Container in una tabella denominata AppEnvSessionConsoleLogs_CL.

Fatturazione

Le sessioni di contenitori personalizzate vengono fatturate in base alle risorse utilizzate dal pool di sessioni. Per altre informazioni, vedere Fatturazione delle app contenitore di Azure.

Passaggi successivi