Uso de Spring Cloud Gateway

Nota:

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

Este artículo se aplica a:❌ Básico o Estándar ✔️ Enterprise

En este artículo se muestra cómo usar VMware Spring Cloud Gateway con el plan de Azure Spring Apps 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, VMware Spring Cloud Gateway genera automáticamente la documentación de OpenAPI versión 3 después de cualquier adición o cambio de configuración de ruta.

Requisitos previos

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, como http://<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 o HTTPS, y el valor predeterminado es HTTP. Para proteger el tráfico de la puerta de enlace de Spring Cloud a la aplicación habilitada para HTTPS, debe establecer el protocolo en HTTPS 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, filtersy ssoEnabled. Si usa la OpenAPI URI característica para definir rutas, la única propiedad de enrutamiento de nivel de aplicación para admitir es filters.

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 invalida el nombre de la aplicación a la que solicita la ruta.
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.
filtros 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.

  1. Use el comando siguiente para crear una aplicación de prueba denominada test-app en Azure Spring Apps:

    az spring app create \
        name test-app \
        resource-group <resource-group-name> \
        service <Azure-Spring-Apps-instance-name>
    
  2. 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 junto a Asignar punto de conexión. Aparece una dirección URL en unos minutos. Guárdela para usarla más adelante.

    Screenshot of Azure portal Azure Spring Apps overview page with 'Assign endpoint' highlighted.

    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
    
  3. 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:

    Screenshot of Azure portal Azure Spring Apps Spring Cloud Gateway page showing 'Routing rules' pane.

  4. 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
    
  5. 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 AddRequestHeadersIfNotPresent filtro 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 de Azure Spring Apps Enterprise.

Pasos siguientes