Partilhar via


Usar o Spring Cloud Gateway

Nota

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

O plano de consumo padrão e dedicado 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 obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.

Este artigo aplica-se a: ❎ Basic/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 VMware Spring Cloud Gateway é um componente comercial do VMware Tanzu baseado no projeto de código aberto Spring Cloud Gateway. O Spring Cloud Gateway lida com preocupações transversais para as equipes de desenvolvimento de API, como logon único (SSO), controle de acesso, limitação de taxa, resiliência, segurança e muito mais. Você pode acelerar a entrega de API usando padrões modernos nativos da nuvem e qualquer linguagem de programação escolhida para o desenvolvimento de API.

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 transportar declarações autorizadas de JSON Web Token (JWT) para serviços de aplicativo.
  • Autorização de certificado de cliente.
  • Abordagens de limitação de taxas.
  • Configuração do disjuntor.
  • Suporte para acessar serviços de aplicativos por meio de 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 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 de configuração de rota inclui as seguintes partes:

  • URI OpenAPI: Este URI faz referência a uma especificação 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}, em <app-name> que é o nome de um aplicativo no Azure Spring Apps que inclui a definição de API. As especificações OpenAPI 2.0 e OpenAPI 3.0 são suportadas. 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.
  • protocol: O protocolo de back-end do aplicativo para o qual o Spring Cloud Gateway roteia o tráfego. Os valores suportados 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 em sua configuração de rota.
  • rotas no nível do aplicativo: há três propriedades de rota que você pode configurar 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. Você pode definir as seguintes propriedades no nível do aplicativo: predicates, filterse ssoEnabled. Se você usar o recurso para definir rotas, a única propriedade de roteamento no nível do OpenAPI URI aplicativo a ser suportada é 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 encaminhadas.

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 exemplo a seguir mostra um arquivo JSON que é passado para o --routes-file parâmetro 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.

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

Nota

Por motivos de segurança ou compatibilidade, nem todos os filtros/predicados são suportados no Azure Spring Apps. Os seguintes itens não são suportados:

  • BasicAuth
  • JWTKey

Usar rotas para o Spring Cloud Gateway

Use 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 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 de execução e os recursos fornecidos ao Spring Cloud Gateway, abra sua instância do Azure Spring Apps no portal do Azure, selecione a seção Spring Cloud Gateway e selecione 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 o URL para usar mais tarde.

    Captura de ecrã da página de descrição geral do Azure Spring Apps do 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. 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 da solicitação atinja o ponto de extremidade padrão de verificação de integridade 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 visualizar as rotas no portal, conforme mostrado na captura de tela a seguir:

    Captura de ecrã do portal do Azure Azure Spring Apps Spring Cloud Gateway a mostrar o painel 'Regras de roteamento'.

  4. Use o seguinte comando para acessar a test health check API 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}'
    

Utilizar filtros

O projeto de código aberto Spring Cloud Gateway inclui muitos filtros integrados para uso em rotas de Gateway. O Spring Cloud Gateway fornece muitos filtros personalizados, além dos filtros incluídos no projeto OSS.

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 os filtros de rota do VMware Spring Cloud Gateway com o plano do Azure Spring Apps Enterprise.

Próximos passos