Compartir a través de


Sesiones de contenedor personalizadas de Azure Container Apps

Además del intérprete de código integrado que proporcionan las sesiones dinámicas de Azure Container Apps, también puede usar contenedores personalizados para definir sus propios espacios aislados de sesión.

Usos para sesiones de contenedor personalizadas

Los contenedores personalizados permiten crear soluciones adaptadas a sus necesidades. Permiten ejecutar código o aplicaciones en entornos que son rápidos y efímeros y ofrecen espacios aislados seguros con Hyper-V. Además, se pueden configurar con aislamiento de red opcional. Estos son algunos ejemplos:

  • Intérpretes de código: si necesita ejecutar código que no es de confianza en espacios aislados seguros por un lenguaje no compatible con el intérprete integrado o necesita un control total sobre el entorno del intérprete de código.

  • Ejecución aislada: cuando necesite ejecutar aplicaciones en escenarios hostiles y multiinquilino en los que cada inquilino o usuario tenga su propio entorno de espacio aislado. Estos entornos están aislados entre sí y de la aplicación host. Algunos ejemplos incluyen aplicaciones que ejecutan código proporcionado por el usuario, código que concede al usuario final acceso a un shell basado en la nube, agentes de IA y entornos de desarrollo.

Uso de sesiones de contenedor personalizadas

Para usar sesiones de contenedor personalizadas, primero debe crear un grupo de sesiones con una imagen de contenedor personalizada. Azure Container Apps inicia automáticamente contenedores en sus propios espacios aislados de Hyper-V mediante la imagen proporcionada. Una vez que se inicia el contenedor, está disponible para el grupo de sesiones.

Cuando la aplicación solicita una sesión, se asigna instantáneamente una instancia del grupo. La sesión permanece activa hasta que entra en un estado inactivo, que luego se detiene y destruye automáticamente.

Creación de un grupo de sesiones de contenedor personalizado

Para crear un grupo de sesiones de contenedor personalizado, debe proporcionar una imagen de contenedor y una configuración de grupo.

Se realiza la invocación o la comunicación con cada sesión mediante solicitudes HTTP. El contenedor personalizado debe exponer un servidor HTTP en un puerto que especifique para responder a estas solicitudes.

Para crear un grupo de sesiones de contenedor personalizado mediante la CLI de Azure, asegúrese de tener las versiones más recientes de la CLI de Azure y la extensión Azure Container Apps con los siguientes comandos:

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

Los grupos de sesiones de contenedor personalizados requieren un perfil de carga de trabajo habilitado para el entorno de Azure Container Apps. Si no tiene un entorno, use el comando az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles para crear uno.

Utilice el comando az containerapp sessionpool create para crear un grupo de sesiones de contenedor personalizado.

En el ejemplo siguiente se crea un grupo de sesiones denominado my-session-pool con una imagen de contenedor personalizada myregistry.azurecr.io/my-container-image:1.0.

Antes de enviar la solicitud, reemplace los marcadores de posición entre los corchetes <> por los valores adecuados para el grupo de sesiones y el identificador de sesión.

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>

Este comando crea un grupo de sesiones con la siguiente configuración:

Parámetro Valor Descripción
--name my-session-pool Nombre del grupo de sesiones.
--resource-group my-resource-group Grupo de recursos que contiene el grupo de sesiones.
--environment my-environment Nombre de id. de recurso del entorno de aplicación de contenedor.
--container-type CustomContainer Tipo de contenedor del grupo de sesiones. Debe ser CustomContainer para sesiones de contenedor personalizadas.
--image myregistry.azurecr.io/my-container-image:1.0 Imagen de contenedor que se va a usar para el grupo de sesiones.
--registry-server myregistry.azurecr.io Nombre de host del servidor del registro de contenedor.
--registry-username my-username Nombre de usuario que va a iniciar sesión en el registro de contenedor.
--registry-password my-password Contraseña para iniciar sesión en el registro de contenedor.
--cpu 0.25 CPU necesaria en núcleos.
--memory 0.5Gi Memoria necesaria.
--target-port 80 Puerto de sesión usado para el tráfico de entrada.
--cooldown-period 300 Número de segundos que una sesión puede estar inactiva antes de que finalice la sesión. El período de inactividad se restablece cada vez que se llama a la API de la sesión. El valor debe estar entre 300 y 3600.
--network-status Designa si se permite el tráfico de red saliente desde la sesión. Los valores válidos son EgressDisabled (predeterminado) y EgressEnabled.
--max-sessions 10 Número máximo de sesiones que pueden asignarse al mismo tiempo.
--ready-sessions 5 Número de sesiones de destino que están listas en el grupo de sesiones todo el tiempo. Aumente este número si las sesiones se asignan más rápido de lo que el grupo se reabastece.
--env-vars "key1=value1" "key2=value2" Variables de entorno para establecer en el contenedor.
--location "Supported Location" Ubicación del grupo de sesiones.

Para comprobar el estado del grupo de sesiones, use el comando az containerapp sessionpool show:

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

Para actualizar el grupo de sesiones, use el comando az containerapp sessionpool update.

Importante

Si la sesión se usa para ejecutar código que no es de confianza, no incluya información ni datos a los que no quiera que acceda el código que no es de confianza. Supongamos que el código es malintencionado y tiene acceso completo al contenedor, incluidas sus variables de entorno, secretos y archivos.

Almacenamiento de imágenes en caché

Cuando se crea o actualiza un grupo de sesiones, Azure Container Apps almacena en caché la imagen de contenedor en el grupo. Este almacenamiento en caché ayuda a acelerar el proceso de creación de sesiones.

Los cambios en la imagen no se reflejan automáticamente en las sesiones. Para actualizar la imagen, actualice el grupo de sesiones con una nueva etiqueta de imagen. Use una etiqueta única para cada actualización de imagen a fin de asegurarse de que se extraiga la nueva imagen.

Trabajar con sesiones

La aplicación interactúa con una sesión mediante la API de administración del grupo de sesiones.

Un punto de conexión de administración de grupos para sesiones de contenedor personalizadas sigue este formato: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

Para recuperar el punto de conexión de administración de un grupo de sesiones, use el comando az containerapp sessionpool show:

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

Todas las solicitudes al punto de conexión de administración del grupo deben incluir un encabezado Authorization con un token de portador. Para obtener información sobre cómo autenticar con la API de administración de grupo, lea Autenticación.

Cada solicitud de API también debe incluir el parámetro de cadena de consulta identifier con el identificador de sesión. Este identificador de sesión único permite a la aplicación interactuar con sesiones específicas. Para obtener más información sobre los identificadores de sesión, consulte Identificadores de sesión.

Importante

El identificador de sesión es información confidencial que requiere un proceso seguro al crear y administrar su valor. Para proteger este valor, la aplicación debe asegurarse de que cada usuario o inquilino solo tiene acceso a sus propias sesiones. Si no se protege el acceso a las sesiones, se puede producir un acceso incorrecto o no autorizado a los datos almacenados en las sesiones de los usuarios. Para obtener más información, consulte Identificadores de sesión

Reenvío de solicitudes al contenedor de la sesión:

Todo lo que se encuentra en la ruta de acceso que sigue al punto de conexión de administración del grupo base se reenvía al contenedor de la sesión.

Por ejemplo, si realiza una llamada a <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile, la solicitud se enruta al contenedor de la sesión en 0.0.0.0:<TARGET_PORT>/api/uploadfile.

Interacción continua con la sesión:

Puede seguir realizando solicitudes a la misma sesión. Si no hay ninguna solicitud a la sesión durante más tiempo que el período de recuperación, la sesión se elimina automáticamente.

Solicitud de ejemplo

En el ejemplo siguiente se muestra una solicitud a una sesión de contenedor personalizada por un identificador de usuario.

Antes de enviar la solicitud, reemplace los marcadores de posición entre los corchetes <> por valores específicos de la solicitud.

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

Esta solicitud se reenvía a la sesión de contenedor personalizada con el identificador del id. del usuario. Si la sesión aún no se está ejecutando, Azure Container Apps asigna una sesión del grupo antes de reenviar la solicitud.

En el ejemplo, el contenedor de la sesión recibe la solicitud en http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.

Uso de una identidad administrada

Una identidad administrada de Microsoft Entra ID permite que los grupos de sesiones de contenedor personalizados y sus sesiones accedan a otros recursos protegidos por Microsoft Entra. Para obtener más información sobre las identidades administradas en Microsoft Entra ID, consulte Identidades administradas para recursos de Azure.

Puede habilitar identidades administradas para los grupos de sesiones de contenedor personalizados. Tanto las identidades administradas asignadas por el usuario y por el sistema están admitidas.

Hay dos maneras de usar identidades administradas con grupos de sesiones de contenedor personalizados:

  • Autenticación de extracción de imágenes: use la identidad administrada para autenticarse con el registro de contenedor para extraer la imagen de contenedor.

  • Acceso a recursos: use la identidad administrada del grupo de sesiones en una sesión para acceder a otros recursos protegidos de Microsoft Entra. Debido a sus implicaciones de seguridad, esta funcionalidad está deshabilitada de manera predeterminada.

    Importante

    Si habilita el acceso a la identidad administrada en una sesión, cualquier código o programa que se ejecute en la sesión puede crear tokens de Entra para la identidad administrada del grupo. Como las sesiones suelen ejecutar código que no es de confianza, use esta característica con precaución.

A fin de habilitar la identidad administrada para un grupo de sesiones de contenedor personalizado, use Azure Resource Manager.

Registro

Los registros de consola de las sesiones de contenedor personalizadas están disponibles en el área de trabajo de Azure Log Analytics asociada al entorno de Azure Container Apps en una tabla denominada AppEnvSessionConsoleLogs_CL.

Facturación

Las sesiones de contenedor personalizadas se facturan en función de los recursos consumidos por el grupo de sesiones. Para más información, consulte Facturación de Azure Container Apps.

Pasos siguientes