Использование Шлюза Spring Cloud
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.
Эта статья относится к:❌ Basic/Standard ✔️ Enterprise
В этой статье показано, как использовать шлюз VMware Spring Cloud с планом Azure Spring Apps Enterprise для маршрутизации запросов к приложениям.
VMware Spring Cloud Gateway — это коммерческий компонент VMware Tanzu на основе проекта Шлюза Spring Cloud с открытым исходным кодом. Spring Cloud Gateway обрабатывает перекрестные проблемы для команд разработки API, таких как единый вход (SSO), управление доступом, ограничение скорости, устойчивость, безопасность и многое другое. Вы можете ускорить доставку API с помощью современных собственных схем работы в облаке и любого языка программирования, выбранного для разработки API.
Spring Cloud Gateway включает следующие функции:
- Динамическая конфигурация маршрутизации, независимо от отдельных приложений, которые могут применяться и изменяться без повторной компиляции.
- Фильтры маршрутов коммерческого API для переноса авторизованных утверждений веб-маркера JSON (JWT) в службы приложений.
- Авторизация сертификата клиента.
- Подходы к ограничению скорости.
- Конфигурация разбиения цепи.
- Поддержка доступа к службам приложений с помощью учетных данных проверки подлинности HTTP Basic.
Чтобы интегрироваться с порталом API для VMware Tanzu, VMware Spring Cloud Gateway автоматически создает документацию OpenAPI версии 3 после любых добавлений или изменений конфигурации маршрута.
Необходимые компоненты
- Уже подготовленный экземпляр службы плана Azure Spring Apps Enterprise с включенным шлюзом Spring Cloud. Дополнительные сведения см . в кратком руководстве по созданию и развертыванию приложений в Azure Spring Apps с помощью плана Enterprise.
- Azure CLI версии 2.0.67 или более поздней. Используйте следующую команду, чтобы установить расширение Azure Spring Apps:
az extension add --name spring
Настройка маршрутов
В этом разделе описывается, как добавлять, обновлять и управлять маршрутами API для приложений, использующих Шлюз Spring Cloud.
Определение конфигурации маршрута включает следующие части:
- URI OpenAPI: этот URI ссылается на спецификацию OpenAPI. Вы можете использовать общедоступную конечную точку URI,
https://petstore3.swagger.io/api/v3/openapi.json
например или созданный URI, напримерhttp://<app-name>/{relative-path-to-OpenAPI-spec}
, имя<app-name>
приложения в Azure Spring Apps, включающее определение API. Поддерживаются спецификации OpenAPI 2.0 и OpenAPI 3.0. Спецификация отображается на портале API, если она включена. - маршруты: список правил маршрутизации для направления трафика в приложения и применения фильтров.
- протокол: внутренний протокол приложения, в который Spring Cloud шлюз направляет трафик. Поддерживаемые значения протокола имеют
HTTP
илиHTTPS
имеют значение по умолчаниюHTTP
. Чтобы защитить трафик из Spring Cloud Gateway в приложение с поддержкой HTTPS, необходимо задать протоколHTTPS
в конфигурации маршрута. - Маршруты уровня приложения. Существует три свойства маршрута, которые можно настроить на уровне приложения, чтобы избежать повторения во всех или большинстве маршрутов в конфигурации маршрута. Конкретное правило маршрутизации переопределяет правило маршрутизации на уровне приложения для того же свойства. Вы можете определить следующие свойства на уровне приложения:
predicates
,filters
иssoEnabled
. Если вы используете функцию для определения маршрутов, единственным свойствомOpenAPI URI
маршрутизации на уровне приложения является поддержкаfilters
.
Чтобы создать конфигурацию маршрута, используйте следующую команду. Значение --app-name
должно быть именем приложения, размещенного в Azure Spring Apps, к которому направляется запрос.
az spring gateway route-config create \
--name <route-config-name> \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app-name <app-name> \
--routes-file <routes-file.json>
В следующем примере показан JSON-файл, переданный --routes-file
параметру в команде create:
{
"predicates": [
"<app-level-predicate-of-route>",
],
"ssoEnabled": false,
"filters": [
"<app-level-filter-of-route>",
],
"openApi": {
"uri": "<OpenAPI-URI>"
},
"protocol": "<protocol-of-routed-app>",
"routes": [
{
"title": "<title-of-route>",
"description": "<description-of-route>",
"predicates": [
"<predicate-of-route>",
],
"ssoEnabled": true,
"filters": [
"<filter-of-route>",
],
"tags": [
"<tag-of-route>"
],
"order": 0
}
]
}
В следующей таблице перечислены определения маршрутов. Все свойства являются необязательными.
Свойство | Описание |
---|---|
title | Заголовок, применяемый к методам в созданной документации OpenAPI. |
описание | Описание, применяемое к методам в созданной документации OpenAPI. |
uri | Полный универсальный код ресурса (URI), который переопределяет имя приложения, к которому направляется запрос. |
ssoEnabled | Значение, указывающее, следует ли включить проверку единого входа. См. раздел "Настройка единого входа". |
tokenRelay | Передает маркер удостоверения пользователя, прошедшего проверку подлинности, в приложение. |
Предикаты | Список предикатов. См . доступные предикаты. |
фильтры | Список фильтров. См . доступные фильтры. |
заказ | Порядок обработки маршрута. Более низкий порядок обрабатывается с более высоким приоритетом, как в Spring Cloud Gateway. |
tags | Теги классификации, применяемые к методам в созданной документации OpenAPI. |
Примечание.
Из-за соображений безопасности или совместимости в Azure Spring Apps поддерживаются не все фильтры и предикаты. Следующие возможности не поддерживаются:
- BasicAuth
- JWTKey
Использование маршрутов для Шлюза Spring Cloud
Выполните следующие действия, чтобы создать пример приложения с помощью Spring Cloud Gateway.
Используйте следующую команду, чтобы создать тестовое приложение с именем test-app в Azure Spring Apps:
az spring app create \ name test-app \ resource-group <resource-group-name> \ service <Azure-Spring-Apps-instance-name>
Назначьте шлюзу общедоступную конечную точку, через которую вы будете к нему обращаться.
Чтобы просмотреть состояние выполнения и ресурсы, предоставленные Шлюзу Spring Cloud, откройте экземпляр Azure Spring Apps в портал Azure, выберите раздел Spring Cloud Gateway, а затем нажмите кнопку "Обзор".
Чтобы назначить общедоступную конечную точку, нажмите кнопку "Да" рядом с назначением конечной точки. URL-адрес отображается через несколько минут. Сохраните URL-адрес для дальнейшего использования.
Вы также можете использовать Azure CLI для назначения конечной точки. Чтобы назначить конечную точку, используйте следующую команду.
az spring gateway update \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --assign-endpoint true
Создайте правило для доступа к конечной точке проверки работоспособности тестового приложения через Spring Cloud Gateway.
Сохраните следующее содержимое в файл test-api.json . Эта конфигурация включает фильтр RateLimit, который позволяет 20 запросов каждые 10 секунд и фильтр RewritePath, который позволяет конечной точке запроса достичь стандартной конечной точки проверки работоспособности Spring Boot.
{ "protocol": "HTTP", "routes": [ { "title": "Test API", "description": "Retrieve a health check from our application", "predicates": [ "Path=/test/api/healthcheck", "Method=GET" ], "filters": [ "RateLimit=20,10s", "RewritePath=/api/healthcheck,/actuator/health" ], "tags": [ "test" ] } ] }
Затем используйте следующую команду, чтобы применить правило к приложению
test-app
:az spring gateway route-config create \ --name test-api-routes \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --app-name test-app \ --routes-file test-api.json
Вы также можете просмотреть маршруты на портале, как показано на следующем снимке экрана:
Используйте следующую команду, чтобы получить доступ к
test health check
API через конечную точку шлюза:curl https://<endpoint-url>/test/api/healthcheck
Используйте следующие команды для запроса правил маршрутизации:
az spring gateway route-config show \ --name test-api-routes \ --query '{appResourceId:properties.appResourceId, routes:properties.routes}' az spring gateway route-config list \ --query '[].{name:name, appResourceId:properties.appResourceId, routes:properties.routes}'
Использование фильтров
Проект Шлюза Spring Cloud с открытым исходным кодом включает множество встроенных фильтров для использования в маршрутах шлюза. Spring Cloud Gateway предоставляет множество пользовательских фильтров в дополнение к фильтрам, включенным в проект OSS.
В следующем примере показано, как применить фильтр к маршруту AddRequestHeadersIfNotPresent
:
[
{
"predicates": [
"Path=/api/**",
"Method=GET"
],
"filters": [
"AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
]
}
]
Затем примените определение маршрута с помощью следующей команды Azure CLI:
az spring gateway route-config create \
--name <route-config-name> \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app <app-name>
--routes-file <json-file-with-routes>
Дополнительные сведения о доступных фильтрах маршрутов см. в статье "Использование фильтров маршрутов шлюза VMware Spring Cloud" с планом Azure Spring Apps Enterprise.