Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Gateway for Spring oferece uma forma eficiente e poderosa de encaminhar, gerir e tratar pedidos de API como parte de uma arquitetura de microserviços. Ele serve como um API Gateway que roteia solicitações externas para diferentes serviços, adicionando vários recursos, como filtragem, balanceamento de carga e muito mais. Neste artigo, você aprenderá a criar um gateway que direciona solicitações para seus aplicativos de contêiner.
Neste tutorial, irá aprender a:
- Criar um Gateway para o componente Spring Java
- Atualize o gateway para o spring com rotas personalizadas para redirecionar solicitações para aplicativos de contêiner
Importante
Este tutorial utiliza serviços que podem afetar a sua fatura Azure. Se você decidir acompanhar o passo a passo, certifique-se de excluir os recursos apresentados neste artigo para evitar cobranças inesperadas.
Pré-requisitos
- Uma conta no Azure com uma subscrição ativa. Se ainda não tiver um, pode criar um gratuitamente.
- CLI do Azure.
Considerações
Ao correr no Gateway for Spring no Azure Container Apps, esteja atento aos seguintes detalhes:
| Item | Explicação |
|---|---|
| Scope | O Gateway for Spring é executado no mesmo ambiente que o aplicativo de contêiner conectado. |
| Recursos | A alocação de recursos de contêiner para o Gateway for Spring é fixa, o número de núcleos de CPU é 0,5 e o tamanho da memória é 1Gi. |
| Preços | O Gateway for Spring billing enquadra-se nos preços baseados no consumo. Os recursos consumidos pelos componentes Java geridos são faturados de acordo com as taxas de atividade/inatividade. Você pode excluir componentes que não estão mais em uso para interromper a cobrança. |
Configurar
Antes de começar a trabalhar com o Gateway for Spring, primeiro você precisa criar os recursos necessários.
Execute os comandos a seguir para criar seu grupo de recursos e o ambiente de Aplicativos de Contêiner.
Crie variáveis para dar suporte à configuração do aplicativo. Esses valores são fornecidos para você para os fins desta lição. Usamos o endpoint actuator do aplicativo de exemplo do Admin para Spring nesta lição.
export LOCATION=eastus export RESOURCE_GROUP=my-spring-cloud-resource-group export ENVIRONMENT=my-spring-cloud-environment export JAVA_COMPONENT_NAME=mygateway export APP_NAME=myapp export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"Variável Descrição LOCATIONO local da região Azure onde cria a sua aplicação de contentores e o componente Java. ENVIRONMENTO nome do ambiente Azure Container Apps para a sua aplicação de demonstração. RESOURCE_GROUPO nome do grupo de recursos do Azure para a sua aplicação de demonstração. JAVA_COMPONENT_NAMEO nome do componente Java criado para a tua aplicação container. Neste caso, cria um componente Gateway para Spring Java. IMAGEA imagem de contêiner usada em seu aplicativo de contêiner. Inicie sessão no Azure com a CLI do Azure.
az loginCrie um grupo de recursos.
az group create --name $RESOURCE_GROUP --location $LOCATIONCrie seu ambiente de aplicativos de contêiner.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATIONEsse ambiente é usado para hospedar o componente Gateway for Spring e seu aplicativo de contêiner.
Use o componente Gateway para Spring Java
Agora que você tem um ambiente de Apps de Contêiner, pode criar seu aplicativo de contêiner utilizando um gateway para os componentes Spring Java, a fim de rotear solicitações para os mesmos.
Crie o componente Gateway para Spring Java.
az containerapp env java-component gateway-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \Crie o aplicativo de contêiner que tenha o nome de domínio totalmente qualificado (FQDN).
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --ingress external \ --target-port 8080 \ --query properties.configuration.ingress.fqdnEste comando retorna a URL do seu aplicativo de contêiner que consome dados de configuração. Copie o URL para um editor de texto para que você possa usá-lo na próxima etapa.
Atualizar as rotas do gateway para encaminhar solicitações
Crie um arquivo YAML com o seguinte conteúdo. Substitua
<MYAPP_URL>pelo FQDN do aplicativo contêiner da etapa anterior.springCloudGatewayRoutes: - id: "route1" uri: "<MYAPP_URL>" predicates: - "Path=/myapp/{path}" filters: - "SetPath=/actuator/{path}"Execute o seguinte comando para atualizar o componente Gateway for Spring com sua configuração de rota.
az containerapp env java-component gateway-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --route-yaml <PTAH_TO_ROUTE_YAML_FILE> \ --query properties.ingress.fqdnEste comando atualiza a rota do gateway e devolve o URL do seu gateway que utiliza dados de configuração.
O comando retorna a URL do gateway. Visitar este URL com o caminho
/myapp/healthdeve encaminhar a solicitação para o endpointactuator/healthdo seu aplicativo, retornando{"status":"UP","groups":["liveness","readiness"]}.
Limpar recursos
Os recursos criados neste tutorial têm um impacto na sua fatura do Azure. Se você não vai usar esses serviços a longo prazo, execute o seguinte comando para remover tudo o que foi criado neste tutorial.
az group delete --resource-group $RESOURCE_GROUP
Formato de arquivo de rota
O componente Gateway for Spring oferece suporte à definição de rotas por meio de propriedades com ID, URI, predicados e filtros. Para obter mais informações, consulte a documentação do Spring Cloud Gateway. A seguir está um exemplo de arquivo YAML que demonstra como configurar essas propriedades.
springCloudGatewayRoutes:
- id: "route1"
uri: "https://otherjavacomponent.myenvironment.test.net"
predicates:
- "Path=/v1/{path}"
- "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
filters:
- "SetPath=/{path}"
- id: "route2"
uri: "https://otherjavacomponent.myenvironment.test.net"
predicates:
- "Path=/v2/{path}"
- "After=2024-01-01T00:00:00.000-00:00[America/Denver]"
filters:
- "SetPath=/{path}"
Lista de configurações permitidas para o seu Gateway for Spring(#configurable-properties)
A tabela a seguir descreve as propriedades do componente de gateway que você pode configurar para seu aplicativo. Para obter mais informações, consulte Propriedades comuns do aplicativo Spring Cloud Gateway.
| Nome da propriedade | Descrição | Valor predefinido |
|---|---|---|
spring.cloud.gateway.default-filters |
Lista de definições de filtro que são aplicadas a cada rota. | |
spring.cloud.gateway.enabled |
Habilita a funcionalidade de gateway. | true |
spring.cloud.gateway.fail-on-route-definition-error |
Opção para falhar em erros de definição de rota, o padrão é true. Caso contrário, um aviso será registrado. | true |
spring.cloud.gateway.handler-mapping.order |
A ordem de RoutePredicateHandlerMapping. |
1 |
spring.cloud.gateway.loadbalancer.use404 |
false |
|
spring.cloud.gateway.discovery.locator.enabled |
Sinalizador que permite a DiscoveryClient integração de gateway. |
false |
spring.cloud.gateway.discovery.locator.filters |
||
spring.cloud.gateway.discovery.locator.include-expression |
Expressão SpEL que avalia se um serviço deve ser incluído na integração de gateway ou não. O valor predefinido é true. |
true |
spring.cloud.gateway.discovery.locator.lower-case-service-id |
Opção para converter em minúsculas serviceId em predicados e filtros. O valor predefinido é false. Útil com Eureka quando coloca automaticamente em maiúsculas serviceId. Então, MYSERVICE corresponderia a /myservice/** |
false |
spring.cloud.gateway.discovery.locator.predicates |
||
spring.cloud.gateway.discovery.locator.route-id-prefix |
O prefixo do routeId predefinido para discoveryClient.getClass().getSimpleName() + "_". O ID de serviço é anexado para criar o routeId. |
|
spring.cloud.gateway.discovery.locator.url-expression |
Expressão SpEL que cria o URI para cada rota. O valor predefinido é 'lb://'+serviceId. |
'lb://'+serviceId |
spring.cloud.gateway.filter.add-request-header.enabled |
Ativa o add-request-header filtro. |
true |
spring.cloud.gateway.filter.add-request-parameter.enabled |
Ativa o add-request-parameter filtro. |
true |
spring.cloud.gateway.filter.add-response-header.enabled |
Ativa o add-response-header filtro. |
true |
spring.cloud.gateway.filter.circuit-breaker.enabled |
Ativa o circuit-breaker filtro. |
true |
spring.cloud.gateway.filter.dedupe-response-header.enabled |
Ativa o dedupe-response-header filtro. |
true |
spring.cloud.gateway.filter.fallback-headers.enabled |
Ativa o fallback-headers filtro. |
true |
spring.cloud.gateway.filter.hystrix.enabled |
Ativa o hystrix filtro. |
true |
spring.cloud.gateway.filter.json-to-grpc.enabled |
Habilita o filtro de JSON para gRPC. | true |
spring.cloud.gateway.filter.local-response-cache.enabled |
Ativa o local-response-cache filtro. |
false |
spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy |
||
spring.cloud.gateway.filter.local-response-cache.size |
Tamanho máximo do cache para remover entradas para essa rota em KB, MB e GB. | |
spring.cloud.gateway.filter.local-response-cache.time-to-live |
Tempo para expirar uma entrada de cache, expresso em s segundos, m minutos e h horas. |
5m |
spring.cloud.gateway.filter.map-request-header.enabled |
Ativa o map-request-header filtro. |
true |
spring.cloud.gateway.filter.modify-request-body.enabled |
Ativa o modify-request-body filtro. |
true |
spring.cloud.gateway.filter.modify-response-body.enabled |
Ativa o modify-response-body filtro. |
true |
spring.cloud.gateway.filter.prefix-path.enabled |
Ativa o prefix-path filtro. |
true |
spring.cloud.gateway.filter.preserve-host-header.enabled |
Ativa o preserve-host-header filtro. |
true |
spring.cloud.gateway.filter.redirect-to.enabled |
Ativa o redirect-to filtro. |
true |
spring.cloud.gateway.filter.remove-hop-by-hop.headers |
||
spring.cloud.gateway.filter.remove-hop-by-hop.order |
0 |
|
spring.cloud.gateway.filter.remove-request-header.enabled |
Ativa o remove-request-header filtro. |
true |
spring.cloud.gateway.filter.remove-request-parameter.enabled |
Ativa o remove-request-parameter filtro. |
true |
spring.cloud.gateway.filter.remove-response-header.enabled |
Ativa o remove-response-header filtro. |
true |
spring.cloud.gateway.filter.request-header-size.enabled |
Ativa o request-header-size filtro. |
true |
spring.cloud.gateway.filter.request-header-to-request-uri.enabled |
Ativa o request-header-to-request-uri filtro. |
true |
spring.cloud.gateway.filter.request-rate-limiter.default-key-resolver |
||
spring.cloud.gateway.filter.request-rate-limiter.default-rate-limiter |
||
spring.cloud.gateway.filter.request-rate-limiter.enabled |
Ativa o request-rate-limiter filtro. |
true |
spring.cloud.gateway.filter.request-size.enabled |
Ativa o request-size filtro. |
true |
spring.cloud.gateway.filter.retry.enabled |
Ativa o retry filtro. |
true |
spring.cloud.gateway.filter.rewrite-location-response-header.enabled |
Ativa o rewrite-location-response-header filtro. |
true |
spring.cloud.gateway.filter.rewrite-location.enabled |
Ativa o rewrite-location filtro. |
true |
spring.cloud.gateway.filter.rewrite-path.enabled |
Ativa o rewrite-path filtro. |
true |
spring.cloud.gateway.filter.rewrite-request-parameter.enabled |
Ativa o rewrite-request-parameter filtro. |
true |
spring.cloud.gateway.filter.rewrite-response-header.enabled |
Ativa o rewrite-response-header filtro. |
true |
spring.cloud.gateway.filter.save-session.enabled |
Ativa o save-session filtro. |
true |
spring.cloud.gateway.filter.secure-headers.content-security-policy |
default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline' |
|
spring.cloud.gateway.filter.secure-headers.content-type-options |
nosniff |
|
spring.cloud.gateway.filter.secure-headers.disable |
||
spring.cloud.gateway.filter.secure-headers.download-options |
noopen |
|
spring.cloud.gateway.filter.secure-headers.enabled |
Ativa o secure-headers filtro. |
true |
spring.cloud.gateway.filter.secure-headers.frame-options |
DENY |
|
spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies |
none |
|
spring.cloud.gateway.filter.secure-headers.referrer-policy |
no-referrer |
|
spring.cloud.gateway.filter.secure-headers.strict-transport-security |
max-age=631138519 |
|
spring.cloud.gateway.filter.secure-headers.xss-protection-header |
1 ; mode=block |
|
spring.cloud.gateway.filter.set-path.enabled |
Ativa o set-path filtro. |
true |
spring.cloud.gateway.filter.set-request-header.enabled |
Ativa o set-request-header filtro. |
true |
spring.cloud.gateway.filter.set-request-host-header.enabled |
Ativa o set-request-host-header filtro. |
true |
spring.cloud.gateway.filter.set-response-header.enabled |
Ativa o set-response-header filtro. |
true |
spring.cloud.gateway.filter.set-status.enabled |
Ativa o set-status filtro. |
true |
spring.cloud.gateway.filter.strip-prefix.enabled |
Ativa o strip-prefix filtro. |
true |
spring.cloud.gateway.forwarded.enabled |
Habilita o ForwardedHeadersFilter. |
true |
spring.cloud.gateway.global-filter.adapt-cached-body.enabled |
Habilita o adapt-cached-body filtro global. |
true |
spring.cloud.gateway.global-filter.forward-path.enabled |
Habilita o forward-path filtro global. |
true |
spring.cloud.gateway.global-filter.forward-routing.enabled |
Habilita o forward-routing filtro global. |
true |
spring.cloud.gateway.global-filter.load-balancer-client.enabled |
Habilita o load-balancer-client filtro global. |
true |
spring.cloud.gateway.global-filter.local-response-cache.enabled |
Habilita o local-response-cache filtro para todas as rotas, o que permite adicionar uma configuração específica no nível da rota usando um LocalResponseCache filtro. |
true |
spring.cloud.gateway.global-filter.netty-routing.enabled |
Ativa o netty-routing global filtro. |
true |
spring.cloud.gateway.global-filter.netty-write-response.enabled |
Habilita o netty-write-response filtro global. |
true |
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled |
Habilita o reactive-load-balancer-client filtro global. |
true |
spring.cloud.gateway.global-filter.remove-cached-body.enabled |
Habilita o remove-cached-body filtro global. |
true |
spring.cloud.gateway.global-filter.route-to-request-url.enabled |
Habilita o route-to-request-url filtro global. |
true |
spring.cloud.gateway.global-filter.websocket-routing.enabled |
Habilita o websocket-routing filtro global. |
true |
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping |
Se a configuração global do CORS deve ser adicionada ao manipulador de URL. | false |
spring.cloud.gateway.globalcors.cors-configurations |
||
spring.cloud.gateway.redis-rate-limiter.burst-capacity-header |
O nome do cabeçalho que retorna a configuração de capacidade de pico. | X-RateLimit-Burst-Capacity |
spring.cloud.gateway.redis-rate-limiter.config |
||
spring.cloud.gateway.redis-rate-limiter.include-headers |
Incluir ou não cabeçalhos contendo informações do limitador de taxa. O valor predefinido é true. |
true |
spring.cloud.gateway.redis-rate-limiter.remaining-header |
O nome do cabeçalho que retorna o número de solicitações restantes durante o segundo atual. | X-RateLimit-Remaining |
spring.cloud.gateway.redis-rate-limiter.replenish-rate-header |
O nome do cabeçalho que devolve a configuração da taxa de reabastecimento. | X-RateLimit-Replenish-Rate |
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header |
O nome do cabeçalho que retorna a configuração de tokens solicitada. | X-RateLimit-Requested-Tokens |
spring.cloud.gateway.restrictive-property-accessor.enabled |
Restringe o acesso a métodos e propriedades no SpEL. | true |
spring.cloud.gateway.predicate.after.enabled |
Habilita o after predicado. |
true |
spring.cloud.gateway.predicate.before.enabled |
Habilita o before predicado. |
true |
spring.cloud.gateway.predicate.between.enabled |
Habilita o between predicado. |
true |
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled |
Habilita o cloud-foundry-route-service predicado. |
true |
spring.cloud.gateway.predicate.cookie.enabled |
Habilita o cookie predicado. |
true |
spring.cloud.gateway.predicate.header.enabled |
Habilita o header predicado. |
true |
spring.cloud.gateway.predicate.host.enabled |
Habilita o host predicado. |
true |
spring.cloud.gateway.predicate.host.include-port |
Inclua a porta na correspondência com o nome do host. | true |
spring.cloud.gateway.predicate.method.enabled |
Habilita o method predicado. |
true |
spring.cloud.gateway.predicate.path.enabled |
Habilita o path predicado. |
true |
spring.cloud.gateway.predicate.query.enabled |
Habilita o query predicado. |
true |
spring.cloud.gateway.predicate.read-body.enabled |
Habilita o read-body predicado. |
true |
spring.cloud.gateway.predicate.remote-addr.enabled |
Habilita o remote-addr predicado. |
true |
spring.cloud.gateway.predicate.weight.enabled |
Habilita o weight predicado. |
true |
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled |
Habilita o xforwarded-remote-addr predicado. |
true |
spring.cloud.gateway.set-status.original-status-header-name |
O nome do cabeçalho que contém o código HTTP do pedido proxy. | |
spring.cloud.gateway.streaming-media-types |
||
spring.cloud.gateway.x-forwarded.enabled |
Indica se XForwardedHeadersFilter está ativado. |
true |
spring.cloud.gateway.x-forwarded.for-append |
Se o acréscimo do X-Forwarded-For como lista estiver ativado. |
true |
spring.cloud.gateway.x-forwarded.for-enabled |
Indica se X-Forwarded-For está ativado. |
true |
spring.cloud.gateway.x-forwarded.host-append |
Se adicionar X-Forwarded-Host como uma lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.host-enabled |
Indica se X-Forwarded-Host está ativado. |
true |
spring.cloud.gateway.x-forwarded.order |
A ordem do XForwardedHeadersFilter. |
0 |
spring.cloud.gateway.x-forwarded.port-append |
Se o acrescentar de X-Forwarded-Port como lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.port-enabled |
Indica se X-Forwarded-Port está ativado. |
true |
spring.cloud.gateway.x-forwarded.prefix-append |
Se adicionar X-Forwarded-Prefix como uma lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.prefix-enabled |
Indica se X-Forwarded-Prefix está ativado. |
true |
spring.cloud.gateway.x-forwarded.proto-append |
Se estiver habilitada a adição de X-Forwarded-Proto como uma lista. |
true |
spring.cloud.gateway.x-forwarded.proto-enabled |
Indica se X-Forwarded-Proto está ativado. |
true |
spring.cloud.gateway.httpclient.compression |
Permite a compressão para Netty HttpClient. |
false |
spring.cloud.gateway.httpclient.connect-timeout |
O tempo limite de conexão em milissegundos. O valor predefinido é 30s. |
|
spring.cloud.gateway.httpclient.max-header-size |
O tamanho máximo do cabeçalho de resposta. | |
spring.cloud.gateway.httpclient.max-initial-line-length |
O comprimento máximo da linha inicial. | |
spring.cloud.gateway.httpclient.pool.acquire-timeout |
Apenas para o tipo FIXED, o tempo máximo de espera para adquirir é especificado em milissegundos. |
|
spring.cloud.gateway.httpclient.pool.eviction-interval |
Execute verificações regulares de remoção em segundo plano em um intervalo especificado. Desabilitado por padrão ({@link Duration#ZERO}). |
0 |
spring.cloud.gateway.httpclient.pool.max-connections |
Apenas aplicável ao tipo FIXO, o número máximo de conexões antes de iniciar o processo de aquisição pendente nas já existentes. | |
spring.cloud.gateway.httpclient.pool.max-idle-time |
Tempo em milissegundos, após o qual o canal está fechado. Se NULL, não há tempo ocioso máximo. |
|
spring.cloud.gateway.httpclient.pool.max-life-time |
Duração após a qual o canal é fechado. Se NULL, não há tempo de vida máximo. |
|
spring.cloud.gateway.httpclient.pool.metrics |
Permite que as métricas dos grupos de canais sejam coletadas e registadas no Micrometer. Desativado por predefinição. | false |
spring.cloud.gateway.httpclient.pool.name |
O nome do mapa do pool de canais. O valor predefinido é proxy. |
proxy |
spring.cloud.gateway.httpclient.pool.type |
Tipo de pool para HttpClient usar, o padrão é ELASTIC. |
|
spring.cloud.gateway.httpclient.response-timeout |
O tempo limite de resposta. | |
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout |
Tempo limite de esvaziamento SSL close_notify. O valor predefinido é 3000 ms. |
3000ms |
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout |
Tempo limite de leitura SSL close_notify. O valor predefinido é 0 ms. |
0 |
spring.cloud.gateway.httpclient.ssl.handshake-timeout |
Tempo limite de handshake SSL. O valor predefinido é 10000 ms. |
10000ms |
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager |
Instala netty InsecureTrustManagerFactory. Este valor é inseguro e não é adequado para produção. |
false |
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length |
Comprimento máximo da carga útil do quadro. | |
spring.cloud.gateway.httpclient.websocket.proxy-ping |
Quadros de ping proxy para serviços downstream. O valor predefinido é true. |
true |
spring.cloud.gateway.httpclient.wiretap |
Permite a depuração de escutas telefônicas para Netty HttpClient. |
false |
spring.cloud.gateway.httpserver.wiretap |
Permite a depuração de escutas telefônicas para Netty HttpServer. |
false |
spring.cloud.gateway.metrics.enabled |
Permite a coleta de dados de métricas. | false |
spring.cloud.gateway.metrics.prefix |
O prefixo de todas as métricas emitidas pelo gateway. | spring.cloud.gateway |
spring.cloud.gateway.metrics.tags |
Mapa de tags que foi adicionado às métricas. | |
spring.cloud.gateway.observability.enabled |
Indica se o suporte de observabilidade do Micrometer deve ser ativado. | true |
Configurações comuns
A lista a seguir descreve configurações comuns:
- Configurações relacionadas ao registo:
logging.level.*logging.group.*- Quaisquer outras configurações em
logging.*namespace devem ser proibidas. Por exemplo, escrever arquivos de log usandologging.filedeve ser proibido.