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
- Uma instância de serviço de plano do Azure Spring Apps Enterprise já provisionada com o Spring Cloud Gateway habilitado. Para obter mais informações, consulte Guia de início rápido: criar e implantar aplicativos no Azure Spring Apps usando o plano Enterprise.
- CLI do Azure versão 2.0.67 ou posterior. Use o seguinte comando para instalar a extensão Azure Spring Apps:
az extension add --name spring
.
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, comohttp://<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
ouHTTPS
, 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 paraHTTPS
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
,filters
essoEnabled
. Se você usar o recurso para definir rotas, a única propriedade de roteamento no nível doOpenAPI 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.
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>
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.
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
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:
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
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.