Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Gateway para Spring oferece uma maneira eficiente e eficiente de rotear, gerenciar e lidar com solicitações de API como parte de uma arquitetura de microsserviços. Ele serve como um Gateway de API 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, você aprenderá a:
- Criar um Gateway para o componente Spring Java
- Atualizar o gateway para o Spring com rotas personalizadas para redirecionar solicitações para aplicativos de contêineres
Importante
Este tutorial usa serviços que podem afetar sua fatura de Azure. Se você decidir seguir o passo a passo, certifique-se de excluir os recursos apresentados neste artigo para evitar cobranças inesperadas.
Pré-requisitos
- Uma conta Azure com uma assinatura ativa. Caso ainda não tenha uma, você pode criar uma gratuitamente.
- CLI do Azure.
Considerações
Ao executar no Gateway para Spring no Aplicativos de Contêiner do Azure, lembre-se dos seguintes detalhes:
| Item | Explicação |
|---|---|
| Escopo | O Gateway para Spring é executado no mesmo ambiente que o aplicativo de contêiner conectado. |
| Recursos | A alocação de recursos do contêiner para o Gateway para Spring é fixa, o número de núcleos da CPU é 0,5 e o tamanho da memória é 1Gi. |
| Preços | A cobrança do Gateway para Spring se enquadra no preço baseado no consumo. Os recursos consumidos por componentes Java gerenciados são cobrados de acordo com as tarifas ativas/ociosas. Você pode excluir componentes que não estão mais em uso para interromper a cobrança. |
Instalação
Antes de começar a trabalhar com o Gateway para Spring, será necessário primeiro criar os recursos necessários.
Execute os seguintes comandos 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 ponto de extremidade do atuador do administrador para o aplicativo de exemplo do 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 LOCATIONA localização da região do Azure onde você cria seu aplicativo de containers e o componente Java. ENVIRONMENTO nome do ambiente Aplicativos de Contêiner do Azure para seu aplicativo de demonstração. RESOURCE_GROUPO nome do grupo de recursos do Azure para seu aplicativo de demonstração. JAVA_COMPONENT_NAMEO nome do componente Java criado para seu aplicativo de contêiner. Nesse caso, você criará um componente do Gateway para Spring Java. IMAGEA imagem do contêiner usada no seu aplicativo de contêiner. Entre no Azure com o 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 do Gateway para Spring e o aplicativo de contêiner.
Usar o componente Gateway para Spring Java
Agora que você tem um ambiente de Aplicativos de Contêiner, poderá criar seu aplicativo de contêiner e usar um gateway para os componentes do Spring Java para rotear a solicitação para eles.
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.fqdnEsse comando retorna a URL do seu aplicativo de contêiner que consome dados de configuração. Copie a URL em um editor de texto para poder usá-lo em uma próxima etapa.
Atualizar as Rotas do Gateway para rotear solicitações
Crie um arquivo YAML com o seguinte conteúdo. Substitua
<MYAPP_URL>pelo FQDN do aplicativo de 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 do Spring com a configuração da 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.fqdnEsse comando atualiza a rota do gateway e retorna a URL do gateway que consome dados de configuração.
O comando retorna a URL do gateway. Visitar esta URL com o caminho
/myapp/healthdeve redirecionar a solicitação para o endpointactuator/healthda aplicação, retornando{"status":"UP","groups":["liveness","readiness"]}.
Limpar os recursos
Os recursos criados neste tutorial têm um efeito sobre sua fatura de Azure. Se você não usar esses serviços a longo prazo, execute o comando a seguir para remover tudo o que foi criado neste tutorial.
az group delete --resource-group $RESOURCE_GROUP
Formato de arquivo de rota
O componente do Gateway para Spring dá suporte à definição de rotas por meio de propriedades com ID, URI, predicados e filtros. Para obter mais informações, confira a documentação do Gateway do Spring Cloud. A seguir, 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 seu Gateway para Spring(#configurable-properties)
A tabela a seguir descreve as propriedades do componente de gateway que você pode configurar para o seu aplicativo. Para obter mais informações, confira Propriedades comuns do aplicativo de Gateway do Spring Cloud.
| Nome da propriedade | Descrição | Valor padrão |
|---|---|---|
spring.cloud.gateway.default-filters |
Lista de definições de filtro que são aplicadas a todas as rotas. | |
spring.cloud.gateway.enabled |
Habilita a funcionalidade do 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 em log. | true |
spring.cloud.gateway.handler-mapping.order |
A ordem de RoutePredicateHandlerMapping. |
1 |
spring.cloud.gateway.loadbalancer.use404 |
false |
|
spring.cloud.gateway.discovery.locator.enabled |
Indicador que habilita a integração do gateway DiscoveryClient. |
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 ou não na integração do gateway. O valor padrão é true. |
true |
spring.cloud.gateway.discovery.locator.lower-case-service-id |
Opção de usar o serviceId de letras minúsculas em predicados e filtros. O valor padrão é false. Útil com o Eureka quando ele automaticamente coloca serviceId em maiúsculas. Portanto, MYSERVICE corresponderia a /myservice/** |
false |
spring.cloud.gateway.discovery.locator.predicates |
||
spring.cloud.gateway.discovery.locator.route-id-prefix |
O prefixo de routeId é definido por padrão como discoveryClient.getClass().getSimpleName() + "_". A ID do serviço é acrescentada para criar a routeId. |
|
spring.cloud.gateway.discovery.locator.url-expression |
Expressão SpEL que cria o URI para cada rota. O valor padrão é 'lb://'+serviceId. |
'lb://'+serviceId |
spring.cloud.gateway.filter.add-request-header.enabled |
Habilita o filtro add-request-header. |
true |
spring.cloud.gateway.filter.add-request-parameter.enabled |
Habilita o filtro add-request-parameter. |
true |
spring.cloud.gateway.filter.add-response-header.enabled |
Habilita o filtro add-response-header. |
true |
spring.cloud.gateway.filter.circuit-breaker.enabled |
Habilita o filtro circuit-breaker. |
true |
spring.cloud.gateway.filter.dedupe-response-header.enabled |
Habilita o filtro dedupe-response-header. |
true |
spring.cloud.gateway.filter.fallback-headers.enabled |
Habilita o filtro fallback-headers. |
true |
spring.cloud.gateway.filter.hystrix.enabled |
Habilita o filtro hystrix. |
true |
spring.cloud.gateway.filter.json-to-grpc.enabled |
Habilita o filtro JSON para gRPC. | true |
spring.cloud.gateway.filter.local-response-cache.enabled |
Habilita o filtro local-response-cache. |
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 expulsar entradas nesta rota em KB, MB e GB. | |
spring.cloud.gateway.filter.local-response-cache.time-to-live |
Tempo para expirar uma entrada de cache, expressa em s para segundos, m para minutos e h para horas. |
5m |
spring.cloud.gateway.filter.map-request-header.enabled |
Habilita o filtro map-request-header. |
true |
spring.cloud.gateway.filter.modify-request-body.enabled |
Habilita o filtro modify-request-body. |
true |
spring.cloud.gateway.filter.modify-response-body.enabled |
Habilita o filtro modify-response-body. |
true |
spring.cloud.gateway.filter.prefix-path.enabled |
Habilita o filtro prefix-path. |
true |
spring.cloud.gateway.filter.preserve-host-header.enabled |
Habilita o filtro preserve-host-header. |
true |
spring.cloud.gateway.filter.redirect-to.enabled |
Habilita o filtro redirect-to. |
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 |
Habilita o filtro remove-request-header. |
true |
spring.cloud.gateway.filter.remove-request-parameter.enabled |
Habilita o filtro remove-request-parameter. |
true |
spring.cloud.gateway.filter.remove-response-header.enabled |
Habilita o filtro remove-response-header. |
true |
spring.cloud.gateway.filter.request-header-size.enabled |
Habilita o filtro request-header-size. |
true |
spring.cloud.gateway.filter.request-header-to-request-uri.enabled |
Habilita o filtro request-header-to-request-uri. |
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 |
Habilita o filtro request-rate-limiter. |
true |
spring.cloud.gateway.filter.request-size.enabled |
Habilita o filtro request-size. |
true |
spring.cloud.gateway.filter.retry.enabled |
Habilita o filtro retry. |
true |
spring.cloud.gateway.filter.rewrite-location-response-header.enabled |
Habilita o filtro rewrite-location-response-header. |
true |
spring.cloud.gateway.filter.rewrite-location.enabled |
Habilita o filtro rewrite-location. |
true |
spring.cloud.gateway.filter.rewrite-path.enabled |
Habilita o filtro rewrite-path. |
true |
spring.cloud.gateway.filter.rewrite-request-parameter.enabled |
Habilita o filtro rewrite-request-parameter. |
true |
spring.cloud.gateway.filter.rewrite-response-header.enabled |
Habilita o filtro rewrite-response-header. |
true |
spring.cloud.gateway.filter.save-session.enabled |
Habilita o filtro save-session. |
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 |
Habilita o filtro secure-headers. |
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 |
Habilita o filtro set-path. |
true |
spring.cloud.gateway.filter.set-request-header.enabled |
Habilita o filtro set-request-header. |
true |
spring.cloud.gateway.filter.set-request-host-header.enabled |
Habilita o filtro set-request-host-header. |
true |
spring.cloud.gateway.filter.set-response-header.enabled |
Habilita o filtro set-response-header. |
true |
spring.cloud.gateway.filter.set-status.enabled |
Habilita o filtro set-status. |
true |
spring.cloud.gateway.filter.strip-prefix.enabled |
Habilita o filtro strip-prefix. |
true |
spring.cloud.gateway.forwarded.enabled |
Habilita o ForwardedHeadersFilter. |
true |
spring.cloud.gateway.global-filter.adapt-cached-body.enabled |
Habilita o filtro global adapt-cached-body. |
true |
spring.cloud.gateway.global-filter.forward-path.enabled |
Habilita o filtro global forward-path. |
true |
spring.cloud.gateway.global-filter.forward-routing.enabled |
Habilita o filtro global forward-routing. |
true |
spring.cloud.gateway.global-filter.load-balancer-client.enabled |
Habilita o filtro global load-balancer-client. |
true |
spring.cloud.gateway.global-filter.local-response-cache.enabled |
Habilita o filtro local-response-cache para todas as rotas, o que permite adicionar uma configuração específica no nível da rota usando um filtro LocalResponseCache. |
true |
spring.cloud.gateway.global-filter.netty-routing.enabled |
Habilita o filtro netty-routing global. |
true |
spring.cloud.gateway.global-filter.netty-write-response.enabled |
Habilita o filtro global netty-write-response. |
true |
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled |
Habilita o filtro global reactive-load-balancer-client. |
true |
spring.cloud.gateway.global-filter.remove-cached-body.enabled |
Habilita o filtro global remove-cached-body. |
true |
spring.cloud.gateway.global-filter.route-to-request-url.enabled |
Habilita o filtro global route-to-request-url. |
true |
spring.cloud.gateway.global-filter.websocket-routing.enabled |
Habilita o filtro global websocket-routing. |
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 intermitência. | X-RateLimit-Burst-Capacity |
spring.cloud.gateway.redis-rate-limiter.config |
||
spring.cloud.gateway.redis-rate-limiter.include-headers |
Se deve ou não incluir cabeçalhos que contêm informações do limitador de taxa. O valor padrão é 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 retorna a configuração da taxa de reposição. | X-RateLimit-Replenish-Rate |
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header |
O nome do cabeçalho que retorna a configuração solicitada de tokens. | 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 predicado after. |
true |
spring.cloud.gateway.predicate.before.enabled |
Habilita o predicado before. |
true |
spring.cloud.gateway.predicate.between.enabled |
Habilita o predicado between. |
true |
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled |
Habilita o predicado cloud-foundry-route-service. |
true |
spring.cloud.gateway.predicate.cookie.enabled |
Habilita o predicado cookie. |
true |
spring.cloud.gateway.predicate.header.enabled |
Habilita o predicado header. |
true |
spring.cloud.gateway.predicate.host.enabled |
Habilita o predicado host. |
true |
spring.cloud.gateway.predicate.host.include-port |
Inclua a porta na correspondência do nome do host. | true |
spring.cloud.gateway.predicate.method.enabled |
Habilita o predicado method. |
true |
spring.cloud.gateway.predicate.path.enabled |
Habilita o predicado path. |
true |
spring.cloud.gateway.predicate.query.enabled |
Habilita o predicado query. |
true |
spring.cloud.gateway.predicate.read-body.enabled |
Habilita o predicado read-body. |
true |
spring.cloud.gateway.predicate.remote-addr.enabled |
Habilita o predicado remote-addr. |
true |
spring.cloud.gateway.predicate.weight.enabled |
Habilita o predicado weight. |
true |
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled |
Habilita o predicado xforwarded-remote-addr. |
true |
spring.cloud.gateway.set-status.original-status-header-name |
O nome do cabeçalho que contém o código HTTP da solicitação proxiada. | |
spring.cloud.gateway.streaming-media-types |
||
spring.cloud.gateway.x-forwarded.enabled |
Indica se XForwardedHeadersFilter está habilitado. |
true |
spring.cloud.gateway.x-forwarded.for-append |
Se a inclusão de X-Forwarded-For como uma lista estiver habilitada. |
true |
spring.cloud.gateway.x-forwarded.for-enabled |
Indica se X-Forwarded-For está habilitado. |
true |
spring.cloud.gateway.x-forwarded.host-append |
Se a anexação de X-Forwarded-Host como uma lista estiver habilitada. |
true |
spring.cloud.gateway.x-forwarded.host-enabled |
Indica se X-Forwarded-Host está habilitado. |
true |
spring.cloud.gateway.x-forwarded.order |
A ordem do XForwardedHeadersFilter. |
0 |
spring.cloud.gateway.x-forwarded.port-append |
Se a inclusão de X-Forwarded-Port como uma lista estiver habilitada. |
true |
spring.cloud.gateway.x-forwarded.port-enabled |
Indica se X-Forwarded-Port está habilitado. |
true |
spring.cloud.gateway.x-forwarded.prefix-append |
Se a inclusão de X-Forwarded-Prefix como uma lista estiver habilitada. |
true |
spring.cloud.gateway.x-forwarded.prefix-enabled |
Indica se X-Forwarded-Prefix está habilitado. |
true |
spring.cloud.gateway.x-forwarded.proto-append |
Se a anexação de X-Forwarded-Proto como uma lista estiver habilitada. |
true |
spring.cloud.gateway.x-forwarded.proto-enabled |
Indica se X-Forwarded-Proto está habilitado. |
true |
spring.cloud.gateway.httpclient.compression |
Habilita a compactação para Netty HttpClient. |
false |
spring.cloud.gateway.httpclient.connect-timeout |
O tempo limite de conexão em milissegundos. O valor padrão é 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 |
Somente para o tipo FIXED, o tempo máximo de espera em milissegundos para a aquisição. |
|
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 |
Somente para o tipo FIXED, o número máximo de conexões antes de iniciar a aquisição pendente nas existentes. | |
spring.cloud.gateway.httpclient.pool.max-idle-time |
Tempo em milissegundos após o qual o canal é 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 máximo de vida. |
|
spring.cloud.gateway.httpclient.pool.metrics |
Permite que as métricas de pools de canais sejam coletadas e registradas no Micrometer. Desabilitado por padrão. | false |
spring.cloud.gateway.httpclient.pool.name |
O nome do mapa do pool de canais. O valor padrão é proxy. |
proxy |
spring.cloud.gateway.httpclient.pool.type |
Tipo de pool que HttpClient deve usar, com padrão sendo ELASTIC. |
|
spring.cloud.gateway.httpclient.response-timeout |
O tempo limite de resposta. | |
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout |
Tempo limite de limpeza de SSL close_notify. O valor padrão é 3000 ms. |
3000ms |
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout |
Tempo limite de leitura de SSL close_notify. O valor padrão é 0 ms. |
0 |
spring.cloud.gateway.httpclient.ssl.handshake-timeout |
Tempo limite de handshake de SSL. O valor padrão é 10000 ms. |
10000ms |
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager |
Instala netty InsecureTrustManagerFactory. Esse valor é inseguro e não é adequado para produção. |
false |
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length |
Tamanho máximo do payload do quadro. | |
spring.cloud.gateway.httpclient.websocket.proxy-ping |
Quadros de ping de proxy para serviços downstream. O valor padrão é true. |
true |
spring.cloud.gateway.httpclient.wiretap |
Habilita a depuração de wiretap para Netty HttpClient. |
false |
spring.cloud.gateway.httpserver.wiretap |
Habilita a depuração de wiretap para Netty HttpServer. |
false |
spring.cloud.gateway.metrics.enabled |
Habilita 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 das tags que foram adicionadas às métricas. | |
spring.cloud.gateway.observability.enabled |
Indica se o suporte à Observabilidade do Micrometer deve ser ativado. | true |
Configurações comuns
A lista a seguir descreve configurações comuns:
- Configurações relacionadas ao registro em log:
logging.level.*logging.group.*- Quaisquer outras configurações no âmbito do namespace
logging.*devem ser proibidas. Por exemplo, a gravação de arquivos de log usandologging.filedeve ser proibida.