Поделиться через


Использование личного домена с маршрутизацией на основе правил в Azure Container Apps (предварительная версия)

Конфигурации маршрутов HTTP поддерживают пользовательские домены, позволяя маршрутизировать трафик из собственных доменных имен в приложения контейнеров.

Предпосылки

  • Существующая среда приложений контейнеров Azure
  • Личный домен, принадлежащий вам
  • SSL-сертификат для вашего домена (если только не используется автоматические сертификаты)
  • Приложения-контейнеры, развернутые в вашей среде

Конфигурация личного домена

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

  • Если вы используете корневой домен (например, contoso.com), создайте следующие записи DNS:

    Тип записи Хозяин Ценность
    А @ IP-адрес среды приложений контейнеров.
    ТЕКСТ asuid Код проверки домена.
  • Если вы используете поддомен (например, www.contoso.com), создайте следующие записи DNS:

    Тип записи Хозяин Ценность
    А Поддомен (например, www) IP-адрес среды приложений контейнеров.
    ТЕКСТ asuid.{subdomain} (например, asuid.www) Код проверки домена.

Замечание

IP-адрес среды "Приложения контейнеров" и код проверки домена можно найти в параметрах пользовательского DNS-суффикса среды "Приложения контейнеров".

Не привязывайте личный домен к среде "Приложения контейнеров" или к приложению-контейнеру. Домены привязаны только к одному приложению, маршруту или среде.

Конфигурация маршрута

Обновите файл YAML для контейнерных приложений, чтобы включить customDomains раздел. Включите bindingType и certificateId в соответствии с следующими критериями.

значение bindingType Описание
Нетрудоспособный Сертификат не указан. Домен доступен только по протоколу HTTP, и HTTPS недоступен.
Автомобиль Сертификат необязателен. Если управляемый сертификат уже создан для этого домена, он добавляется в маршрут автоматически. В противном случае домен изначально доступен только по протоколу HTTP. Чтобы создать управляемый сертификат для этого домена, создайте новый управляемый сертификат после создания маршрута. После создания сертификата он автоматически добавляется в маршрут.
SniEnabled Требуется сертификат.
Тип сертификата Формат certificateId
Отсутствует Не указывайте
Управляется /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.App/managedEnvironments/{ContainerAppEnvironmentName}/managedCertificates/{CertificateFriendlyName}
Неуправляемые /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.App/managedEnvironments/{ContainerAppEnvironmentName}/certificates/{CertificateFriendlyName}

Замечание

Чтобы добавить сертификат в среду, используйте один из следующих методов:

Не привязывайте сертификат к приложению контейнера.

В следующем примере показано, как настроить конфигурацию маршрута.

customDomains:
  - name: "<CUSTOM_DOMAIN_ENDPOINT>" 
    certificateId: "<CERTIFICATE_ID>"
    bindingType: "SniEnabled" # Can also be "Disabled", "Auto"
rules:
  - description: "Routing to App1"
    routes:
      - match:
          prefix: "/1"
        action:
          prefixRewrite: "/"
    targets:
      - containerApp: "<APP1_CONTAINER_APP_NAME>"
  - description: "Routing to App2"
    routes:
      - match:
          prefix: "/2"
        action:
          prefixRewrite: "/"
      - match:
          prefix: "/"
    targets:
      - containerApp: "<APP2_CONTAINER_APP_NAME>"

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

Недвижимость Описание
customDomains.name Имя домена, которое вы хотите использовать (например, "app.contoso.com")
customDomains.certificateId Идентификатор ресурса вашего сертификата (не требуется с bindingType: "Auto")
customDomains.bindingType Как обрабатывается SSL: "SniEnabled" (указание имени сервера), "Отключено" (только HTTP) или "Auto" (автоматический сертификат)
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 Маршрут к конкретной версии в контейнерном приложении.

Работа с конфигурацией маршрута

Используйте следующие команды для управления конфигурацией маршрута.

Перед выполнением следующих команд обязательно замените заполнители, окруженные тегами <>, на собственные значения.

Создание конфигурации маршрута

Используйте az containerapp env http-route-config create для создания новой конфигурации маршрута.

az containerapp env http-route-config create \
    --resource-group <RESOURCE_GROUP_NAME> \
    --name <ENVIRONMENT_NAME> \
    --http-route-config-name <CONFIGURATION_NAME> \
    --yaml <CONTAINER_APPS_CONFIG_FILE>

Перечисление конфигураций маршрутов

Используется az containerapp env http-route-config list для перечисления всех определенных конфигураций маршрутов.

az containerapp env http-route-config list \
    --resource-group <RESOURCE_GROUP_NAME> \
    --name <ENVIRONMENT_NAME>

Обновление конфигурации маршрута

Используется az containerapp env http-route-config update для обновления существующей конфигурации маршрута.

az containerapp env http-route-config update \
  --resource-group <RESOURCE_GROUP_NAME> \
  --name <ENVIRONMENT_NAME> \
  --http-route-config-name <CONFIGURATION_NAME> \
  --yaml <CONTAINER_APPS_CONFIG_FILE>

Отображение определенной конфигурации маршрута

Используется az containerapp env http-route-config show для просмотра сведений о конфигурации маршрута.

az containerapp env http-route-config show \
    --resource-group <RESOURCE_GROUP_NAME> \
    --name <ENVIRONMENT_NAME> \
    --http-route-config-name <CONFIGURATION_NAME>

Удаление конфигурации маршрута

Используйте az containerapp env http-route-config delete для удаления конфигурации маршрута.

az containerapp env http-route-config delete \
    --resource-group <RESOURCE_GROUP_NAME> \
    --name <ENVIRONMENT_NAME> \
    --http-route-config-name <CONFIGURATION_NAME>

Проверка маршрутизации HTTP

После настройки личного домена с маршрутизацией на основе правил:

  1. Перейдите в личный домен в браузере. Например: https://app.contoso.com/1.

  2. Убедитесь, что запрос направляется в первое приложение контейнера.

  3. Измените путь на /2. Например: https://app.contoso.com/2.

  4. Убедитесь, что запрос теперь перенаправлен на второе контейнерное приложение.

Подсказка

Есть проблемы? Сообщите нам на GitHub, открыв запрос в репозитории Azure Container Apps.