Использование маршрутизации на основе правил с помощью приложений контейнеров Azure

Из этой статьи вы узнаете, как использовать маршрутизацию на основе правил с приложениями контейнеров Azure. При маршрутизации на основе правил вы создаете полное доменное имя (FQDN) в среде приложений контейнеров. Затем вы используете правила для маршрутизации запросов для этого полного доменного имени в разные приложения-контейнеры в зависимости от пути каждого запроса.

Предпосылки

Настройка

  1. Выполните следующую команду, чтобы войти в Azure с помощью интерфейса командной строки.

    az login
    
  2. Чтобы убедиться, что вы используете последнюю версию интерфейса командной строки, выполните команду обновления.

    az upgrade
    

    Игнорируйте предупреждения об используемых модулях.

  3. Теперь, когда установлено текущее расширение или модуль, зарегистрируйте пространства имен Microsoft.App и Microsoft.OperationalInsights.

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

Создание переменной среды

Создайте следующие переменные среды.

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"

Создание приложений-контейнеров

  1. Выполните следующую команду, чтобы создать первое приложение контейнера. Это контейнерное приложение использует стартовый образ для контейнерных приложений.

    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. Выполните следующую команду, чтобы создать второе приложение контейнера. Это контейнерное приложение использует образ 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. Создайте конфигурацию HTTP-маршрута.

    Создайте следующий файл и сохраните его как 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
    

    Эта конфигурация определяет два правила маршрутизации для трафика HTTP.

    Замечание

    Порядок правил маршрутизации имеет значение.

    Более конкретные префиксы должны быть перед менее конкретными префиксами.

    Например, если первое правило соответствует префиксу /api, оно будет использоваться, даже если второе правило использует префикс /api/v1.

    Недвижимость Описание
    description Человеко-читаемая метка для правила
    routes.match.prefix Префикс пути URL для сопоставления. Например: /api.
    routes.action.prefixRewrite На что заменить совпавший префикс перед пересылкой.
    targets.containerApp Имя приложения-контейнера, в котором отправляется соответствующий запрос маршрута.

    Эти правила позволяют разным путям в домене направляться к разным приложениям-контейнерам, а также изменять путь запроса до того, как он достигнет конечного приложения.

    Другие, не перечисленные свойства, которые могут повлиять на ваши маршруты, включают следующее.

    Недвижимость Описание
    route.match.path Точное определение пути сопоставления.
    route.match.pathSeparatedPrefix Сопоставляет маршруты по границам "/" вместо текста. Например, если задано значение /product, оно будет соответствовать /product/1, но не /product1.
    route.match.caseSensitive Определяет, соответствуют ли шаблоны маршрутов конфиденциальности регистра.
    target.label Маршрут к определенной помеченной ревизии в контейнерном приложении.
    target.revision Маршрут к конкретной версии в контейнерном приложении.
  4. Выполните следующую команду, чтобы создать конфигурацию маршрута 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
    

    Полное доменное имя конфигурации HTTP-маршрута (FQDN) выглядит следующим образом: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Убедитесь, что оба приложения-контейнера уже существуют.

  2. Создайте следующий файл Bicep и сохраните его как 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. Разверните Bicep-файл с помощью следующей команды:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. В выходных данных найдите outputs, которое содержит полное доменное имя (FQDN) вашей конфигурации маршрута HTTP. Рассмотрим пример.

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

Проверка конфигурации HTTP-маршрута

  1. Перейдите по полному доменному имени (FQDN) конфигурации HTTP-маршрута с помощью пути /app1.

    Например: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.

    Вы видите образ Container Apps для быстрого запуска.

  2. Перейдите по полному доменному имени (FQDN) конфигурации HTTP-маршрута с помощью пути /app2.

    Например: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.

    Вы видите изображение краткого руководства ASP.NET.

Очистка ресурсов

Если вы не собираетесь продолжать использовать это приложение, выполните приведенную ниже команду, чтобы удалить группу ресурсов вместе со всеми ресурсами, созданными в ходе работы с этим кратким руководством.

Осторожность

Следующая команда удаляет указанную группу ресурсов и все ресурсы, содержащиеся в ней. Если в указанной группе ресурсов существуют ресурсы, не входящие в область этого краткого руководства, они также будут удалены.

az group delete --name my-container-apps