Развертывание локального шлюза Azure Управление API в приложениях контейнеров Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ: Разработчик | Премиум

В этой статье приведены действия по развертыванию локально размещенного компонента шлюза Azure Управление API в приложениях контейнеров Azure.

Разверните локальный шлюз в приложении-контейнере для доступа к API, размещенным в той же среде приложений контейнеров Azure.

Необходимые компоненты

  • Выполните задачи в кратком руководстве по созданию экземпляра службы управления API Azure.

  • При использовании Azure CLI выполните следующее:

    • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

    • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

      • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

      • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

      • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

    Примечание.

    Примеры команд Azure CLI в этой статье требуют containerapp расширения Azure CLI. Если вы не использовали az containerapp команды, расширение устанавливается динамически при выполнении первой az containerapp команды. Дополнительные сведения о расширениях Azure CLI.

Подготовка шлюза в экземпляре Управление API

Перед развертыванием локального шлюза подготовьте ресурс шлюза в экземпляре Управление API Azure. Инструкции см. в разделе "Подготовка локального шлюза". В примерах этой статьи шлюз называется my-gateway.

Получение параметров развертывания шлюза из Управление API

Чтобы развернуть шлюз, вам потребуются значения маркера и конечной точки конфигурации шлюза. Их можно найти в портал Azure:

  1. Войдите на портал Azure и перейдите к своему экземпляру службы Управления API.
  2. В меню слева в разделе "Развертывание и инфраструктура" выберите шлюзы.
  3. Выберите подготовленный ресурс шлюза и выберите "Развертывание".
  4. Скопируйте значения конечной точки маркераи конфигурации.

Развертывание локального шлюза в приложении-контейнере

Образ контейнера локального шлюза можно развернуть в приложении-контейнере с помощью портал Azure, Azure CLI или других средств. В этой статье показано, как использовать Azure CLI.

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

Сначала создайте среду приложений контейнеров с помощью команды az containerapp env create :

#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
    --location centralus

Эта команда создает следующее:

  • Среда приложения контейнера с именем my-environment , используемая для группирования приложений контейнеров.
  • Рабочая область Log Analytics

Создание приложения-контейнера для локального шлюза

Чтобы развернуть локальный шлюз в приложении-контейнере в среде, выполните команду az containerapp create .

Сначала задайте переменные для значений конечной точки маркера и конфигурации из ресурса шлюза Управление API.

#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"

Создайте приложение-контейнер с помощью az containerapp create команды:

#!/bin/bash
az containerapp create --name my-gateway \
    --resource-group myResourceGroup --environment 'my-environment' \
    --image "mcr.microsoft.com/azure-api-management/gateway:2.5.0" \
    --target-port 8080 --ingress external \
    --min-replicas 1 --max-replicas 3 \
    --env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"

Эта команда создает следующее:

  • Приложение контейнера с именем my-gateway в myResourceGroup группе ресурсов. В этом примере приложение-контейнер создается с помощью mcr.microsoft.com/azure-api-management/gateway:2.5.0 образа. Дополнительные сведения о образах контейнеров локального шлюза.

  • Поддержка внешнего входящего трафика в приложение контейнера через порт 8080.

  • Не менее 1 и не более 3 реплика приложения контейнера.

  • Подключение от локального шлюза к экземпляру Управление API с использованием значений конфигурации, передаваемых в переменных среды. Дополнительные сведения см. в параметрах конфигурации контейнера локального шлюза.

    Примечание.

    Входящий трафик приложений контейнеров Azure перенаправит HTTPS-запросы в локальное приложение контейнера шлюза как HTTP. Здесь задана переменная true среды, net.server.http.forwarded.proto.enabled чтобы локальный шлюз использовал X-Forwarded-Proto заголовок для определения исходного протокола запроса.

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

  1. Войдите в портал Azure и перейдите к приложению-контейнеру.

  2. На странице обзора приложения контейнера проверка состояниезапущено.

  3. Отправьте тестовый запрос в конечную точку /status-012345678990abcdefсостояния. Например, используйте команду, аналогичную curl следующей.

    curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
    

    Успешный 200 OK запрос возвращает ответ.

Совет

С помощью интерфейса командной строки можно также запустить команду az containerapp show, чтобы проверка состояние приложения-контейнера.

Убедитесь, что шлюз работоспособен

  1. Войдите на портал Azure и перейдите к своему экземпляру службы Управления API.

  2. В меню слева в разделе "Развертывание и инфраструктура" выберите шлюзы.

  3. На странице обзора проверка состояние шлюза. Если шлюз работоспособен, он сообщает о регулярном пульсе шлюза.

    Снимок экрана: состояние шлюза на портале.

Пример сценария

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

Схема примера сценария с локальным шлюзом.

  1. Развертывание приложения-контейнера, в котором размещен API в той же среде, что и локальный шлюз.
  2. Добавление API в экземпляр Управление API
  3. Вызов API через локальный шлюз

Развертывание приложения-контейнера, в котором размещен API в той же среде, что и локальный шлюз.

Например, разверните пример API музыкального альбома в приложении-контейнере. Для дальнейшего доступа к API с помощью локального шлюза разверните API в той же среде, что и локальный шлюз. Подробные инструкции и сведения о ресурсах, используемых в этом примере, см . в кратком руководстве. Создание и развертывание из локального исходного кода в приложениях контейнеров Azure. Сокращенные шаги выполните следующие действия.

  1. Скачайте исходный код Python на локальный компьютер. Если вы предпочитаете, скачайте исходный код на другой язык.

  2. Извлеките исходный код в локальную папку и перейдите в папку containerapps-albumapi-python-main/src .

  3. Выполните следующую команду az containerapp up , чтобы развернуть API в приложении-контейнере в той же среде, что и локальный шлюз. Обратите внимание на . то, что в конце команды указана текущая папка в качестве источника для приложения контейнера.

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. Убедитесь, что приложение-контейнер запущено и доступно внешне в полное доменное имя, возвращенное в выходных данных команды. По умолчанию API доступен в конечной точке /albums . Пример: https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.

Настройка API для внутреннего входящего трафика

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

  1. Войдите в портал Azure и перейдите к приложению-контейнеру.
  2. В меню слева выберите входящий трафик.
  3. Установите для входящего трафиказначение "Включено".
  4. В трафике входящего трафика выберите "Ограничено средой контейнерных приложений".
  5. Просмотрите оставшиеся параметры и нажмите кнопку "Сохранить".

Добавление API в экземпляр Управление API

Ниже приведены примеры действий по добавлению API в экземпляр Управление API и настройке серверной части API. Дополнительные сведения см. в статье "Добавление API в Azure Управление API".

Добавление API в экземпляр Управление API

  1. На портале перейдите к Управление API экземпляру, где настроен локальный шлюз.
  2. В меню слева выберите API>+ Добавить API.
  3. Выберите HTTP и нажмите кнопку "Полный". Введите следующие параметры:
    1. Отображаемое имя: введите описательное имя. Пример: API альбомов.
    2. URL-адрес веб-службы: введите внутреннее полное доменное имя приложения контейнера, на котором размещен API. Пример: http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io.
    3. Схема URL-адресов: выберите HTTP(S).
    4. Суффикс URL-адреса API: введите суффикс вашего выбора. Пример: albumapi.
    5. Шлюзы. Выберите подготовленный локальный шлюз. Пример: my-gateway.
  4. Настройте другие параметры API в соответствии с вашим сценарием. Нажмите кнопку создания.

Добавление операции API

  1. В меню слева выберите >API Альбомов API.
  2. Выберите и добавьте операцию.
  3. Введите параметры операции:
    1. Отображаемое имя: введите описательное имя для операции. Пример: получение альбомов.
    2. URL-адрес: выберите " Получить " и введите /albums для конечной точки.
    3. Выберите Сохранить.

Вызов API через локальный шлюз

Вызовите API с помощью полного доменного имени локального шлюза, работающего в приложении контейнера. Найдите полное доменное имя на странице обзора приложения контейнера в портал Azure или выполните следующую az containerapp show команду.

#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
    --query "properties.configuration.ingress.fqdn" --output tsv

Например, выполните следующую curl команду, чтобы вызвать API в конечной точке /albumapi/albums . Если для API требуется ключ подписки, передайте действительный ключ подписки для экземпляра Управление API в качестве заголовка в запросе:

curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"

При успешном выполнении теста серверная часть отвечает с помощью успешного кода ОТВЕТА HTTP и некоторых данных.

HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]

[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]

Совет

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