Conectar-se a um Gateway gerenciado para Spring em Aplicativos de Contêiner do Azure (visualização)
O Gateway for Spring oferece uma maneira eficiente e poderosa de rotear, gerenciar e lidar com solicitações de API como parte de uma arquitetura de microsserviç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 componente Gateway para Spring Java
- Atualize o gateway para o spring com rotas personalizadas para redirecionar solicitações para aplicativos de contêiner
Importante
Este tutorial usa serviços que podem afetar sua fatura do 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 do Azure com uma subscrição ativa. Se ainda não tiver um, pode criar um gratuitamente.
- CLI do Azure.
Considerações
Ao executar no Gateway for Spring em Aplicativos de Contêiner do Azure, esteja ciente dos 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 gerenciados são cobrados pelas taxas ativas/ociosas. 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 atuador do aplicativo de exemplo admin for 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 Description LOCATION
O local da região do Azure onde você cria seu aplicativo de contêiner e o componente Java. ENVIRONMENT
O nome do ambiente dos Aplicativos de Contêiner do Azure para seu aplicativo de demonstração. RESOURCE_GROUP
O nome do grupo de recursos do Azure para seu aplicativo de demonstração. JAVA_COMPONENT_NAME
O nome do componente Java criado para seu aplicativo de contêiner. Nesse caso, você cria um componente Gateway for Spring Java. IMAGE
A imagem de contêiner usada em seu aplicativo de contêiner. Faça logon no Azure com a CLI do Azure.
az login
Crie um grupo de recursos.
az group create --name $RESOURCE_GROUP --location $LOCATION
Crie seu ambiente de aplicativos de contêiner.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Esse ambiente é usado para hospedar o componente Gateway for Spring e seu aplicativo de contêiner.
Usar o componente Gateway for Spring Java
Agora que você tem um ambiente de aplicativos de contêiner, você pode criar seu aplicativo de contêiner usando um gateway para componentes java de primavera para rotear solicitações para eles.
Crie o componente Gateway for 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.fqdn
Este 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.fqdn
Este 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 essa URL com o caminho
/myapp/health
deve rotear a solicitação para o ponto deactuator/health
extremidade do seu aplicativo, retornando{"status":"UP","groups":["liveness","readiness"]}
.
Clean up resources (Limpar recursos)
Os recursos criados neste tutorial têm um efeito 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.
Property name | Description | Default value |
---|---|---|
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 minúsculas serviceId em predicados e filtros. O valor predefinido é false . Útil com Eureka quando automaticamente maiúsculas serviceId . Então, MYSERVICE combinaria /myservice/** |
false |
spring.cloud.gateway.discovery.locator.predicates |
||
spring.cloud.gateway.discovery.locator.route-id-prefix |
O prefixo para o routeId , assume como discoveryClient.getClass().getSimpleName() padrão + "_". A ID de serviço é anexada para criar o routeId arquivo . |
|
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 JSON para o filtro 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 intermitência. | 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 retorna 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 ao método e à propriedade 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 da solicitação por proxy. | |
spring.cloud.gateway.streaming-media-types |
||
spring.cloud.gateway.x-forwarded.enabled |
Se o XForwardedHeadersFilter estiver ativado. |
true |
spring.cloud.gateway.x-forwarded.for-append |
Se o X-Forwarded-For acréscimo como uma lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.for-enabled |
Se X-Forwarded-For estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.host-append |
Se o X-Forwarded-Host acréscimo como uma lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.host-enabled |
Se X-Forwarded-Host estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.order |
A ordem do XForwardedHeadersFilter . |
0 |
spring.cloud.gateway.x-forwarded.port-append |
Se o X-Forwarded-Port acréscimo como uma lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.port-enabled |
Se X-Forwarded-Port estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.prefix-append |
Se o X-Forwarded-Prefix acréscimo como uma lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.prefix-enabled |
Se X-Forwarded-Prefix estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.proto-append |
Se o X-Forwarded-Proto acréscimo como uma lista estiver habilitado. |
true |
spring.cloud.gateway.x-forwarded.proto-enabled |
Se X-Forwarded-Proto estiver habilitado. |
true |
spring.cloud.gateway.httpclient.compression |
Permite a compactação para Netty HttpClient . |
false |
spring.cloud.gateway.httpclient.connect-timeout |
O tempo limite conectado em milis. 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 em millis para esperar pela 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 |
Apenas para o tipo FIXO, 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 millis 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 de vida máximo. |
|
spring.cloud.gateway.httpclient.pool.metrics |
Permite que as métricas dos pools de canais sejam coletadas e registradas no Micrometer. Desativado por predefinição. | false |
spring.cloud.gateway.httpclient.pool.name |
O nome do mapa do pool de canais, como padrão, é 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 liberação SSL close_notify . O valor 3000 ms padrão . |
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 o netty InsecureTrustManagerFactory . Isso é 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 |
Se o suporte de observabilidade do micrômetro deve ser ativado. | true |
Configurações comuns
A lista a seguir descreve configurações comuns:
- Configurações relacionadas ao registro:
logging.level.*
logging.group.*
- Quaisquer outras configurações em
logging.*
namespace devem ser proibidas. Por exemplo, escrever arquivos de log usandologging.file
deve ser proibido.