Compartir vía


Migración de Spring Cloud Gateway para Tanzu a una puerta de enlace para Spring administrada en Azure Container Apps

Nota:

Los planes de Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retiro de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.

El plan de consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para obtener más información, consulte Migrar el plan de consumo y dedicado Azure Spring Apps Standard a Azure Container Apps.

Este artículo se aplica a: ❎ Básico/Estándar ✅ Enterprise

En este artículo se muestra cómo migrar Spring Cloud Gateway para VMware en el plan Enterprise de Azure Spring Apps a una puerta de enlace para Spring administrada en Azure Container Apps mediante la CLI de Azure.

Requisitos previos

Aprovisionamiento de una puerta de enlace para Spring administrada

Use el comando siguiente para aprovisionar el componente Java de puerta de enlace para Spring en el entorno de Azure Container Apps que creó en los requisitos previos:

az containerapp env java-component gateway-for-spring create \
    --resource-group <resource-group-name> \
    --name <gateway-name> \
    --environment <azure-container-app-environment-name>

Después de crear correctamente el componente, puede ver que el valor de Estado de aprovisionamiento de Spring Cloud Gateway es Correcto.

Administración de recursos

La asignación de recursos de contenedor de la puerta de enlace para Spring en Azure Container Apps está fijada en los valores siguientes:

  • CPU: 0,5 vCPU
  • Memoria: 1 Gi

Para configurar el recuento de instancias para la puerta de enlace para Spring, use los parámetros --min-replicas y --max-replicas, estableciendo ambos en el mismo valor. Esta configuración garantiza que el recuento de instancias permanece fijo. Actualmente, el sistema no admite configuraciones de escalado automático dinámico.

Configuración de la puerta de enlace para Spring

Después de aprovisionar la puerta de enlace, el siguiente paso es configurarla para que la migración transcurra sin problemas.

Puede actualizar la configuración y las rutas del componente de puerta de enlace para Spring mediante el comando update, como se muestra en el ejemplo siguiente:

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>

Configuración de CORS

Para migrar la configuración global de uso compartido de recursos entre orígenes (CORS) de Spring Cloud para VMware, debe asignar propiedades con el formato <configuration-key>="<configuration-value>". La relación de asignación se muestra en la tabla siguiente:

Nombre de la propiedad de Spring Cloud Gateway para VMware Configuración en la puerta de enlace para Spring
Orígenes permitidos spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[<id>]
Patrones de origen permitidos spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns[<id>]
Métodos permitidos spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedMethods[<id>]
Encabezados permitidos spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedHeaders[<id>]
Antigüedad máxima spring.cloud.gateway.globalcors.cors-configurations.[/**].maxAge
Permitir credenciales spring.cloud.gateway.globalcors.cors-configurations.[/**].allowCredentials
Encabezados expuestos spring.cloud.gateway.globalcors.cors-configurations.[/**].exposedHeaders[<id>]

Por ejemplo, si tiene una configuración como allowedOrigins:["https://example.com","https://example1.com"] en Spring Cloud Gateway para VMware, debe actualizar la puerta de enlace para Spring con el parámetro siguiente:

--configuration spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[0]=https://example.com spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOrigins[1]=https://example1.com

Para la configuración de CORS por ruta, debe reemplazar el carácter "/**" en la clave de configuración como ruta de acceso de la ruta. Por ejemplo, si tiene una ruta con la ruta de acceso /v1/**, debe configurar spring.cloud.gateway.globalcors.cors-configurations.[/v1/**].allowedOrigins[<id>].

Rutas

El componente de puerta de enlace para Spring admite la definición de rutas mediante las propiedades iduripredicates y filters, como se muestra en el ejemplo siguiente:

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}"

En la lista siguiente se describe la relación de asignación entre las rutas de Spring Cloud Gateway para VMware y las rutas de la puerta de enlace para Spring:

  • El valor name de la ruta se asigna a id.
  • Los valores appName y protocol se asignan al URI de la ruta, que debe ser el URI accesible para la instancia de Azure Container Apps.
  • Los predicados y filtros de Spring Cloud Gateway se asignan a los predicados y filtros de la puerta de enlace para Spring.

Por ejemplo, supongamos que se crea el siguiente archivo JSON de configuración de ruta, denominado test-api.json para Spring Cloud Gateway para VMware:

{
  "protocol": "HTTP",
  "routes": [
    {
      "title": "Test API",
      "predicates": [
        "Path=/test/api/healthcheck",
        "Method=GET"
      ],
      "filters": [
        "AddResponseHeader=X-Response-Red, Blue"
      ]
    }
  ]
}

Además, supongamos que usa el siguiente comando para aplicar la regla a la aplicación Azure Spring Apps test-app:

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

A continuación, en el ejemplo siguiente se muestra el archivo YAML de ruta correspondiente test-api.yml para la puerta de enlace para Spring en Azure Container Apps:

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/test/api/healthcheck
      - Method=GET
    filters:
      - AddResponseHeader=X-Response-Red, Blue

Además, usaría el siguiente comando para actualizar la aplicación contenedora:

az containerapp env java-component gateway-for-spring update \
    --route-yaml test-api.yml

Debe habilitar la entrada de la aplicación Azure Container App para obtener su nombre de dominio completo (FQDN). A continuación, reemplace <app-FQDN-in-Azure-Container-Apps> en el URI de la ruta por el punto de conexión accesible de la aplicación. El formato URI es https://<app-name>.<container-app-env-name>.<region>.azurecontainerapps.io.

Hay algunos predicados comerciales y filtros comerciales que no se admiten en la puerta de enlace para Spring en Azure Container Apps.

Caché de respuestas

Si habilita la caché de respuestas globalmente, puede actualizar la puerta de enlace para Spring administrada con la siguiente configuración:

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>

Si habilita la caché de respuestas para la ruta, puede usar el filtro LocalResponseCache en la configuración de la regla de enrutamiento de la puerta de enlace para Spring administrada con el siguiente YAML:

springCloudGatewayRoutes:
  - id: "test-api"
    uri: "<app-fqdn-in-Container-Apps>"
    predicates:
      - Path=/v1/**
      - Method=GET
    filters:
      - LocalResponseCache=3m, 1MB

Solución de problemas

Puede ver los registros de puerta de enlace para Spring en Azure Container Apps mediante Log Analytics usando los pasos siguientes:

  1. En Azure Portal, vaya al entorno de Azure Container Apps.

  2. En el panel de navegación, seleccione Supervisión>Registros.

  3. Para ver los registros, consulte la tabla ContainerAppSystemLogs_CL usando el editor de consultas, como se muestra en el ejemplo siguiente:

    ContainerAppSystemLogs_CL
    | where ComponentType_s == "SpringCloudGateway"
    | project Time=TimeGenerated, ComponentName=ComponentName_s, Message=Log_s
    | take 100
    

Para más información sobre la consulta de registros, consulte Observabilidad de componentes de Java administrados en Azure Container Apps.

Limitación conocida

Por ahora, la puerta de enlace para Spring en Azure Container Apps no admite determinadas características comerciales, en particular los metadatos usados para generar la documentación de OpenAPI, el inicio de sesión único (SSO) y la integración de la supervisión del rendimiento de aplicaciones (APM).

Hay un problema conocido por el que al habilitar la puerta de enlace para Spring se impide que la sección Servicios se abra en Azure Portal. Esperamos resolver este problema pronto.