Share via


Usar o Spring Cloud Gateway

Nota

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

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 ou um URI construído, como https://petstore3.swagger.io/api/v3/openapi.jsonhttp://<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
cargo 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.

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

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

  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