Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Помимо встроенного интерпретатора кода, предоставляемого динамическими сеансами приложений контейнеров Azure, можно также использовать пользовательские контейнеры для определения собственных песочниц сеансов.
Uses for custom container sessions
Custom containers allow you to build solutions tailored to your needs. Они позволяют выполнять код или запускать приложения в средах, которые являются быстрыми и временными и предлагают безопасные изолированные пространства с Hyper-V. Кроме того, их можно настроить с необязательной сетевой изоляцией. Некоторыми примерами могут служить:
Интерпретаторы кода: если необходимо выполнить ненадежный код в безопасных песочницах на языке, не поддерживаемом встроенным интерпретатором, или вам нужен полный контроль над средой интерпретатора кода.
Изолированное выполнение: При необходимости запуска приложений в враждебных мультитенантных сценариях, где каждый клиент или пользователь имеет собственную изолированную среду. Эти среды изолированы друг от друга и от ведущего приложения. Некоторые примеры включают приложения, которые выполняют предоставленный пользователем код, код, предоставляющий конечным пользователям доступ к облачной оболочке, агентам ИИ и средам разработки.
Using custom container sessions
To use custom container sessions, you first create a session pool with a custom container image. Azure Container Apps automatically starts containers in their own Hyper-V sandboxes using the provided image. Once the container starts up, it's available to the session pool.
When your application requests a session, an instance is instantly allocated from the pool. Сеанс остается активным, пока не войдет в состояние простоя, которое затем автоматически остановлено и уничтожено.
Creating a custom container session pool
Чтобы создать настраиваемый пул сеансов контейнеров, необходимо указать образ контейнера и параметры конфигурации пула.
Вы вызываете или взаимодействуете с каждым сеансом с помощью HTTP-запросов. Пользовательский контейнер должен предоставлять HTTP-сервер на порте, указанном для реагирования на эти запросы.
Чтобы создать настраиваемый пул сеансов контейнеров с помощью Azure CLI, убедитесь, что у вас есть последние версии Azure CLI и расширения "Приложения контейнеров Azure" со следующими командами:
az upgrade
az extension add --name containerapp --upgrade --allow-preview true -y
Custom container session pools require a workload profile enabled Azure Container Apps environment. Если у вас нет среды, используйте az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles команду, чтобы создать ее.
Используйте команду az containerapp sessionpool create для создания настроенного пула сессий контейнеров.
В следующем примере создается пул сеансов с именем my-session-pool с пользовательским образом контейнера myregistry.azurecr.io/my-container-image:1.0.
Перед отправкой запроса замените заполнители между <> скобками соответствующими значениями для пула сеансов и идентификатора сеанса.
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>
Эта команда создает пул сеансов со следующими параметрами:
| Параметр | Ценность | Описание |
|---|---|---|
--name |
my-session-pool |
The name of the session pool. |
--resource-group |
my-resource-group |
The resource group that contains the session pool. |
--environment |
my-environment |
The name or resource ID of the container app's environment. |
--container-type |
CustomContainer |
The container type of the session pool. Must be CustomContainer for custom container sessions. |
--image |
myregistry.azurecr.io/my-container-image:1.0 |
The container image to use for the session pool. |
--registry-server |
myregistry.azurecr.io |
Имя узла сервера реестра контейнеров. |
--registry-username |
my-username |
Имя пользователя для входа в реестр контейнеров. |
--registry-password |
my-password |
Пароль для входа в реестр контейнеров. |
--cpu |
0.25 |
The required CPU in cores. |
--memory |
0.5Gi |
Требуемая память. |
--target-port |
80 |
Порт сеанса, используемый для входящего трафика. |
--cooldown-period |
300 |
Количество секунд, в течение которых сеанс может быть неактивен до завершения сеанса. Период простоя сбрасывается при каждом вызове API сеанса. Значение должно быть между 300 и 3600. |
--network-status |
EgressDisabled |
Указывает, разрешен ли исходящий сетевой трафик из сеанса. Допустимые значения EgressDisabled (по умолчанию) и EgressEnabled. |
--max-sessions |
10 |
Максимальное количество сеансов, которые можно выделить одновременно. |
--ready-sessions |
5 |
The target number of sessions that are ready in the session pool all the time. Increase this number if sessions are allocated faster than the pool is being replenished. |
--env-vars |
"key1=value1" "key2=value2" |
The environment variables to set in the container. |
--location |
"Supported Location" |
The location of the session pool. |
Чтобы проверить состояние пула сеансов, используйте az containerapp sessionpool show команду:
az containerapp sessionpool show \
--name <SESSION_POOL_NAME> \
--resource-group <RESOURCE_GROUP> \
--query "properties.poolManagementEndpoint" \
--output tsv
Чтобы обновить пул сеансов, используйте az containerapp sessionpool update команду.
Внимание
Если сеанс используется для запуска ненадежного кода, не включайте сведения или данные, к которым не требуется обращаться ненадежный код. Предположим, что код является вредоносным и имеет полный доступ к контейнеру, включая его переменные среды, секреты и файлы.
Кэширование изображений
При создании или обновлении пула сессий в Azure Container Apps, образ контейнера кэшируется в пуле. Это кэширование помогает ускорить процесс создания новых сеансов.
Любые изменения изображения не отражаются автоматически в сеансах. To update the image, update the session pool with a new image tag. Используйте уникальный тег для каждого обновления изображения, чтобы убедиться, что новое изображение загружено.
Working with sessions
Приложение взаимодействует с сеансом с помощью API управления пулом сеансов.
Конечная точка управления пулом для пользовательских сеансов контейнеров соответствует следующему формату. https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io
Чтобы получить конечную точку управления пула сеансов, используйте az containerapp sessionpool show команду:
az containerapp sessionpool show \
--name <SESSION_POOL_NAME> \
--resource-group <RESOURCE_GROUP> \
--query "properties.poolManagementEndpoint" \
--output tsv
All requests to the pool management endpoint must include an Authorization header with a bearer token. Сведения о проверке подлинности с помощью API управления пулом см. в статье "Проверка подлинности".
Каждый запрос API также должен содержать параметр identifier строки запроса с идентификатором сеанса. Этот уникальный идентификатор сеанса позволяет приложению взаимодействовать с определенными сеансами. Дополнительные сведения об идентификаторах сеансов см. в разделе "Идентификаторы сеанса".
Внимание
Идентификатор сеанса — это конфиденциальная информация, требующая безопасного процесса при создании и управлении его значением. Чтобы защитить это значение, приложение должно гарантировать, что у каждого пользователя или клиента есть доступ только к собственным сеансам. Неспособность защитить доступ к сеансам может привести к неправильному использованию или несанкционированного доступа к данным, хранящимся в сеансах пользователей. Дополнительные сведения см. в разделе "Идентификаторы сеансов"
Переадресация запросов в контейнер сеанса:
Anything in the path following the base pool management endpoint is forwarded to the session's container.
Например, при вызове <POOL_MANAGEMENT_ENDPOINT>/api/uploadfileзапрос направляется в контейнер сеанса по адресу 0.0.0.0:<TARGET_PORT>/api/uploadfile.
Continuous session interaction:
You can continue making requests to the same session. Если в течение длительного периода прохладного периода запросы к сеансу отсутствуют, сеанс автоматически удаляется.
Образец запроса
The following example shows a request to a custom container session by a user ID.
Перед отправкой запроса замените заполнители между <> квадратными скобками значениями, определенными для запроса.
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!'"
}
This request is forwarded to the custom container session with the identifier for the user's ID. Если сеанс еще не запущен, приложения контейнеров Azure выделяют сеанс из пула перед пересылкой запроса.
В данном примере контейнер сеанса получает запрос в точке http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.
Using managed identity
A managed identity from Microsoft Entra ID allows your custom container session pools and their sessions to access other Microsoft Entra protected resources. Дополнительные сведения об управляемых удостоверениях в Microsoft Entra ID см. в разделе «Управляемые удостоверения для ресурсов Azure».
You can enable managed identities for your custom container session pools. Both system-assigned and user-assigned managed identities are supported.
There are two ways to use managed identities with custom container session pools:
Image pull authentication: Use the managed identity to authenticate with the container registry to pull the container image.
Доступ к ресурсам. Используйте управляемое удостоверение пула сеансов в сеансе для доступа к другим защищенным ресурсам Microsoft Entra. Из-за его последствий для безопасности эта возможность отключена по умолчанию.
Внимание
If you enable access to managed identity in a session, any code or programs running in the session can create Entra tokens for the pool's managed identity. Так как сеансы обычно выполняют ненадежный код, используйте эту функцию с осторожностью.
To enable managed identity for a custom container session pool, use Azure Resource Manager.
Logging
Console logs from custom container sessions are available in the Azure Log Analytics workspace associated with the Azure Container Apps environment in a table named AppEnvSessionConsoleLogs_CL.
Выставление счетов
Custom container sessions are billed based on the resources consumed by the session pool. Дополнительные сведения см. в статье "Выставление счетов за приложения контейнеров Azure".