Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
ОБЛАСТЬ ПРИМЕНЕНИЯ: Разработчик | Премия
В этой статье приведены инструкции по развертыванию компонента локального шлюза управления API Azure в приложениях контейнеров Azure.
Разверните локальный шлюз в приложении-контейнере для доступа к API, размещенным в той же среде приложений контейнеров Azure.
Предпосылки
Завершите следующие шаги в кратком руководстве: создание экземпляра службы управления API Azure.
При использовании Azure CLI выполните следующее:
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, попробуйте запустить Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы завершить процесс проверки подлинности, выполните действия, отображаемые в терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Примечание.
Чтобы запустить примеры команд Azure CLI, приведённые в этой статье, необходимо расширение Azure CLI
containerapp. Если вы не использовалиaz containerappкоманды, расширение устанавливается динамически при выполнении первойaz containerappкоманды. Дополнительные сведения о расширениях Azure CLI.
Настройка шлюза в экземпляре службы "Управление API Azure"
Перед вводом в эксплуатацию локального шлюза создайте ресурс шлюза в экземпляре службы управления API Azure. Инструкции см. в разделе "Подготовка локального шлюза". В примерах этой статьи шлюз называется my-gateway.
Получение параметров развертывания шлюза из службы "Управление API"
Чтобы развернуть шлюз, вам потребуются значения маркера и конечной точки конфигурации шлюза. Их можно найти на портале Azure:
- Войдите на портал Azure и перейдите к вашему экземпляру Azure API Management.
- В меню слева в разделе "Развертывание и инфраструктура" выберите автономные шлюзы.
- Выберите подготовленный ресурс шлюза и выберите " Параметры>развертывания".
- Скопируйте значения маркера и конечной точки конфигурации.
Развертывание локального шлюза в приложении-контейнере
Вы можете развернуть образ контейнера локального шлюза в приложении-контейнере с помощью портала 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 Management Azure.
#!/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.9.2" \
--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.9.2. См. образы контейнеров для получения дополнительной информации о самостоятельно размещенном шлюзе.Поддержка внешнего входящего трафика в приложение контейнера через порт 8080.
Не менее 1 и не более 3 реплик приложения контейнера.
Подключение от локального шлюза к экземпляру службы "Управление API Azure" путем передачи значений конфигурации в переменные среды. Дополнительные сведения см. в параметрах конфигурации локального шлюза контейнера.
Примечание.
Вход Azure Container Apps перенаправляет HTTPS-запросы в самостоятельно размещённое приложение-контейнер шлюза, преобразуя их в HTTP. Здесь переменная среды
net.server.http.forwarded.proto.enabledзадана какtrue, чтобы локальный шлюз использовал заголовокX-Forwarded-Protoдля определения исходного протокола запроса.
Убедитесь, что приложение контейнера запущено
Войдите на портал Azure и перейдите в приложение-контейнер.
На странице Обзор приложения контейнера убедитесь, что СтатусЗапущено.
Отправьте тестовый запрос на конечную точку состояния на
/status-012345678990abcdef. Например, используйте команду, аналогичную следующейcurlкоманде.curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdefУспешный
200 OKзапрос возвращает ответ.
Подсказка
С помощью интерфейса командной строки можно также запустить команду az containerapp show , чтобы проверить состояние приложения контейнера.
Убедитесь, что шлюз работоспособен
Войдите в портал Azure и перейдите к экземпляру службы "Управление API Azure".
В меню слева в разделе "Развертывание и инфраструктура" выберите автономные шлюзы.
На странице обзора проверьте состояние шлюза. Если шлюз работоспособен, он сообщает о регулярном пульсе шлюза.
Пример сценария
В следующем примере показано, как использовать локальный шлюз для доступа к API, размещенному в приложении контейнера в той же среде. Как показано на следующей схеме, доступ к локальному шлюзу можно получить из Интернета, а API доступен только в среде приложений контейнеров.
- Разверните приложение-контейнер, в котором размещен API в той же среде, что и локальный шлюз.
- Добавьте API в инстанс Azure API Management.
- Вызовите API через самостоятельно размещенный шлюз.
Развертывание приложения-контейнера, в котором размещен API в той же среде, что и локальный шлюз.
В этом примере вы развернете пример API музыкальных альбомов в приложении-контейнере. Чтобы получить доступ к API позже с помощью локального шлюза, разверните API в той же среде, что и локальный шлюз. Подробные инструкции и сведения о ресурсах, используемых в этом примере, см. в кратком руководстве. Создание и развертывание из локального исходного кода в приложениях контейнеров Azure. Следующие сокращенные шаги:
Скачайте исходный код Python на локальный компьютер. Если вы предпочитаете, скачайте исходный код на другой язык.
Извлеките исходный код в локальную папку и перейдите в папку containerapps-albumapi-python-main/src .
Выполните следующую команду az containerapp up , чтобы развернуть API в приложении-контейнере в той же среде, что и локальный шлюз. Обратите внимание на
., текущая папка указана в конце команды в качестве источника для приложения контейнера.#!/bin/bash az containerapp up --name albums-api \ --resource-group myResourceGroup --location centralus \ --environment my-environment --source .Убедитесь, что приложение-контейнер запущено и доступно извне по полному доменному имени, возвращенному в результатах выполнения команды. По умолчанию API доступен в конечной точке
/albums. Пример:https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums.
Настройка API для внутреннего входящего трафика
Теперь обновите контейнерное приложение, в котором размещен образец API, чтобы разрешить вход только в среде контейнера. Этот параметр ограничивает доступ к API только из развернутого локального шлюза.
- Войдите на портал Azure и перейдите в приложение-контейнер.
- В меню слева выберите Сеть>Вход.
- Установите Ingress на Включено.
- В входящем трафике выберите Ограничено средой контейнерных приложений.
- Просмотрите оставшиеся параметры и нажмите кнопку "Сохранить".
Добавьте API в экземпляр «Управление API Azure»
Ниже показано, как добавить API в экземпляр службы "Управление API Azure" и настроить серверную часть API. Дополнительные сведения см. в статье "Добавление API в управление API Azure".
Добавьте API в экземпляр вашей службы управления API
- На портале Azure перейдите к экземпляру службы "Управление API", где настроен локальный шлюз.
- В меню слева выберите API>API>+ Добавить API.
- Выберите HTTP и нажмите кнопку "Полный". Введите следующие параметры:
- Отображаемое имя: введите описательное имя. Пример: API альбомов.
-
URL-адрес веб-службы: введите внутреннее полное доменное имя приложения контейнера, на котором размещен API. Пример:
http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io. - Схема URL-адресов: выберите HTTP(S).
- Суффикс URL-адреса API: введите суффикс вашего выбора. Пример: albumapi.
- Шлюзы. Выберите подготовленный локальный шлюз. Пример: my-gateway.
- Настройте другие параметры API в соответствии с вашим сценарием. Выберите Создать.
Добавление операции API
- В левом меню выберите API>API Альбомов.
- Выберите и добавьте операцию.
- Введите параметры операции:
- Отображаемое имя: введите описательное имя для операции. Пример: Получить альбомы.
-
URL-адрес: выберите "Получить " и введите
/albumsдля конечной точки. - Выберите Сохранить.
Вызов 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, вы можете запросить журналы, чтобы просмотреть запросы и ответы.
Ограничения
Экземпляры локального шлюза зависят от протокола UDP для сигнала сердцебиения и коммуникаций по ограничению скорости. Так как в настоящее время приложения контейнеров Azure не поддерживают протокол UDP, ни для входящего трафика, ни для внутреннего трафика, rate-limit политика не может синхронизировать счетчик между экземплярами. Следовательно, сохранение трех реплик локального приложения-контейнера шлюза с ограничением X может привести к трехкратному увеличению трафика пока не будет достигнуто ограничение X.
Приложения контейнеров Azure распределяют запросы линейно по каждой доступной и работоспособной реплике. Чтобы реализовать ограничение скорости, можно разделить требуемое ограничение на количество реплик, которые вы хотите запустить, и задать результирующее значение в конфигурации. Этот подход имеет свои собственные недостатки, так как вы, возможно, не сможете учитывать скорректированные счетчики, если и когда масштабируются приложения-контейнеры.