Поделиться через


Пользовательские сеансы контейнеров для приложений контейнеров Azure

Помимо встроенного интерпретатора кода, предоставляемого динамическими сеансами приложений контейнеров Azure, можно также использовать пользовательские контейнеры для определения собственных песочниц сеансов.

Используется для пользовательских сеансов контейнеров

Пользовательские контейнеры позволяют создавать решения, адаптированные к вашим потребностям. Они позволяют выполнять код или запускать приложения в средах, которые являются быстрыми и временными и предлагают безопасные изолированные пространства с Hyper-V. Кроме того, их можно настроить с необязательной сетевой изоляцией. Некоторыми примерами могут служить:

  • Интерпретаторы кода: если необходимо выполнить ненадежный код в безопасных песочницах на языке, не поддерживаемом встроенным интерпретатором, или вам нужен полный контроль над средой интерпретатора кода.

  • Изолированное выполнение. При необходимости запускать приложения в враждебных мультитенантных сценариях, где каждый клиент или пользователь имеет собственную песочницу. Эти среды изолированы друг от друга и от ведущего приложения. Некоторые примеры включают приложения, которые выполняют предоставленный пользователем код, код, предоставляющий конечным пользователям доступ к облачной оболочке, агентам ИИ и средам разработки.

Использование пользовательских сеансов контейнеров

Чтобы использовать пользовательские сеансы контейнеров, сначала создайте пул сеансов с пользовательским образом контейнера. Приложения контейнеров Azure автоматически запускают контейнеры в собственных песочницах Hyper-V с помощью предоставленного образа. После запуска контейнера он доступен пулу сеансов.

Когда приложение запрашивает сеанс, экземпляр мгновенно выделяется из пула. Сеанс остается активным, пока не войдет в состояние простоя, которое затем автоматически остановлено и уничтожено.

Создание настраиваемого пула сеансов контейнеров

Чтобы создать настраиваемый пул сеансов контейнеров, необходимо указать образ контейнера и параметры конфигурации пула.

Вы вызываете или взаимодействуете с каждым сеансом с помощью HTTP-запросов. Пользовательский контейнер должен предоставлять HTTP-сервер на порте, указанном для реагирования на эти запросы.

Чтобы создать настраиваемый пул сеансов контейнеров с помощью Azure CLI, убедитесь, что у вас есть последние версии Azure CLI и расширения "Приложения контейнеров Azure" со следующими командами:

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

Для пользовательских пулов сеансов контейнеров требуется среда azure Container Apps с поддержкой профиля рабочей нагрузки. Если у вас нет среды, используйте 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 Имя пула сеансов.
--resource-group my-resource-group Группа ресурсов, содержащая пул сеансов.
--environment my-environment Имя или идентификатор ресурса среды приложения контейнера.
--container-type CustomContainer Тип контейнера пула сеансов. Должен быть CustomContainer для пользовательских сеансов контейнеров.
--image myregistry.azurecr.io/my-container-image:1.0 Образ контейнера, используемый для пула сеансов.
--registry-server myregistry.azurecr.io Имя узла сервера реестра контейнеров.
--registry-username my-username Имя пользователя для входа в реестр контейнеров.
--registry-password my-password Пароль для входа в реестр контейнеров.
--cpu 0.25 Обязательный ЦП в ядрах.
--memory 0.5Gi Требуемая память.
--target-port 80 Порт сеанса, используемый для входящего трафика.
--cooldown-period 300 Количество секунд, в течение которых сеанс может быть неактивен до завершения сеанса. Период простоя сбрасывается при каждом вызове API сеанса. Значение должно быть между 300 и 3600.
--network-status EgressDisabled Указывает, разрешен ли исходящий сетевой трафик из сеанса. Допустимые значения EgressDisabled (по умолчанию) и EgressEnabled.
--max-sessions 10 Максимальное количество сеансов, которые можно выделить одновременно.
--ready-sessions 5 Целевое число сеансов, готовых в пуле сеансов все время. Увеличьте это число, если сеансы выделяются быстрее, чем пул обновляется.
--env-vars "key1=value1" "key2=value2" Переменные среды, заданные в контейнере.
--location "Supported Location" Расположение пула сеансов.

Чтобы проверить состояние пула сеансов, используйте 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 кэшируют образ контейнера в пуле. Это кэширование помогает ускорить процесс создания новых сеансов.

Любые изменения изображения не отражаются автоматически в сеансах. Чтобы обновить изображение, обновите пул сеансов новым тегом изображения. Используйте уникальный тег для каждого обновления образа, чтобы убедиться, что новый образ извлечен.

Работа с сеансами

Приложение взаимодействует с сеансом с помощью 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

Все запросы к конечной точке управления пулом должны содержать Authorization заголовок с маркером носителя. Сведения о проверке подлинности с помощью API управления пулом см. в статье "Проверка подлинности".

Каждый запрос API также должен содержать параметр identifier строки запроса с идентификатором сеанса. Этот уникальный идентификатор сеанса позволяет приложению взаимодействовать с определенными сеансами. Дополнительные сведения об идентификаторах сеансов см. в разделе "Идентификаторы сеанса".

Внимание

Идентификатор сеанса — это конфиденциальная информация, требующая безопасного процесса при создании и управлении его значением. Чтобы защитить это значение, приложение должно гарантировать, что у каждого пользователя или клиента есть доступ только к собственным сеансам. Неспособность защитить доступ к сеансам может привести к неправильному использованию или несанкционированного доступа к данным, хранящимся в сеансах пользователей. Дополнительные сведения см. в разделе "Идентификаторы сеансов"

Переадресация запросов в контейнер сеанса:

Все, что находится в пути после конечной точки управления базовым пулом, пересылается в контейнер сеанса.

Например, при вызове <POOL_MANAGEMENT_ENDPOINT>/api/uploadfileзапрос направляется в контейнер сеанса по адресу 0.0.0.0:<TARGET_PORT>/api/uploadfile.

Непрерывное взаимодействие сеанса:

Вы можете продолжать выполнять запросы к одному сеансу. Если в течение длительного периода прохладного периода запросы к сеансу отсутствуют, сеанс автоматически удаляется.

Образец запроса

В следующем примере показан запрос к пользовательскому сеансу контейнера по идентификатору пользователя.

Перед отправкой запроса замените заполнители между <> квадратными скобками значениями, определенными для запроса.

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

Этот запрос пересылается в пользовательский сеанс контейнера с идентификатором идентификатора пользователя. Если сеанс еще не запущен, приложения контейнеров Azure выделяют сеанс из пула перед пересылкой запроса.

В примере контейнер сеанса получает запрос по http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>адресу.

Использование управляемого удостоверения

Управляемое удостоверение из идентификатора Microsoft Entra позволяет пользовательским пулам сеансов контейнеров и их сеансам получать доступ к другим защищенным ресурсам Microsoft Entra. Дополнительные сведения об управляемых удостоверениях в идентификаторе Microsoft Entra см. в разделе "Управляемые удостоверения" для ресурсов Azure.

Вы можете включить управляемые удостоверения для настраиваемых пулов сеансов контейнеров. Поддерживаются как назначаемые системой, так и назначаемые пользователем управляемые удостоверения.

Существует два способа использования управляемых удостоверений с настраиваемыми пулами сеансов контейнеров:

  • Проверка подлинности на вытягивание образа. Используйте управляемое удостоверение для проверки подлинности в реестре контейнеров для извлечения образа контейнера.

  • Доступ к ресурсам. Используйте управляемое удостоверение пула сеансов в сеансе для доступа к другим защищенным ресурсам Microsoft Entra. Из-за его последствий для безопасности эта возможность отключена по умолчанию.

    Внимание

    Если вы включите доступ к управляемому удостоверению в сеансе, любой код или программы, работающие в сеансе, может создавать маркеры Записи для управляемого удостоверения пула. Так как сеансы обычно выполняют ненадежный код, используйте эту функцию с осторожностью.

Чтобы включить управляемое удостоверение для настраиваемого пула сеансов контейнеров, используйте Azure Resource Manager.

Ведение журнала

Журналы консоли из пользовательских сеансов контейнеров доступны в рабочей области Azure Log Analytics, связанной с средой приложений контейнеров Azure в таблице с именем AppEnvSessionConsoleLogs_CL.

Выставление счетов

Счета за пользовательские сеансы контейнеров выставляются на основе ресурсов, потребляемых пулом сеансов. Дополнительные сведения см. в статье "Выставление счетов за приложения контейнеров Azure".

Следующие шаги