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


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

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

В этой статье приведены инструкции по развертыванию компонента локального шлюза управления API Azure в приложениях контейнеров 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, приведённые в этой статье, необходимо расширение Azure CLI containerapp. Если вы не использовали 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, используемая для группировки контейнерных приложений.
  • Рабочая область для анализа логов

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

Чтобы развернуть локальный шлюз в приложении-контейнере в среде, выполните команду 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 Container Apps перенаправляет HTTPS-запросы в самостоятельно размещённое приложение-контейнер шлюза, преобразуя их в HTTP. Здесь переменная среды net.server.http.forwarded.proto.enabled задана как true, чтобы локальный шлюз использовал заголовок 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. В меню слева выберите Ingress.
  3. Установите Ingress на Включено.
  4. В входящем трафике выберите Ограничено средой контейнерных приложений.
  5. Просмотрите оставшиеся параметры и нажмите кнопку "Сохранить".

Добавьте API в экземпляр службы управления API

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

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

  1. На портале перейдите к экземпляру службы API Management, в котором сконфигурирован самостоятельно размещённый шлюз.
  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, вы можете запросить журналы, чтобы просмотреть запросы и ответы.