Använda regelbaserad routning med Azure Container Apps

I den här artikeln får du lära dig hur du använder regelbaserad routning med Azure Container Apps. Med regelbaserad routning skapar du ett fullständigt domännamn (FQDN) i containerappmiljön. Sedan använder du regler för att dirigera begäranden för det här fullständiga domännamnet till olika containerappar, beroende på sökvägen för varje begäran.

Rutt- och auktorisationsmodell

HTTP-ruttkonfigurationer (httpRouteConfigs) fungerar på Container Apps-miljönivå. En rutt kan rikta sig mot vilken containerapp som helst i samma miljö, oavsett målappens individuella ingångsinställning. Eftersom ruttens FQDN publiceras under miljöns domän kan en rutt tillhandahålla en offentlig ingångspunkt som vidarebefordrar förfrågningar till en containerapp som använder intern ingång (external: false). Detta beteende möjliggör sammansättning av flera appar under en och samma värd.

Behörigheter för HTTP-ruttkonfigurationer är begränsade till den hanterade miljön snarare än till enskilda containerappar. Att skapa, uppdatera eller ta bort en rutt kräver Microsoft.App/managedEnvironments/httpRouteConfigs/write tillstånd från miljön. Ingen extra behörighet krävs i målcontainerappen. Detta beteende är förenligt med att miljön är en delad förtroendegräns, där alla containerappar i en miljö tillhör samma kund. Varje principal med en miljöbegränsad roll som inkluderar httpRouteConfigs/write behörighet, såsom Bidragsgivare i miljön, kan skapa rutter som riktar sig mot vilken containerapp som helst i den miljön.

Important

En HTTP-ruttkonfiguration kan exponera en containerapp som använder intern ingress (external: false) om du konfigurerar appen som ett ruttmål. Inställningen external: false styr synligheten av appens egen FQDN. Genom att använda denna konfiguration hindrar inte miljön appen från att ta emot trafik via en miljönivårutt. För att hålla en containerapp otillgänglig utanför miljön, referera inte till den som mål i någon HTTP-ruttkonfiguration. Placera istället appen i en separat miljö utan publika rutter, eller använd nätverkskontroller för att begränsa inkommande trafik.

Förutsättningar

Inställningar

  1. Kör följande kommando så logga in på Azure från CLI.

    az login
    
  2. Kör uppgraderingskommandot för att säkerställa att du kör den senaste versionen av CLI.

    az upgrade
    

    Ignorera eventuella varningar om moduler som för närvarande används.

  3. Nu när det aktuella tillägget eller modulen har installerats registrerar du Microsoft.App namnrymderna och Microsoft.OperationalInsights .

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

Skapa miljövariabler

Skapa följande miljövariabler.

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"

Skapa containerappar

  1. Kör följande kommando för att skapa din första containerapp. Den här containerappen använder Container Apps quickstart-avbildningen.

    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. Kör följande kommando för att skapa din andra containerapp. Den här containerappen använder snabbstartsavbildningen 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. Skapa HTTP-vägkonfiguration.

    Skapa följande fil och spara den som 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
    

    Den här konfigurationen definierar två routningsregler för HTTP-trafik.

    Anmärkning

    Ordningen på routningsreglerna är viktig.

    Mer specifika prefix måste föregå mindre specifika prefix.

    Om den första regeln till exempel matchar prefixet /api används den även om den andra regeln använder prefixet /api/v1.

    Fastighet Beskrivning
    description Etikett som kan läsas av människor för regeln
    routes.match.prefix URL-sökvägsprefix som ska matchas. Till exempel /api.
    routes.action.prefixRewrite Vad du ska ersätta det matchade prefixet med innan du vidarebefordrar.
    targets.containerApp Namnet på containerappen där matchande routningsbegäran skickas.

    Dessa regler tillåter att olika sökvägar i domänen dirigeras till olika containerappar samtidigt som sökvägen för begäran ändras innan den når målappen.

    Andra faktorer som inte är listade som kan påverka dina rutter är följande.

    Fastighet Beskrivning
    route.match.path Exakt matchningssökvägsdefinition.
    route.match.pathSeparatedPrefix Matchar rutter vid '/'-gränser i stället för vid någon text. Om du till exempel anger värdet till /productmatchar det på /product/1, men inte /product1.
    route.match.caseSensitive Styr om routningsmönster matchar skiftlägeskänsligheten eller inte.
    target.label Dirigera till en specifik märkt revision i en containerapp.
    target.revision Dirigera till en specifik revision i en containerapp.
  4. Kör följande kommando för att skapa HTTP-routningskonfigurationen.

    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
    

    Http-routningskonfigurationens fullständigt kvalificerade domännamn (FQDN) ser ut så här: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Kontrollera att båda containerapparna redan finns.

  2. Skapa följande Bicep-fil och spara den som 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. Distribuera Bicep-filen med följande kommando:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. I utdata letar du upp outputs, som innehåller http-routningskonfigurationens fullständigt kvalificerade domännamn (FQDN). Till exempel:

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

Verifiera konfiguration av HTTP-rutt

  1. Navigera till http-routningskonfigurationens FQDN med sökvägen /app1.

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

    Du ser Container Apps snabbstartsavbildning.

  2. Navigera till http-routningskonfigurationens FQDN med sökvägen /app2.

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

    Du ser ASP.NET snabbstartsbild.

Rensa resurser

Om du inte fortsätter att använda det här programmet kör du följande kommando för att ta bort resursgruppen tillsammans med alla resurser som skapats i den här snabbstarten.

Försiktighet

Följande kommando tar bort den angivna resursgruppen och alla resurser som ingår i den. Om det finns resurser utanför omfånget för den här snabbstarten i den angivna resursgruppen tas de också bort.

az group delete --name my-container-apps