Share via


Usar o Spring Cloud Gateway

Observação

Azure Spring Apps é o novo nome do serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns locais por um tempo enquanto trabalhamos para atualizar ativos como capturas de tela, vídeos e diagramas.

Este artigo se aplica a(o):❌ Básico/Standard ✔️ Enterprise

Este artigo mostra como usar o VMware Spring Cloud Gateway com o plano do Azure Spring Apps Enterprise 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 integrar com o portal de API para VMware Tanzu, o VMware Spring Cloud Gateway gera automaticamente a documentação do OpenAPI versão 3 após quaisquer adições ou alterações de 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 é exibida no portal da API, se habilitada.
  • 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 rota. O --app-name valor deve ser o nome de um aplicativo hospedado no Azure Spring Apps 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.
marcas Tags de classificação que são aplicadas a métodos na documentação OpenAPI 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 comando a seguir para criar um aplicativo de teste chamado test-app no Azure Spring Apps:

    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. Um URL aparece em poucos minutos. Salve-a para uso posterior.

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

    Você também pode usar a CLI do Azure para atribuir o ponto de extremidade. Use 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:

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

  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 AddRequestHeadersIfNotPresent filtro 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 filtros de rota disponíveis, consulte Como usar filtros de rota do VMware Spring Cloud Gateway com o plano do Azure Spring Apps Enterprise.

Próximas etapas