Udostępnij przez


Używanie routingu opartego na regułach w usłudze Azure Container Apps

Z tego artykułu dowiesz się, jak używać routingu opartego na regułach w usłudze Azure Container Apps. W przypadku routingu opartego na regułach należy utworzyć w pełni kwalifikowaną nazwę domeny (FQDN) w środowisku aplikacji kontenera. Następnie użyjesz reguł, aby kierować żądania dla tego FQDN do różnych aplikacji kontenerowych, w zależności od ścieżki każdego żądania.

Wymagania wstępne

Konfiguracja

  1. Uruchom następujące polecenie, aby zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia.

    az login
    
  2. Aby upewnić się, że używasz najnowszej wersji interfejsu wiersza polecenia, uruchom polecenie uaktualniania.

    az upgrade
    

    Ignoruj wszelkie ostrzeżenia dotyczące aktualnie używanych modułów.

  3. Teraz, gdy bieżące rozszerzenie lub moduł jest zainstalowane, zarejestruj przestrzenie nazw Microsoft.App oraz Microsoft.OperationalInsights.

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

Tworzenie zmiennych środowiskowych

Utwórz następujące zmienne środowiskowe.

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"

Tworzenie aplikacji kontenera

  1. Uruchom następujące polecenie, aby utworzyć pierwszą aplikację kontenera. Ta aplikacja kontenera używa obrazu szybkiego startu usługi 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. Uruchom następujące polecenie, aby utworzyć drugą aplikację kontenera. Ta aplikacja kontenera używa obrazu szybkiego startu 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. Utwórz konfigurację trasy HTTP.

    Utwórz następujący plik i zapisz go jako 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
    

    Ta konfiguracja definiuje dwie reguły routingu dla ruchu HTTP.

    Majątek Opis
    description Czytelna dla człowieka etykieta reguły
    routes.match.prefix Prefiks ścieżki adresu URL zgodny. Na przykład /api.
    routes.action.prefixRewrite Co zastąpić dopasowany prefiks przed przekazaniem dalej.
    targets.containerApp Nazwa aplikacji kontenerowej, do której wysyłane są pasujące żądania dotyczace tras.

    Te reguły umożliwiają kierowanie różnych ścieżek do różnych aplikacji kontenera podczas modyfikowania ścieżki żądania przed dotarciem do aplikacji docelowej.

    Inne właściwości, które nie są wymienione, które mogą mieć wpływ na trasy, obejmują następujące.

    Majątek Opis
    route.match.path Dokładna definicja ścieżki dopasowania.
    route.match.pathSeparatedPrefix Dopasuje trasy w granicach "/", a nie do żadnego tekstu. Na przykład, jeśli ustawisz wartość na /product, to będzie ona zgodna z wartością /product/1, ale nie z /product1.
    route.match.caseSensitive Określa, czy wzorce tras są zgodne z poufnością wielkości liter.
    target.label Kierowanie do konkretnej poprawki oznaczonej etykietą wewnątrz aplikacji kontenera.
    target.revision Przejście do określonej wersji w aplikacji kontenerowej.
  4. Uruchom następujące polecenie, aby utworzyć konfigurację trasy 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
    

    W pełni kwalifikowana nazwa domeny (FQDN) konfiguracji Twojej trasy HTTP wygląda następująco: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Upewnij się, że obie aplikacje kontenerowe są już istniejące.

  2. Utwórz następujący plik Bicep i zapisz go jako 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. Wdróż plik Bicep za pomocą następującego polecenia:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. W danych wyjściowych znajdź outputs, który zawiera w pełni kwalifikowaną nazwę domeny (FQDN) konfiguracji trasy HTTP. Na przykład:

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

Weryfikowanie konfiguracji tras HTTP

  1. Przejdź do konfiguracji FQDN trasy HTTP poprzez ścieżkę /app1.

    Na przykład: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.

    Zobaczysz obraz przewodnika szybkiego startu dla usługi Container Apps.

  2. Przejdź do konfiguracji FQDN trasy HTTP poprzez ścieżkę /app2.

    Na przykład: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.

    Zostanie wyświetlony obraz szybkiego startu ASP.NET.

Czyszczenie zasobów

Jeśli nie zamierzasz nadal korzystać z tej aplikacji, uruchom następujące polecenie, aby usunąć grupę zasobów wraz ze wszystkimi zasobami utworzonymi w tym przewodniku szybkiego startu.

Ostrożność

Następujące polecenie usuwa określoną grupę zasobów i wszystkie zawarte w niej zasoby. Jeśli zasoby niezwiązane z zakresem tego przewodnika szybkiego startu istnieją w określonej grupie zasobów, zostaną również usunięte.

az group delete --name my-container-apps