Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo, aprenderá a usar el enrutamiento basado en reglas con Azure Container Apps. Con el enrutamiento basado en reglas, se crea un nombre de dominio completo (FQDN) en el entorno de aplicaciones de contenedor. Después, use reglas para enrutar las solicitudes de este FQDN a diferentes aplicaciones de contenedor, en función de la ruta de acceso de cada solicitud.
Modelo de enrutamiento y autorización
Las configuraciones de rutas HTTP (httpRouteConfigs) operan a nivel de entorno de Aplicaciones Contenedor. Una ruta puede dirigirse a cualquier aplicación contenedor en el mismo entorno, independientemente de la configuración individual de entrada de la aplicación objetivo. Dado que el FQDN de la ruta se publica bajo el dominio del entorno, una ruta puede proporcionar un punto de entrada público que reenvíe las solicitudes a una aplicación contenedor que utilice entrada interna (external: false). Este comportamiento permite la composición de múltiples aplicaciones bajo un solo host.
Los permisos para configuraciones de rutas HTTP se asignan al entorno gestionado en lugar de a aplicaciones contenedores individuales. Crear, actualizar o eliminar una ruta requiere el Microsoft.App/managedEnvironments/httpRouteConfigs/write permiso sobre el entorno. No se requiere permiso adicional en la app de contenedor objetivo. Este comportamiento es coherente con que el entorno es un límite de confianza compartido, donde todas las aplicaciones contenedor en un entorno pertenecen al mismo cliente. Cualquier principal con un rol con alcance de entorno que incluya httpRouteConfigs/write permisos, como Contributor sobre el entorno, puede crear rutas que se dirijan a cualquier aplicación contenedor en ese entorno.
Importante
Una configuración de ruta HTTP puede exponer una aplicación contenedor que usa entrada interna (external: false) si configuras la aplicación como destino de ruta. La external: false configuración controla la visibilidad del propio FQDN de la app. Al usar esta configuración, el entorno no impide que la aplicación reciba tráfico a través de una ruta a nivel de entorno. Para mantener una aplicación contenedor inaccesible desde fuera del entorno, no la hagas referencia como destino en ninguna configuración de rutas HTTP. En su lugar, coloca la app en un entorno separado que no tenga rutas públicas, o utiliza controles a nivel de red para restringir el tráfico entrante.
Prerrequisitos
Cuenta de Azure con una suscripción activa.
- Si no tiene ninguna, puede crear una gratis.
Instale la CLI de Azure.
Configuración
Ejecute el comando siguiente para iniciar sesión en Azure desde la CLI.
az loginPara asegurarse de que ejecuta la versión más reciente de la CLI, ejecute el comando de actualización.
az upgradeOmita las advertencias sobre los módulos que están actualmente en uso.
Ahora que está instalada la extensión o el módulo actual, registre los espacios de nombres
Microsoft.AppyMicrosoft.OperationalInsights.az provider register --namespace Microsoft.Appaz provider register --namespace Microsoft.OperationalInsights
Creación de variables de entorno
Cree las siguientes variables de entorno.
CONTAINER_APP_1_NAME="my-container-app-1"
CONTAINER_APP_1_IMAGE="mcr.microsoft.com/k8se/quickstart:latest"
CONTAINER_APP_1_TARGET_PORT="80"
CONTAINER_APP_2_NAME="my-container-app-2"
CONTAINER_APP_2_IMAGE="mcr.microsoft.com/dotnet/samples:aspnetapp"
CONTAINER_APP_2_TARGET_PORT="8080"
LOCATION="eastus"
RESOURCE_GROUP="my-container-apps"
ENVIRONMENT_NAME="my-container-apps-env"
ROUTE_CONFIG_NAME="my-route-config"
Creación de aplicaciones de contenedor
Ejecute el siguiente comando para crear la primera aplicación contenedora. Esta aplicación contenedora usa la imagen de inicio rápido de Container Apps.
az containerapp up \ --name $CONTAINER_APP_1_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --environment $ENVIRONMENT_NAME \ --image $CONTAINER_APP_1_IMAGE \ --target-port $CONTAINER_APP_1_TARGET_PORT \ --ingress external \ --query properties.configuration.ingress.fqdnEjecute el siguiente comando para crear la segunda aplicación contenedora. Esta aplicación contenedora usa la imagen de inicio rápido de ASP.NET.
az containerapp up \ --name $CONTAINER_APP_2_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --environment $ENVIRONMENT_NAME \ --image $CONTAINER_APP_2_IMAGE \ --target-port $CONTAINER_APP_2_TARGET_PORT \ --ingress external \ --query properties.configuration.ingress.fqdnCree la configuración de ruta HTTP.
Cree el siguiente archivo y guárdelo como
routing.yml.rules: - description: App 1 rule routes: - match: prefix: /app1 action: prefixRewrite: / targets: - containerApp: my-container-app-1 - description: App 2 rule routes: - match: path: /app2 action: prefixRewrite: / - match: path: / targets: - containerApp: my-container-app-2Esta configuración define dos reglas de enrutamiento para el tráfico HTTP.
Nota:
El orden de las reglas de enrutamiento es importante.
Los prefijos más específicos deben ser antes de prefijos menos específicos.
Por ejemplo, si la primera regla coincide con el prefijo /api, que se usará incluso si la segunda regla usa el prefijo /api/v1.
Propiedad Descripción descriptionEtiqueta legible para la regla routes.match.prefixPrefijo de ruta de dirección URL que debe coincidir. Por ejemplo: /api.routes.action.prefixRewriteCon qué reemplazar el prefijo coincidente antes de reenviarlo. targets.containerAppNombre de la aplicación contenedora donde se envía la solicitud de ruta coincidente. Estas reglas permiten que diferentes rutas en tu dominio se enruten a diferentes aplicaciones de contenedor, al mismo tiempo que modifican la ruta de la solicitud antes de llegar a la aplicación de destino.
Otras propiedades no enumeradas que pueden afectar a las rutas incluyen lo siguiente.
Propiedad Descripción route.match.pathDefinición de ruta de coincidencia exacta. route.match.pathSeparatedPrefixCoincide con las rutas en los límites "/" en lugar de cualquier texto. Por ejemplo, si establece el valor en /product, coincidirá con/product/1, pero no con/product1.route.match.caseSensitiveControla si los patrones de ruta coinciden o no con mayúsculas y minúsculas. target.labelEnrutar a una revisión etiquetada específica dentro de una aplicación contenedora. target.revisionEnrutar a una revisión específica dentro de una aplicación contenedora. Ejecute el siguiente comando para crear la configuración de ruta HTTP.
az containerapp env http-route-config create \ --http-route-config-name $ROUTE_CONFIG_NAME \ --resource-group $RESOURCE_GROUP \ --name $ENVIRONMENT_NAME \ --yaml routing.yml \ --query properties.fqdnEl nombre de dominio completo (FQDN) de la configuración de ruta HTTP tiene este aspecto:
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io
Asegúrese de que ambas aplicaciones de contenedor ya existen.
Cree el siguiente archivo Bicep y guárdelo como
routing.bicep.resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2024-10-02-preview' = { name: 'my-container-apps-env' location: 'eastus' tags: {} properties: { workloadProfiles: [ { workloadProfileType: 'Consumption' name: 'Consumption' } ] } } resource httpRouteConfig 'Microsoft.App/managedEnvironments/httpRouteConfigs@2024-10-02-preview' = { parent: containerAppsEnvironment name: 'my-route-config' location: 'eastus' properties: { rules: [ { description: 'App 1 rule' routes: [ { match: { prefix: '/app1' } action: { prefixRewrite: '/' } } ] targets: [ { containerApp: 'my-container-app-1' } ] } { description: 'App 2 rule' routes: [ { match: { path: '/app2' } action: { prefixRewrite: '/' } } { match: { path: '/' } } ] targets: [ { containerApp: 'my-container-app-2' } ] } ] } } output fqdn string = httpRouteConfig.properties.fqdnImplemente el archivo de Bicep con el comando siguiente:
az deployment group create ` --name $ROUTE_CONFIG_NAME ` --resource-group $RESOURCE_GROUP ` --template-file routing.bicepEn la salida, busque
outputs, que contiene el nombre de dominio completo (FQDN) de la configuración de ruta HTTP. Por ejemplo:"outputs": { "fqdn": { "type": "String", "value": "my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io" } },
Comprobación de la configuración de rutas HTTP
Vaya al FQDN de configuración de ruta HTTP con la ruta de acceso
/app1.Por ejemplo:
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.Verá la imagen de inicio rápido de Container Apps.
Vaya al FQDN de configuración de ruta HTTP con la ruta de acceso
/app2.Por ejemplo:
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.Verá la imagen de inicio rápido ASP.NET.
Limpieza de recursos
Si no va a seguir usando esta aplicación, ejecute el siguiente comando para eliminar el grupo de recursos junto con todos los recursos creados en el inicio rápido.
Precaución
El siguiente comando elimina el grupo de recursos especificado y todos los recursos contenidos en él. Si los recursos fuera del ámbito de este inicio rápido existen en el grupo de recursos especificado, también se eliminarán.
az group delete --name my-container-apps