Anpassade containersessioner i Azure Container Apps
Förutom den inbyggda kodtolkaren som dynamiska Azure Container Apps-sessioner tillhandahåller kan du också använda anpassade containrar för att definiera dina egna sessionssandlådor.
Används för anpassade containersessioner
Med anpassade containrar kan du skapa lösningar som är skräddarsydda för dina behov. De gör att du kan köra kod eller köra program i miljöer som är snabba och tillfälliga och erbjuder säkra, begränsade utrymmen med Hyper-V. Dessutom kan de konfigureras med valfri nätverksisolering. Vissa exempel inkluderar:
Kodtolkar: När du behöver köra obetrodd kod i säkra sandbox-miljöer med ett språk som inte stöds i den inbyggda tolken, eller om du behöver fullständig kontroll över kodtolkarmiljön.
Isolerad körning: När du behöver köra program i fientliga scenarier med flera klienter där varje klientorganisation eller användare har en egen sandbox-miljö. Dessa miljöer är isolerade från varandra och från värdprogrammet. Några exempel är program som kör kod som tillhandahålls av användaren, kod som ger slutanvändare åtkomst till ett molnbaserat gränssnitt, AI-agenter och utvecklingsmiljöer.
Använda anpassade containersessioner
Om du vill använda anpassade containersessioner skapar du först en sessionspool med en anpassad containeravbildning. Azure Container Apps startar automatiskt containrar i sina egna Hyper-V-sandbox-miljö med hjälp av den angivna avbildningen. När containern har startats är den tillgänglig för sessionspoolen.
När ditt program begär en session allokeras en instans omedelbart från poolen. Sessionen förblir aktiv tills den går in i ett inaktivt tillstånd, som sedan stoppas och förstörs automatiskt.
Skapa en anpassad containersessionspool
Om du vill skapa en anpassad containersessionspool måste du ange konfigurationsinställningar för containeravbildningar och pooler.
Du anropar eller kommunicerar med varje session med hjälp av HTTP-begäranden. Den anpassade containern måste exponera en HTTP-server på en port som du anger för att svara på dessa begäranden.
Om du vill skapa en anpassad containersessionspool med hjälp av Azure CLI kontrollerar du att du har de senaste versionerna av Azure CLI och Azure Container Apps-tillägget med följande kommandon:
az upgrade
az extension add --name containerapp --upgrade --allow-preview true -y
Anpassade containersessionspooler kräver en arbetsbelastningsprofilaktiverad Azure Container Apps-miljö. Om du inte har en miljö använder du az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles
kommandot för att skapa en.
az containerapp sessionpool create
Använd kommandot för att skapa en anpassad containersessionspool.
I följande exempel skapas en sessionspool med namnet my-session-pool
med en anpassad containeravbildning myregistry.azurecr.io/my-container-image:1.0
.
Innan du skickar begäran ersätter du platshållarna mellan <>
hakparenteserna med lämpliga värden för sessionspoolen och sessionsidentifieraren.
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>
Det här kommandot skapar en sessionspool med följande inställningar:
Parameter | Värde | beskrivning |
---|---|---|
--name |
my-session-pool |
Namnet på sessionspoolen. |
--resource-group |
my-resource-group |
Resursgruppen som innehåller sessionspoolen. |
--environment |
my-environment |
Namnet eller resurs-ID:t för containerappens miljö. |
--container-type |
CustomContainer |
Containertypen för sessionspoolen. Måste vara CustomContainer för anpassade containersessioner. |
--image |
myregistry.azurecr.io/my-container-image:1.0 |
Containeravbildningen som ska användas för sessionspoolen. |
--registry-server |
myregistry.azurecr.io |
Värdnamnet för containerregisterservern. |
--registry-username |
my-username |
Användarnamnet för att logga in i containerregistret. |
--registry-password |
my-password |
Lösenordet för att logga in i containerregistret. |
--cpu |
0.25 |
Den processor som krävs i kärnor. |
--memory |
0.5Gi |
Det minne som krävs. |
--target-port |
80 |
Sessionsporten som används för inkommande trafik. |
--cooldown-period |
300 |
Antalet sekunder som en session kan vara inaktiv innan sessionen avslutas. Inaktivitetsperioden återställs varje gång sessionens API anropas. Värdet måste vara mellan 300 och 3600 . |
--network-status |
Anger om utgående nätverkstrafik tillåts från sessionen. Giltiga värden är EgressDisabled (standard) och EgressEnabled . |
|
--max-sessions |
10 |
Det maximala antalet sessioner som kan allokeras samtidigt. |
--ready-sessions |
5 |
Målantalet sessioner som är klara i sessionspoolen hela tiden. Öka det här antalet om sessioner allokeras snabbare än poolen fylls på. |
--env-vars |
"key1=value1" "key2=value2" |
Miljövariablerna som ska anges i containern. |
--location |
"Supported Location" |
Platsen för sessionspoolen. |
Om du vill kontrollera sessionspoolens status använder du az containerapp sessionpool show
kommandot:
az containerapp sessionpool show \
--name <SESSION_POOL_NAME> \
--resource-group <RESOURCE_GROUP> \
--query "properties.poolManagementEndpoint" \
--output tsv
Om du vill uppdatera sessionspoolen använder du az containerapp sessionpool update
kommandot .
Viktigt!
Om sessionen används för att köra kod som inte är betrodd ska du inte inkludera information eller data som du inte vill att den ej betrodda koden ska komma åt. Anta att koden är skadlig och har fullständig åtkomst till containern, inklusive dess miljövariabler, hemligheter och filer.
Cachelagring av bilder
När en sessionspool skapas eller uppdateras cachelagrar Azure Container Apps containeravbildningen i poolen. Den här cachelagringen hjälper till att påskynda processen med att skapa nya sessioner.
Ändringar i avbildningen återspeglas inte automatiskt i sessionerna. Uppdatera avbildningen genom att uppdatera sessionspoolen med en ny avbildningstagg. Använd en unik tagg för varje bilduppdatering för att säkerställa att den nya avbildningen hämtas.
Arbeta med sessioner
Ditt program interagerar med en session med hjälp av sessionspoolens hanterings-API.
En slutpunkt för poolhantering för anpassade containersessioner följer det här formatet: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io
.
Om du vill hämta sessionspoolens hanteringsslutpunkt använder du az containerapp sessionpool show
kommandot:
az containerapp sessionpool show \
--name <SESSION_POOL_NAME> \
--resource-group <RESOURCE_GROUP> \
--query "properties.poolManagementEndpoint" \
--output tsv
Alla begäranden till slutpunkten för poolhantering måste innehålla ett Authorization
huvud med en ägartoken. Information om hur du autentiserar med API:et för poolhantering finns i Autentisering.
Varje API-begäran måste också innehålla frågesträngsparametern identifier
med sessions-ID:t. Med det här unika sessions-ID:t kan ditt program interagera med specifika sessioner. Mer information om sessionsidentifierare finns i Sessionsidentifierare.
Viktigt!
Sessionsidentifieraren är känslig information som kräver en säker process när du skapar och hanterar dess värde. För att skydda det här värdet måste programmet se till att varje användare eller klient endast har åtkomst till sina egna sessioner. Om du inte kan skydda åtkomsten till sessioner kan det leda till missbruk eller obehörig åtkomst till data som lagras i användarnas sessioner. Mer information finns i Sessionsidentifierare
Vidarebefordra begäranden till sessionens container:
Allt i sökvägen efter baspoolens hanteringsslutpunkt vidarebefordras till sessionens container.
Om du till <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile
exempel anropar dirigeras begäran till sessionens container på 0.0.0.0:<TARGET_PORT>/api/uploadfile
.
Kontinuerlig sessionsinteraktion:
Du kan fortsätta att göra begäranden till samma session. Om det inte finns några begäranden till sessionen längre än nedkylningsperioden tas sessionen bort automatiskt.
Exempelbegäran
I följande exempel visas en begäran till en anpassad containersession av ett användar-ID.
Innan du skickar begäran ersätter du platshållarna mellan <>
hakparenteserna med värden som är specifika för din begäran.
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!'"
}
Den här begäran vidarebefordras till den anpassade containersessionen med identifieraren för användarens ID. Om sessionen inte redan körs allokerar Azure Container Apps en session från poolen innan begäran vidarebefordras.
I exemplet tar sessionens container emot begäran på http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>
.
Använda hanterad identitet
Med en hanterad identitet från Microsoft Entra-ID kan dina anpassade containersessionspooler och deras sessioner komma åt andra Microsoft Entra-skyddade resurser. Mer information om hanterade identiteter i Microsoft Entra-ID finns i Hanterade identiteter för Azure-resurser.
Du kan aktivera hanterade identiteter för dina anpassade containersessionspooler. Både systemtilldelade och användartilldelade hanterade identiteter stöds.
Det finns två sätt att använda hanterade identiteter med anpassade containersessionspooler:
Autentisering av avbildningshämtning: Använd den hanterade identiteten för att autentisera med containerregistret för att hämta containeravbildningen.
Resursåtkomst: Använd sessionspoolens hanterade identitet i en session för att få åtkomst till andra Microsoft Entra-skyddade resurser. På grund av dess säkerhetskonsekvenser är den här funktionen inaktiverad som standard.
Viktigt!
Om du aktiverar åtkomst till hanterad identitet i en session kan alla kod eller program som körs i sessionen skapa Entra-token för poolens hanterade identitet. Eftersom sessioner vanligtvis kör obetrodd kod använder du den här funktionen med försiktighet.
Om du vill aktivera hanterad identitet för en anpassad containersessionspool använder du Azure Resource Manager.
Loggning
Konsolloggar från anpassade containersessioner är tillgängliga på Azure Log Analytics-arbetsytan som är associerad med Azure Container Apps-miljön i en tabell med namnet AppEnvSessionConsoleLogs_CL
.
Fakturering
Anpassade containersessioner faktureras baserat på de resurser som förbrukas av sessionspoolen. Mer information finns i Fakturering för Azure Container Apps.