Миграция Spring Cloud Gateway для Tanzu в управляемый шлюз для Spring в приложениях контейнеров Azure
Примечание.
Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.
Эта статья относится к: ❎ Basic/Standard ✅ Enterprise
В этой статье показано, как перенести шлюз VMware Spring Cloud в Azure Spring Apps Enterprise в управляемый шлюз для Spring в приложениях контейнеров Azure с помощью Azure CLI.
Необходимые компоненты
- Существующий экземпляр плана Azure Spring Apps Enterprise с включенным шлюзом Spring Cloud.
- Существующее приложение контейнера Azure. Дополнительные сведения см. в статье Краткое руководство. Развертывание первого приложения-контейнера с помощью портала Azure.
- Azure CLI.
Подготовка управляемого шлюза для Spring
Используйте следующую команду, чтобы подготовить компонент Шлюза для Spring Java в среде приложений контейнеров Azure, созданной в предварительных требованиях:
az containerapp env java-component gateway-for-spring create \
--resource-group <resource-group-name> \
--name <gateway-name> \
--environment <azure-container-app-environment-name>
После успешного создания компонента вы увидите, что значение состояния подготовки для Spring Cloud Gateway успешно выполнено.
Управление ресурсами
Распределение ресурсов контейнера для шлюза для Spring в приложениях контейнеров Azure исправлено следующими значениями:
- ЦП: 0,5 vCPU
- Память: 1 Ги
Чтобы настроить количество экземпляров для Шлюза для Spring, используйте параметры --min-replicas
и --max-replicas
задайте оба значения в одном и том же значении. Эта конфигурация гарантирует, что число экземпляров остается фиксированным. В настоящее время система не поддерживает динамические конфигурации автомасштабирования.
Настройка шлюза для Spring
После подготовки шлюза необходимо настроить его для плавной миграции.
Конфигурацию и маршруты компонента Gateway for Spring можно обновить с помощью update
команды, как показано в следующем примере:
az containerapp env java-component gateway-for-spring update \
--resource-group <resource-group-name> \
--name <gateway-name> \
--environment <azure-container-app-environment-name> \
--configuration <configuration-key>="<configuration-value>" \
--route-yaml <path-to-route-YAML-file>
Конфигурация CORS
Чтобы перенести глобальную конфигурацию общего доступа к ресурсам (CORS) VMware Spring Cloud, необходимо сопоставить свойства с форматом <configuration-key>="<configuration-value>"
. Связь сопоставления показана в следующей таблице:
Имя свойства в VMware Spring Cloud Gateway | Настройка в шлюзе для Spring |
---|---|
Допустимые источники | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>] |
Допустимые шаблоны источников | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>] |
Допустимые методы | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>] |
Допустимые заголовки | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>] |
Максимальный возраст | spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge |
Разрешить учетные данные | spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials |
Предоставляемые заголовки | spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>] |
Например, если у вас есть конфигурация, например allowedOrigins:["https://example.com","https://example1.com"]
в VMware Spring Cloud Gateway, необходимо обновить шлюз для Spring со следующим параметром:
--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com
Для конфигурации CORS для каждого маршрута необходимо заменить "/*" в ключе конфигурации в качестве пути маршрута. Например, если у вас есть маршрут с путем /v1/**
, необходимо настроить spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>]
.
Маршруты
Компонент Gateway for Spring поддерживает определение маршрутов через id
, uri
predicates
и filters
свойства, как показано в следующем примере:
springCloudGatewayRoutes:
- id: "route1"
uri: "https://otherjavacomponent.myenvironment.test.net"
predicates:
- "Path=/v1/{path}"
- "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
filters:
- "SetPath=/{path}"
- id: "route2"
uri: "https://otherjavacomponent.myenvironment.test.net"
predicates:
- "Path=/v2/{path}"
- "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
filters:
- "SetPath=/{path}"
В следующем списке описывается связь между маршрутами шлюза VMware Spring Cloud и маршрутами шлюза для Spring:
- Маршрут
name
сопоставляется сid
. -
protocol
ИappName
сопоставляются с универсальным кодом ресурса (URI) маршрута, который должен быть доступным универсальным кодом ресурса (URI) для экземпляра приложений контейнеров Azure. - Предикаты и фильтры Шлюза Spring Cloud сопоставляются с шлюзом для предикатов и фильтров Spring Cloud.
Например, предположим, что для шлюза VMware Spring Cloud создается следующий файл json конфигурации маршрута, который называется test-api.json :
{
"protocol": "HTTP",
"routes": [
{
"title": "Test API",
"predicates": [
"Path=/test/api/healthcheck",
"Method=GET"
],
"filters": [
"AddResponseHeader=X-Response-Red, Blue"
]
}
]
}
Предположим, вы используете следующую команду, чтобы применить правило к приложению test-app
Azure Spring Apps:
az spring gateway route-config create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name test-api \
--app-name test-app \
--routes-file test-api.json
Затем в следующем примере показан соответствующий файл YAML маршрута test-api.yml для шлюза для Spring в приложениях контейнеров Azure:
springCloudGatewayRoutes:
- id: "test-api"
uri: "<app-fqdn-in-Container-Apps>"
predicates:
- Path=/test/api/healthcheck
- Method=GET
filters:
- AddResponseHeader=X-Response-Red, Blue
И выполните следующую команду, чтобы обновить приложение контейнера:
az containerapp env java-component gateway-for-spring update \
--route-yaml test-api.yml
Чтобы получить полное доменное имя (FQDN), необходимо включить входящий трафик для приложения контейнеров Azure. Затем замените <app-FQDN-in-Azure-Container-Apps>
URI маршрута на доступную конечную точку приложения. Формат URI: https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io
.
Существуют некоторые коммерческие предикаты и коммерческие фильтры , которые не поддерживаются в шлюзе для Spring в приложениях контейнеров Azure.
Кэш ответов
Если кэш ответов включен глобально, можно обновить управляемый шлюз для Spring со следующей конфигурацией:
spring.cloud.gateway.filter.local-response-cache.enabled=true
spring.cloud.gateway.filter.local-response-cache.time-to-live=<response-cache-ttl>
spring.cloud.gateway.filter.local-response-cache.size=<response-cache-size>
Если включить кэш ответов для маршрута, можно использовать LocalResponseCache
фильтр в конфигурации правила маршрутизации управляемого шлюза для Spring в качестве следующего YAML:
springCloudGatewayRoutes:
- id: "test-api"
uri: "<app-fqdn-in-Container-Apps>"
predicates:
- Path=/v1/**
- Method=GET
filters:
- LocalResponseCache=3m, 1MB
Устранение неполадок
Журналы шлюза для Spring в приложениях контейнеров Azure можно просмотреть, Log Analytics
выполнив следующие действия.
В портал Azure перейдите в среду Приложений контейнеров Azure.
В области навигации выберите "Журналы мониторинга>".
Чтобы просмотреть журналы, выполните запрос
ContainerAppSystemLogs_CL
к таблице с помощью редактора запросов, как показано в следующем примере:ContainerAppSystemLogs_CL | where ComponentType_s == "SpringCloudGateway" | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s | take 100
Дополнительные сведения о запросах журналов см. в разделе "Наблюдаемость управляемых компонентов Java" в приложениях контейнеров Azure.
Известные ограничения
Сейчас шлюз для Spring в приложениях контейнеров Azure не поддерживает некоторые коммерческие функции, включая метаданные, используемые для создания документации OpenAPI, единого входа (SSO) и интеграции мониторинга производительности приложений (APM).
Существует известная проблема, из-за которой включение шлюза для Spring запрещает открытие раздела "Службы" в портал Azure. Мы ожидаем, что эта проблема будет решена в ближайшее время.