Compartilhar via


Usar o Spring Cloud Gateway

Observação

Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.

O plano consumo e dedicado Standard será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano dedicado e consumo Standard dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo se aplica a: ❎ Básico/Standard ✅ Enterprise

Este artigo mostra a você como usar o Gateway do Spring Cloud da VMware com o plano Enterprise dos Aplicativos Spring do Azure para rotear solicitações para seus aplicativos.

O Spring Cloud Gateway do VMware é um componente comercial do VMware Tanzu baseado no projeto do Spring Cloud Gateway de código aberto. O Spring Cloud Gateway cuida de preocupações variadas das equipes de desenvolvimento de API, como SSO (logon único), controle de acesso, limitação de taxa, resiliência, segurança, entre outros. É possível acelerar a entrega de APIs usando padrões nativos de nuvem modernos e qualquer linguagem de programação escolhida para o desenvolvimento delas.

O Spring Cloud Gateway inclui os seguintes recursos:

  • Configuração de roteamento dinâmico, independente de aplicativos individuais que podem ser aplicados e alterados sem recompilação.
  • Filtros de rota de API comercial para transporte de declarações JWT (Token Web JSON) autorizadas para os serviços de aplicativo.
  • Autorização de certificado do cliente.
  • Abordagens de limitação de taxa.
  • Configuração do disjuntor.
  • Suporte para acessar serviços de aplicativo usando as credenciais de Autenticação Básica HTTP.

Para se integrar com o portal de API do Tanzu da VMware, o Gateway do Spring Cloud da VMware gera a documentação do OpenAPI versão 3 automaticamente após qualquer alteração ou acréscimo na configuração de rota.

Pré-requisitos

Configurar rotas

Esta seção descreve como adicionar, atualizar e gerenciar rotas de API para aplicativos que usam o Spring Cloud Gateway.

A definição da configuração de rota inclui as seguintes partes:

  • URI do OpenAPI: esse URI faz referência a uma especificação do OpenAPI. Você pode usar um ponto de extremidade de URI público, como https://petstore3.swagger.io/api/v3/openapi.json ou um URI construído, como http://<app-name>/{relative-path-to-OpenAPI-spec}, onde <app-name> é o nome de um Aplicativos Spring do Azure que inclui a definição de API. Há suporte para as especificações do OpenAPI 2.0 e do OpenAPI 3.0. A especificação é mostrada no portal de API, se estiver habilitado.
  • rotas: uma lista de regras de rota para direcionar o tráfego para aplicativos e aplicar filtros.
  • protocolo: o protocolo de back-end do aplicativo para o qual o Spring Cloud Gateway roteia o tráfego. Os valores com suporte do protocolo são HTTP ou HTTPS e o padrão é HTTP. Para proteger o tráfego do Spring Cloud Gateway para seu aplicativo habilitado para HTTPS, você precisa definir o protocolo para HTTPS na configuração de rota.
  • Rotas de nível de aplicativo: há três propriedades de rota que podem ser configuradas no nível do aplicativo para evitar a repetição em todas ou na maioria das rotas na configuração de rota. A regra de roteamento concreta substitui a regra de roteamento no nível do aplicativo para a mesma propriedade. É possível definir as seguintes propriedades no nível do aplicativo: predicates, filters e ssoEnabled. Se você usar o recurso OpenAPI URI para definir rotas, a única propriedade de roteamento no nível do aplicativo a receber suporte será filters.

Use o comando a seguir para criar uma configuração de roteamento. O valor --app-name deve ser o nome de um aplicativo hospedado nos Aplicativos Spring do Azure para o qual as solicitações são roteadas.

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>

O seguinte exemplo mostra um arquivo JSON passado para o parâmetro --routes-file no 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
      }
   ]
}

A tabela a seguir lista as definições de rota. Todas as propriedades são opcionais.

Propriedade Descrição
title Um título a ser aplicado aos métodos na documentação do OpenAPI gerada.
descrição Uma descrição a ser aplicada aos métodos na documentação do OpenAPI gerada.
uri O URI completo, que substitui o nome do aplicativo para o qual as solicitações são roteadas.
ssoEnabled Um valor que indica se a validação de SSO deve ser habilitada. Consulte Configurar o logon único.
tokenRelay Transmite o token de identidade do usuário autenticado atualmente para o aplicativo.
predicados Uma lista de predicados. Consulte Predicados disponíveis.
filters Uma lista de filtros. Consulte Filtros disponíveis.
ordem A ordem de processamento da rota. Uma ordem inferior é processada com precedência mais alta, como no Spring Cloud Gateway.
tags Tags de classificação que são aplicadas aos métodos na documentação do OpenAPI que é gerada.

Observação

Por motivos de segurança/compatibilidade, nem todos os filtros/predicados têm suporte nos Aplicativos Spring do Azure. Não há suporte para o seguinte:

  • BasicAuth
  • JWTKey

Usar rotas para o Spring Cloud Gateway

Siga as etapas a seguir para criar um aplicativo de exemplo usando o Spring Cloud Gateway.

  1. Use o seguinte comando para criar um aplicativo de teste chamado test-app nos Aplicativos Spring do Azure:

    az spring app create \
        name test-app \
        resource-group <resource-group-name> \
        service <Azure-Spring-Apps-instance-name>
    
  2. Atribua um ponto de extremidade público ao gateway para acessá-lo.

    Para exibir o estado em execução e os recursos dados ao Spring Cloud Gateway, abra a instância dos Aplicativos Spring do Azure no portal do Azure, selecione a seção Spring Cloud Gateway e, em seguida, Visão geral.

    Para atribuir um ponto de extremidade público, selecione Sim ao lado de Atribuir ponto de extremidade. Uma URL aparece após alguns minutos. Salve-a para uso posterior.

    Captura de tela do página de visão geral do Azure Spring Apps no portal do Azure com 'Atribuir ponto de extremidade' realçado.

    Você também pode usar a CLI do Azure para atribuir o ponto de extremidade. Execute o comando a seguir para atribuir o ponto de extremidade.

    az spring gateway update \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --assign-endpoint true
    
  3. Crie uma regra para acessar o ponto de extremidade de verificação de integridade do aplicativo de teste por meio do Spring Cloud Gateway.

    Salve o conteúdo a seguir em um arquivo test-api.json. Essa configuração inclui um filtro RateLimit, que permite 20 solicitações a cada 10 segundos, e um filtro RewritePath, que permite que o ponto de extremidade de solicitação atinja o ponto de extremidade de verificação de integridade padrão do 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"
          ]
        }
      ]
    }
    

    Em seguida, use o seguinte comando para aplicar a regra ao aplicativo 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
    

    Você também pode exibir as rotas no portal, conforme mostrado na captura de tela a seguir:

    Captura de tela do portal do Azure mostrando a página do Spring Cloud Gateway no Azure Spring Apps com o painel  'Regras de roteamento' sendo exibido.

  4. Use o seguinte comando para acessar a API test health check por meio do ponto de extremidade do gateway:

    curl https://<endpoint-url>/test/api/healthcheck
    
  5. Use os seguintes comandos para consultar as regras de roteamento:

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

Use filtros

O projeto do Spring Cloud Gateway de código aberto inclui muitos filtros internos para uso nas rotas de Gateway. O Spring Cloud Gateway fornece muitos filtros personalizados além dos filtros incluídos no projeto do software livre.

O exemplo a seguir mostra como aplicar o filtro AddRequestHeadersIfNotPresent a uma rota:

[
  {
    "predicates": [
      "Path=/api/**",
      "Method=GET"
    ],
    "filters": [
      "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
    ]
  }
]

Em seguida, aplique a definição de rota usando o seguinte comando da CLI do 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 obter mais informações sobre os filtros de rota disponíveis, confira Como usar os Filtros de Rota do Gateway do Spring Cloud da VMware com o plano Enterprise dos Aplicativos Spring do Azure.

Próximas etapas