Delen via


Routering op basis van regels gebruiken met Azure Container Apps

In dit artikel leert u hoe u routering op basis van regels gebruikt met Azure Container Apps. Met regelgebaseerde routering maakt u een FQDN (Fully Qualified Domain Name) in uw container-apps-omgeving. Vervolgens gebruikt u regels om aanvragen voor deze FQDN naar verschillende container-apps te routeren, afhankelijk van het pad van elke aanvraag.

Vereiste voorwaarden

Configuratie

  1. Voer de volgende opdracht uit, dus meld u aan bij Azure vanuit de CLI.

    az login
    
  2. Voer de upgradeopdracht uit om ervoor te zorgen dat u de nieuwste versie van de CLI uitvoert.

    az upgrade
    

    Negeer eventuele waarschuwingen over modules die momenteel in gebruik zijn.

  3. Nu de huidige extensie of module is geïnstalleerd, registreert u de Microsoft.App en Microsoft.OperationalInsights naamruimten.

    az provider register --namespace Microsoft.App
    
    az provider register --namespace Microsoft.OperationalInsights
    

Omgevingsvariabelen maken

Maak de volgende omgevingsvariabelen.

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"

Container-apps maken

  1. Voer de volgende opdracht uit om uw eerste container-app te maken. Deze container-app maakt gebruik van de Container Apps quickstart-image.

    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. Voer de volgende opdracht uit om uw tweede container-app te maken. Deze container-app maakt gebruik van de ASP.NET quickstart-image.

    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. Http-routeconfiguratie maken.

    Maak het volgende bestand en sla het op als 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
    

    Deze configuratie definieert twee routeringsregels voor HTTP-verkeer.

    Vastgoed Beschrijving
    description Menselijk leesbaar label voor de regel
    routes.match.prefix URL-padvoorvoegsel dat moet overeenkomen. Bijvoorbeeld: /api.
    routes.action.prefixRewrite Met welk voorvoegsel het overeenkomende voorvoegsel moet worden vervangen voordat u het doorstuurt.
    targets.containerApp De naam van de container-app waar overeenkomende routeaanvraag wordt verzonden.

    Met deze regels kunnen verschillende paden in uw domein worden gerouteerd naar verschillende container-apps terwijl ook het aanvraagpad wordt gewijzigd voordat het de doel-app bereikt.

    Andere eigenschappen die niet worden vermeld die van invloed kunnen zijn op uw routes, zijn onder andere het volgende.

    Vastgoed Beschrijving
    route.match.path Exacte overeenkomstpaddefinitie.
    route.match.pathSeparatedPrefix Komt overeen met routes bij '/' grenzen in plaats van willekeurige tekst. Als u bijvoorbeeld de waarde instelt op /product, dan komt deze overeen met /product/1, maar niet met /product1.
    route.match.caseSensitive Hiermee bepaalt u of routepatronen overeenkomen met hoofdlettergevoeligheid.
    target.label Route naar een specifieke gelabelde revisie in een container-app.
    target.revision Route naar een specifieke revisie binnen een container-app.
  4. Voer de volgende opdracht uit om de HTTP-routeconfiguratie te maken.

    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
    

    De FQDN (Fully Qualified Domain Name) van uw HTTP-routeconfiguratie ziet er als volgt uit: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Zorg ervoor dat beide container-apps al bestaan.

  2. Maak het volgende Bicep-bestand en sla het op als 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. Implementeer het Bicep-bestand met de volgende opdracht:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. Zoek in de uitvoer outputs, die de FQDN (Fully Qualified Domain Name) van uw HTTP-routeconfiguratie bevat. Voorbeeld:

        "outputs": {
          "fqdn": {
            "type": "String",
            "value": "my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io"
          }
        },
    

HTTP-routeconfiguratie controleren

  1. Navigeer naar de FQDN van je HTTP-routeconfiguratie met het pad /app1.

    Voorbeeld: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.

    U ziet de quickstart-afbeelding van Container Apps.

  2. Navigeer naar de FQDN van je HTTP-routeconfiguratie met het pad /app2.

    Voorbeeld: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.

    U ziet de snelstartafbeelding van ASP.NET.

Hulpmiddelen opruimen

Als u deze toepassing niet wilt blijven gebruiken, voert u de volgende opdracht uit om de resourcegroep te verwijderen, samen met alle resources die in deze quickstart zijn gemaakt.

Waarschuwing

Met de volgende opdracht verwijdert u de opgegeven resourcegroep en alle resources erin. Als resources buiten het bereik van deze quickstart aanwezig zijn in de opgegeven resourcegroep, worden ze ook verwijderd.

az group delete --name my-container-apps