Uso de Spring Cloud Gateway
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: ❎ Basic/Standard ✅ Enterprise
En este artículo se muestra cómo usar VMware en la puerta de enlace Spring Cloud con el plan de Azure Spring Apps de Enterprise para enrutar las solicitudes a las aplicaciones.
Spring Cloud Gateway para VMware es un componente comercial de VMware Tanzu basado en el proyecto de código abierto Spring Cloud Gateway. Spring Cloud Gateway se encarga de las preocupaciones transversales de los equipos de desarrollo de API, como el inicio de sesión único (SSO), el control de acceso, la limitación de la velocidad, la resistencia, la seguridad, etc. Los patrones nativos de la nube modernos y cualquier lenguaje de programación que elija para el desarrollo de API pueden acelerar la entrega de API.
Spring Cloud Gateway incluye las siguientes características:
- Configuración dinámica del enrutamiento independiente de las aplicaciones individuales, que puede aplicarse y modificarse sin necesidad de volver a compilar.
- Filtros comerciales de rutas de API para transportar notificaciones de JSON Web Token (JWT) autorizadas a servicios de aplicación.
- Autorización de certificados de cliente.
- Enfoques que limitan la velocidad.
- Configuración de disyuntores.
- Compatibilidad con el acceso a los servicios de aplicación a través de credenciales de autenticación HTTP básica.
Para realizar la integración con el Portal de API para VMware Tanzu, en la puerta de enlace Spring Cloud para VMware genera automáticamente la documentación de la versión 3 de OpenAPI después de cambios o adiciones en la configuración de la ruta.
Requisitos previos
- Una instancia de servicio del plan Enterprise de Azure Spring Apps ya aprovisionada en la puerta de enlace Spring Cloud habilitado. Para más información, consulte Inicio rápido: Compilación e implementación de aplicaciones en Azure Spring Apps con el plan Enterprise.
- CLI de Azure, versión 2.0.67 o posterior. Use el siguiente comando para instalar la extensión de Azure Spring Apps:
az extension add --name spring
.
Configuración de rutas
En esta sección se describe cómo agregar, actualizar y administrar rutas de API para aplicaciones que usan Spring Cloud Gateway.
La definición de la configuración de la ruta incluye las siguientes partes:
- URI de OpenAPI: este URI hace referencia a una especificación de OpenAPI. Puede usar un punto de conexión de URI público, como
https://petstore3.swagger.io/api/v3/openapi.json
o un URI construido, comohttp://<app-name>/{relative-path-to-OpenAPI-spec}
, donde<app-name>
es el nombre de una aplicación en Azure Spring Apps que incluye la definición de la API. Se admiten las especificaciones de OpenAPI 2.0 y OpenAPI 3.0. La especificación se muestra en el portal de API si está habilitada. - routes: una lista de reglas de ruta para dirigir el tráfico a las aplicaciones y aplicar filtros.
- Protocolo: protocolo de back-end de la aplicación al que la puerta de enlace de Spring Cloud enruta el tráfico. Los valores admitidos del protocolo son
HTTP
oHTTPS
, y el valor predeterminado esHTTP
. Para proteger el tráfico de la puerta de enlace de Spring Cloud a la aplicación habilitada para HTTPS, debe establecer el protocolo enHTTPS
en la configuración de ruta. - rutas de nivel de aplicación: hay tres propiedades de ruta que puede configurar en el nivel de aplicación para evitar la repetición en todas o la mayoría de las rutas de la configuración de ruta. La regla de enrutamiento concreta invalida la regla de enrutamiento de nivel de aplicación para la misma propiedad. Puede definir las siguientes propiedades en el nivel de aplicación:
predicates
,filters
yssoEnabled
. Si usa laOpenAPI URI
característica para definir rutas, la única propiedad de enrutamiento de nivel de aplicación para admitir esfilters
.
Use el siguiente comando para crear una configuración de ruta. El --app-name
valor debe ser el nombre de una aplicación hospedada en Azure Spring Apps a la que se enrutan las solicitudes.
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>
En el ejemplo siguiente se muestra un archivo JSON que se pasa al parámetro --routes-file
en el comando 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
}
]
}
En las tablas siguientes se muestran las definiciones de ruta. Todas las propiedades son opcionales.
Propiedad | Descripción |
---|---|
title | Título que se aplicará a los métodos de la documentación de OpenAPI generada. |
descripción | Descripción que se aplicará a los métodos de la documentación de OpenAPI generada. |
uri | El URI completo, que reemplaza el nombre de la aplicación a la se enrutan las solicitudes. |
ssoEnabled | Valor que indica si se va a habilitar la validación del inicio de sesión único. Consulte Configuración del inicio de sesión único. |
tokenRelay | Pasa el token de identidad del usuario autenticado actualmente a la aplicación. |
predicados | Una lista de predicados. Consulte Predicados disponibles. |
filters | Lista de filtros. Consulte Filtros disponibles. |
order | Orden de procesamiento de la ruta. Un orden inferior se procesa con mayor prioridad, como en Spring Cloud Gateway. |
etiquetas | Etiquetas de clasificación que se aplican a los métodos de la documentación de OpenAPI generada. |
Nota:
Por motivos de seguridad o compatibilidad no todos los filtros o predicados se admiten en Azure Spring Apps. No se admite lo siguiente:
- BasicAuth
- JWTKey
Uso de rutas en Spring Cloud Gateway
Siga estos pasos para crear una aplicación de ejemplo mediante Spring Cloud Gateway.
Use el comando siguiente para crear una aplicación de prueba denominada test-appen Azure Spring Apps:
az spring app create \ name test-app \ resource-group <resource-group-name> \ service <Azure-Spring-Apps-instance-name>
Asigne un punto de conexión público a la puerta de enlace para acceder a él.
Para ver el estado de ejecución y los recursos proporcionados a Spring Cloud Gateway, abra la instancia de Azure Spring Apps en Azure Portal, seleccione la sección Spring Cloud Gateway y, luego, elija Información general.
Para asignar un punto de conexión público, seleccione Sí junto a Asignar punto de conexión. Aparece una dirección URL en unos minutos. Guárdela para usarla más adelante.
También puede usar la CLI de Azure para asignar el punto de conexión. Use el siguiente comando para asignar el punto de conexión.
az spring gateway update \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --assign-endpoint true
Cree una regla para acceder al punto de conexión de comprobación de estado de la aplicación de prueba mediante Spring Cloud Gateway.
Guarde el siguiente contenido en un archivo test-api.json. Esta configuración incluye un filtro RateLimit, que permite 20 solicitudes cada 10 segundos y un filtro RewritePath, que permite que el punto de conexión de solicitud llegue al punto de conexión estándar de comprobación de estado de 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" ] } ] }
Luego, use el siguiente comando para aplicar la regla a la aplicación
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
También puede ver las rutas en el portal, como se muestra en la captura de pantalla siguiente:
Use el siguiente comando para acceder a la API
test health check
mediante el punto de conexión de puerta de enlace:curl https://<endpoint-url>/test/api/healthcheck
Use los siguientes comandos para consultar las reglas de enrutamiento:
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}'
Utilizar filtros
El proyecto de código abierto Spring Cloud Gateway incluye muchos filtros integrados para su uso en rutas de puerta de enlace. Spring Cloud Gateway proporciona muchos filtros personalizados además de los filtros incluidos en el proyecto de software de código abierto.
En el ejemplo siguiente se muestra cómo aplicar el filtro AddRequestHeadersIfNotPresent
a una ruta:
[
{
"predicates": [
"Path=/api/**",
"Method=GET"
],
"filters": [
"AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
]
}
]
Luego, aplique la definición de ruta mediante el siguiente comando de la CLI de Azure:
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>
Para más información sobre los filtros de ruta disponibles, consulte Uso de filtros de ruta de puerta de enlace de VMware Spring Cloud con el plan Enterprise de Azure Spring Apps.