Udostępnij za pośrednictwem


Niestandardowe sesje kontenera usługi Azure Container Apps (wersja zapoznawcza)

Oprócz wbudowanego interpretera kodu, który udostępnia dynamiczne sesje usługi Azure Container Apps, można również użyć kontenerów niestandardowych do zdefiniowania własnych piaskownic sesji.

Uwaga

Sesje dynamiczne usługi Azure Container Apps są obecnie dostępne w wersji zapoznawczej. Aby uzyskać więcej informacji, zobacz ograniczenia wersji zapoznawczej.

Zastosowania dla niestandardowych sesji kontenera

Kontenery niestandardowe umożliwiają tworzenie rozwiązań dostosowanych do Twoich potrzeb. Umożliwiają one wykonywanie kodu lub uruchamianie aplikacji w środowiskach, które są szybkie i efemeryczne oraz oferują bezpieczne, piaskownicowe miejsca z funkcją Hyper-V. Ponadto można je skonfigurować z opcjonalną izolacją sieci. Przykłady obejmują:

  • Interpretery kodu: jeśli musisz wykonać niezaufany kod w bezpiecznych piaskownicach przez język, który nie jest obsługiwany w wbudowanym interpreterze, lub potrzebujesz pełnej kontroli nad środowiskiem interpretera kodu.

  • Wykonanie izolowane: jeśli musisz uruchamiać aplikacje w wrogich scenariuszach wielodostępnych, w których każda dzierżawa lub użytkownik ma własne środowisko piaskownicy. Te środowiska są odizolowane od siebie i od aplikacji hosta. Niektóre przykłady obejmują aplikacje, które uruchamiają kod dostarczony przez użytkownika, kod, który przyznaje użytkownikowi końcowemu dostęp do powłoki opartej na chmurze, agentów sztucznej inteligencji i środowisk deweloperskich.

Używanie niestandardowych sesji kontenera

Aby użyć niestandardowych sesji kontenera, należy najpierw utworzyć pulę sesji z niestandardowym obrazem kontenera. Usługa Azure Container Apps automatycznie uruchamia kontenery we własnych piaskownicach funkcji Hyper-V przy użyciu podanego obrazu. Po uruchomieniu kontenera jest on dostępny dla puli sesji.

Gdy aplikacja żąda sesji, wystąpienie jest natychmiast przydzielane z puli. Sesja pozostaje aktywna, dopóki nie wejdzie w stan bezczynności, który zostanie automatycznie zatrzymany i zniszczony.

Tworzenie niestandardowej puli sesji kontenera

Aby utworzyć niestandardową pulę sesji kontenera, należy podać ustawienia konfiguracji obrazu kontenera i puli.

Wywoływanie lub komunikowanie się z każdą sesją przy użyciu żądań HTTP. Kontener niestandardowy musi uwidocznić serwer HTTP na porcie określonym w celu odpowiadania na te żądania.

Aby utworzyć niestandardową pulę sesji kontenera przy użyciu interfejsu wiersza polecenia platformy Azure, upewnij się, że masz najnowsze wersje interfejsu wiersza polecenia platformy Azure i rozszerzenie Azure Container Apps za pomocą następujących poleceń:

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

Niestandardowe pule sesji kontenerów wymagają środowiska usługi Azure Container Apps z włączoną obsługą profilu obciążenia. Jeśli nie masz środowiska, użyj az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles polecenia , aby go utworzyć.

Użyj polecenia , az containerapp sessionpool create aby utworzyć niestandardową pulę sesji kontenera.

Poniższy przykład tworzy pulę sesji o nazwie my-session-pool z niestandardowym obrazem myregistry.azurecr.io/my-container-image:1.0kontenera .

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami odpowiednimi wartościami dla puli sesji i identyfikatorem sesji.

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"

To polecenie tworzy pulę sesji z następującymi ustawieniami:

Parametr Wartość Opis
--name my-session-pool Nazwa puli sesji.
--resource-group my-resource-group Grupa zasobów zawierająca pulę sesji.
--environment my-environment Nazwa lub identyfikator zasobu środowiska aplikacji kontenera.
--container-type CustomContainer Typ kontenera puli sesji. Musi być CustomContainer przeznaczony dla niestandardowych sesji kontenera.
--image myregistry.azurecr.io/my-container-image:1.0 Obraz kontenera do użycia dla puli sesji.
--registry-server myregistry.azurecr.io Nazwa hosta serwera rejestru kontenerów.
--registry-username my-username Nazwa użytkownika do zalogowania się do rejestru kontenerów.
--registry-password my-password Hasło do logowania się do rejestru kontenerów.
--cpu 0.25 Wymagany procesor CPU w rdzeniach.
--memory 0.5Gi Wymagana pamięć.
--target-port 80 Port sesji używany do ruchu przychodzącego.
--cooldown-period 300 Liczba sekund bezczynności sesji przed zakończeniem sesji. Okres bezczynności jest resetowany za każdym razem, gdy interfejs API sesji jest wywoływany. Wartość musi zawierać się między 300 i 3600.
--network-status Określa, czy wychodzący ruch sieciowy jest dozwolony z sesji. Prawidłowe wartości to EgressDisabled (wartość domyślna) i EgressEnabled.
--max-sessions 10 Maksymalna liczba sesji, które można przydzielić w tym samym czasie.
--ready-sessions 5 Docelowa liczba sesji, które są gotowe w puli sesji przez cały czas. Zwiększ tę liczbę, jeśli sesje są przydzielane szybciej niż pula jest uzupełniana.
--env-vars "key1=value1" "key2=value2" Zmienne środowiskowe do ustawienia w kontenerze.

Aby zaktualizować pulę sesji, użyj az containerapp sessionpool update polecenia .

Ważne

Jeśli sesja jest używana do uruchamiania niezaufanego kodu, nie dołączaj informacji ani danych, do których nie chcesz uzyskiwać dostępu za pomocą niezaufanego kodu. Załóżmy, że kod jest złośliwy i ma pełny dostęp do kontenera, w tym jego zmiennych środowiskowych, wpisów tajnych i plików.

Praca z sesjami

Aplikacja wchodzi w interakcję z sesją przy użyciu interfejsu API zarządzania puli sesji.

Punkt końcowy zarządzania pulą dla niestandardowych sesji kontenerów ma następujący format: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

Aby pobrać punkt końcowy zarządzania puli sesji, użyj az containerapp sessionpool show polecenia :

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

Wszystkie żądania do punktu końcowego zarządzania pulą Authorization muszą zawierać nagłówek z tokenem elementu nośnego. Aby dowiedzieć się, jak uwierzytelniać się za pomocą interfejsu API zarządzania pulą, zobacz Uwierzytelnianie.

Każde żądanie interfejsu API musi również zawierać parametr identifier ciągu zapytania z identyfikatorem sesji. Ten unikatowy identyfikator sesji umożliwia aplikacji interakcję z określonymi sesjami. Aby dowiedzieć się więcej na temat identyfikatorów sesji, zobacz Identyfikatory sesji.

Ważne

Identyfikator sesji jest poufnymi informacjami, które wymagają bezpiecznego procesu podczas tworzenia wartości i zarządzania nią. Aby chronić tę wartość, aplikacja musi mieć pewność, że każdy użytkownik lub dzierżawa ma dostęp tylko do własnych sesji. Brak bezpiecznego dostępu do sesji może spowodować nieprawidłowe użycie lub nieautoryzowany dostęp do danych przechowywanych w sesjach użytkowników. Aby uzyskać więcej informacji, zobacz Identyfikatory sesji

Przekazywanie żądań do kontenera sesji:

Wszystkie elementy w ścieżce po punkcie końcowym zarządzania pulą podstawową są przekazywane do kontenera sesji.

Jeśli na przykład wykonasz wywołanie metody <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile, żądanie jest kierowane do kontenera sesji pod adresem 0.0.0.0:<TARGET_PORT>/api/uploadfile.

Interakcja z sesją ciągłą:

Możesz nadal wysyłać żądania do tej samej sesji. Jeśli nie ma żadnych żądań do sesji przez dłuższy niż okres ochładzania, sesja zostanie automatycznie usunięta.

Przykładowe żądanie

W poniższym przykładzie pokazano żądanie do niestandardowej sesji kontenera według identyfikatora użytkownika.

Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.

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!'"
}

To żądanie jest przekazywane do niestandardowej sesji kontenera z identyfikatorem identyfikatora użytkownika. Jeśli sesja nie jest jeszcze uruchomiona, usługa Azure Container Apps przydziela sesję z puli przed przekazaniem żądania.

W tym przykładzie kontener sesji odbiera żądanie pod adresem http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.

Następne kroki