Niestandardowe sesje kontenera usługi Azure Container Apps
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.
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.0
kontenera .
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" \
--location <LOCATION>
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. |
--location |
"Supported Location" |
Lokalizacja puli sesji. |
Aby sprawdzić stan 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
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.
Buforowanie obrazów
Po utworzeniu lub zaktualizowaniu puli sesji usługa Azure Container Apps buforuje obraz kontenera w puli. Buforowanie pomaga przyspieszyć proces tworzenia nowych sesji.
Wszelkie zmiany obrazu nie są automatycznie odzwierciedlane w sesjach. Aby zaktualizować obraz, zaktualizuj pulę sesji za pomocą nowego tagu obrazu. Użyj unikatowego tagu dla każdej aktualizacji obrazu, aby upewnić się, że nowy obraz jest ściągany.
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>
.
Korzystanie z tożsamości zarządzanej
Tożsamość zarządzana firmy Microsoft Entra ID umożliwia niestandardowe pule sesji kontenera i ich sesje uzyskiwania dostępu do innych chronionych zasobów firmy Microsoft Entra. Aby uzyskać więcej informacji na temat tożsamości zarządzanych w usłudze Microsoft Entra ID, zobacz Tożsamości zarządzane dla zasobów platformy Azure.
Tożsamości zarządzane dla niestandardowych pul sesji kontenerów można włączyć. Obsługiwane są tożsamości zarządzane przypisane przez system i przypisane przez użytkownika.
Istnieją dwa sposoby używania tożsamości zarządzanych z niestandardowymi pulami sesji kontenerów:
Uwierzytelnianie ściągania obrazu: użyj tożsamości zarządzanej, aby uwierzytelnić się w rejestrze kontenerów, aby ściągnąć obraz kontenera.
Dostęp do zasobów: użyj tożsamości zarządzanej puli sesji w sesji, aby uzyskać dostęp do innych chronionych zasobów firmy Microsoft. Ze względu na jego implikacje dotyczące zabezpieczeń ta funkcja jest domyślnie wyłączona.
Ważne
Jeśli włączysz dostęp do tożsamości zarządzanej w sesji, każdy kod lub programy uruchomione w sesji mogą tworzyć tokeny entra dla tożsamości zarządzanej puli. Ponieważ sesje zwykle uruchamiają niezaufany kod, należy używać tej funkcji z ostrożnością.
Aby włączyć tożsamość zarządzaną dla niestandardowej puli sesji kontenerów, użyj usługi Azure Resource Manager.
Rejestrowanie
Dzienniki konsoli z niestandardowych sesji kontenera są dostępne w obszarze roboczym usługi Azure Log Analytics skojarzonym ze środowiskiem usługi Azure Container Apps w tabeli o nazwie AppEnvSessionConsoleLogs_CL
.
Rozliczenia
Niestandardowe sesje kontenera są rozliczane na podstawie zasobów używanych przez pulę sesji. Aby uzyskać więcej informacji, zobacz Rozliczenia usługi Azure Container Apps.