Compartir a través de


Uso del enrutamiento basado en reglas con Azure Container Apps (versión preliminar)

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.

Prerrequisitos

Configuración

  1. Ejecute el comando siguiente para iniciar sesión en Azure desde la CLI.

    az login
    
  2. Para asegurarse de que ejecuta la versión más reciente de la CLI, ejecute el comando de actualización.

    az upgrade
    

    Omita las advertencias sobre los módulos que están actualmente en uso.

    Instale o actualice la extensión azure Container Apps para la CLI.

    Si recibe errores sobre los parámetros que faltan al ejecutar comandos az containerapp en la CLI de Azure o cmdlets desde el módulo Az.App de PowerShell, asegúrese de que tiene instalada la versión más reciente de la extensión Azure Container Apps.

    az extension add --name containerapp --upgrade
    

    Nota:

    A partir de mayo de 2024, las extensiones de la CLI de Azure ya no habilitan las características en vista previa de forma predeterminada. Para acceder a las características de la versión preliminar de Container Apps, instale la extensión Container Apps con --allow-preview true.

    az extension add --name containerapp --upgrade --allow-preview true
    
  3. Ahora que está instalada la extensión o el módulo actual, registre los espacios de nombres Microsoft.App y Microsoft.OperationalInsights.

    az provider register --namespace Microsoft.App
    
    az 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

  1. 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.fqdn
    
  2. Ejecute 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.fqdn
    
  3. Cree 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-2
    

    Esta configuración define dos reglas de enrutamiento para el tráfico HTTP.

    Propiedad Descripción
    description Etiqueta legible para la regla
    routes.match.prefix Prefijo de ruta de dirección URL que debe coincidir. Por ejemplo: /api.
    routes.action.prefixRewrite Con qué reemplazar el prefijo coincidente antes de reenviarlo.
    targets.containerApp Nombre 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.path Definición de ruta de coincidencia exacta.
    route.match.pathSeparatedPrefix Coincide 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.caseSensitive Controla si los patrones de ruta coinciden o no con mayúsculas y minúsculas.
    target.label Enrutar a una revisión etiquetada específica dentro de una aplicación contenedora.
    target.revision Enrutar a una revisión específica dentro de una aplicación contenedora.
  4. 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.fqdn
    

    El nombre de dominio completo (FQDN) de la configuración de ruta HTTP tiene este aspecto: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Asegúrese de que ambas aplicaciones de contenedor ya existen.

  2. 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.fqdn
    
  3. Implemente el archivo de Bicep con el comando siguiente:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. En 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

  1. 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.

  2. 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