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


Миграция 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.

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

Подготовка управляемого шлюза для 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, uripredicatesи 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-appAzure 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 выполнив следующие действия.

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

  2. В области навигации выберите "Журналы мониторинга>".

  3. Чтобы просмотреть журналы, выполните запрос 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. Мы ожидаем, что эта проблема будет решена в ближайшее время.