Freigeben über


Verwenden des regelbasierten Routings mit Azure-Container-Apps

In diesem Artikel erfahren Sie, wie Sie regelbasiertes Routing mit Azure-Container-Apps verwenden. Mit regelbasiertem Routing erstellen Sie einen vollqualifizierten Domänennamen (FQDN) in Ihrer Container-Apps-Umgebung. Anschließend verwenden Sie Regeln, um Anforderungen für diesen FQDN abhängig vom Pfad jeder Anforderung an verschiedene Container-Apps weiterzuleiten.

Voraussetzungen

Konfiguration

  1. Führen Sie den folgenden Befehl aus, damit Sie sich über die CLI bei Azure anmelden.

    az login
    
  2. Verwenden Sie den Upgradebefehl, um sicherzustellen, dass Sie die neueste Version der CLI ausführen.

    az upgrade
    

    Ignorieren Sie alle Warnungen zu derzeit verwendeten Modulen.

  3. Nachdem die aktuelle Erweiterung oder das aktuelle Modul installiert ist, registrieren Sie nun die Namespaces Microsoft.App und Microsoft.OperationalInsights.

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

Erstellen von Umgebungsvariablen

Erstellen Sie die folgenden Umgebungsvariablen.

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"

Erstellen von Container-Apps

  1. Führen Sie den folgenden Befehl aus, um Ihre erste Container-App zu erstellen. Diese Container-App verwendet das Schnellstartbild „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. Führen Sie den folgenden Befehl aus, um Ihre zweite Container-App zu erstellen. Diese Container-App verwendet das ASP.NET Schnellstartimage.

    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. Erstellen Sie die HTTP-Routenkonfiguration.

    Erstellen Sie die folgende Datei, und speichern Sie sie unter 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
    

    Diese Konfiguration definiert zwei Routingregeln für HTTP-Datenverkehr.

    Eigentum BESCHREIBUNG
    description Lesbare Bezeichnung für die Regel
    routes.match.prefix URL-Pfadpräfix, das übereinstimmen soll. Beispiel: /api.
    routes.action.prefixRewrite Wodurch das übereinstimmende Präfix vor der Weiterleitung ersetzt werden soll.
    targets.containerApp Der Name der Container-App, in der übereinstimmende Routenanforderungen gesendet werden.

    Mit diesen Regeln können unterschiedliche Pfade in Ihrer Domäne an verschiedene Container-Apps weitergeleitet werden, und der Anfragepfad kann gleichzeitig geändert werden, bevor er die Ziel-App erreicht.

    Andere nicht aufgeführte Eigenschaften, die sich auf Ihre Routen auswirken können, umfassen Folgendes.

    Eigentum BESCHREIBUNG
    route.match.path Genaue Übereinstimmungspfaddefinition.
    route.match.pathSeparatedPrefix Entspricht Routen an „/“-Begrenzungen anstelle von Text. Wenn Sie z. B. den Wert auf /product" festlegen, wird er mit /product/1, aber nicht /product1übereinstimmen.
    route.match.caseSensitive Steuert, ob Routenmuster mit Berücksichtigung der Groß- und Kleinschreibung übereinstimmen.
    target.label Leiten Sie an eine bestimmte beschriftete Revision in einer Containeranwendung weiter.
    target.revision Leiten Sie an eine bestimmte Revision in einer Containeranwendung weiter.
  4. Führen Sie den folgenden Befehl aus, um die HTTP-Routenkonfiguration zu erstellen.

    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
    

    Der vollqualifizierte Domänenname (FQDN) Ihrer HTTP-Routenkonfiguration sieht wie im folgenden Beispiel aus: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Stellen Sie sicher, dass beide Container-Apps bereits vorhanden sind.

  2. Erstellen Sie die folgende Bicep-Datei, und speichern Sie sie unter 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. Stellen Sie die Bicep-Datei mit dem folgenden Befehl bereit:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. Suchen Sie outputs in der Ausgabe, die den vollqualifizierten Domänennamen (FQDN) Ihrer HTTP-Routenkonfiguration enthält. Beispiel:

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

Überprüfen der HTTP-Routenkonfiguration

  1. Navigieren Sie mit dem Pfad /app1 zum FQDN der HTTP-Routenkonfiguration.

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

    Das Schnellstartbild „Container Apps“ wird angezeigt.

  2. Navigieren Sie mit dem Pfad /app2 zum FQDN der HTTP-Routenkonfiguration.

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

    Das Schnellstartbild ASP.NET wird angezeigt.

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht weiter verwenden möchten, führen Sie den folgenden Befehl aus, um die Ressourcengruppe zusammen mit allen in dieser Schnellstartanleitung erstellten Ressourcen zu löschen.

Vorsicht

Mit dem folgenden Befehl werden die angegebene Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht. Wenn Ressourcen außerhalb des Bereichs dieser Schnellstartanleitung in der angegebenen Ressourcengruppe vorhanden sind, werden sie ebenfalls gelöscht.

az group delete --name my-container-apps