Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Routing- und Autorisierungsmodell
HTTP-Routenkonfigurationen (httpRouteConfigs) laufen auf Container-Apps-Umgebungsebene. Eine Route kann jede Container-App in derselben Umgebung anvisieren, unabhängig von der individuellen Ingress-Einstellung der Ziel-App. Da das FQDN der Route unter der Domäne der Umgebung veröffentlicht wird, kann eine Route einen öffentlichen Einstiegspunkt bereitstellen, der Anfragen an eine Container-App weiterleitet, die interne Ingress (external: false) verwendet. Dieses Verhalten ermöglicht die Zusammensetzung mehrerer Apps unter einem Host.
Die Berechtigungen für HTTP-Routenkonfigurationen sind auf die verwaltete Umgebung beschränkt und nicht auf einzelne Container-Apps. Das Erstellen, Aktualisieren oder Löschen einer Route erfordert die Erlaubnis Microsoft.App/managedEnvironments/httpRouteConfigs/write der Umgebung. In der Target-Container-App ist keine zusätzliche Berechtigung erforderlich. Dieses Verhalten entspricht der Umgebung, die eine gemeinsame Vertrauensgrenze ist, bei der alle Container-Apps in einer Umgebung demselben Kunden gehören. Jeder Principal mit einer umgebungsbezogenen Rolle, die Berechtigungen beinhaltet httpRouteConfigs/write , wie zum Beispiel Contributor in der Umgebung, kann Routen erstellen, die jede Container-App in dieser Umgebung ansprechen.
Important
Eine HTTP-Route-Konfiguration kann eine Container-App offenlegen, die interne Ingress (external: false) verwendet, wenn man die App als Routenziel konfiguriert. Die Einstellung external: false steuert die Sichtbarkeit des eigenen FQDN der App. Mit dieser Konfiguration verhindert die Umgebung nicht, dass die App den Datenverkehr über eine umgebungsebene Route empfängt. Um eine Container-App von außerhalb der Umgebung unerreichbar zu halten, verweise sie in keiner HTTP-Routenkonfiguration als Ziel. Stattdessen sollte die App in eine separate Umgebung ohne öffentliche Routen platziert werden oder Netzwerksteuerungen genutzt werden, um eingehenden Verkehr zu begrenzen.
Voraussetzungen
Azure-Konto mit einem aktiven Abonnement.
- Falls Sie keins haben, können Sie kostenlos eins erstellen.
Installieren Sie die Azure CLI.
Konfiguration
Führen Sie den folgenden Befehl aus, damit Sie sich über die CLI bei Azure anmelden.
az loginVerwenden Sie den Upgradebefehl, um sicherzustellen, dass Sie die neueste Version der CLI ausführen.
az upgradeIgnorieren Sie alle Warnungen zu derzeit verwendeten Modulen.
Nachdem die aktuelle Erweiterung oder das aktuelle Modul installiert ist, registrieren Sie nun die Namespaces
Microsoft.AppundMicrosoft.OperationalInsights.az provider register --namespace Microsoft.Appaz 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
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.fqdnFü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.fqdnErstellen 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-2Diese Konfiguration definiert zwei Routingregeln für HTTP-Datenverkehr.
Hinweis
Die Reihenfolge der Routingregeln ist wichtig.
Spezifischere Präfixe müssen vor weniger spezifischen Präfixen sein.
Wenn die erste Regel beispielsweise mit dem Präfix /api übereinstimmt, wird dies auch dann verwendet, wenn die zweite Regel das Präfix "/api/v1" verwendet.
Eigentum BESCHREIBUNG descriptionLesbare Bezeichnung für die Regel routes.match.prefixURL-Pfadpräfix, das übereinstimmen soll. Beispiel: /api.routes.action.prefixRewriteWodurch das übereinstimmende Präfix vor der Weiterleitung ersetzt werden soll. targets.containerAppDer 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.pathGenaue Übereinstimmungspfaddefinition. route.match.pathSeparatedPrefixEntspricht 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.caseSensitiveSteuert, ob Routenmuster mit Berücksichtigung der Groß- und Kleinschreibung übereinstimmen. target.labelLeiten Sie an eine bestimmte beschriftete Revision in einer Containeranwendung weiter. target.revisionLeiten Sie an eine bestimmte Revision in einer Containeranwendung weiter. 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.fqdnDer vollqualifizierte Domänenname (FQDN) Ihrer HTTP-Routenkonfiguration sieht wie im folgenden Beispiel aus:
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io
Stellen Sie sicher, dass beide Container-Apps bereits vorhanden sind.
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.fqdnStellen Sie die Bicep-Datei mit dem folgenden Befehl bereit:
az deployment group create ` --name $ROUTE_CONFIG_NAME ` --resource-group $RESOURCE_GROUP ` --template-file routing.bicepSuchen Sie
outputsin 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
Navigieren Sie mit dem Pfad
/app1zum FQDN der HTTP-Routenkonfiguration.Beispiel:
my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.Das Schnellstartbild „Container Apps“ wird angezeigt.
Navigieren Sie mit dem Pfad
/app2zum 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