Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il gateway per Spring offre un modo efficiente e potente per instradare, gestire e gestire le richieste API come parte di un'architettura di microservizi. Funge da gateway API che instrada richieste esterne a servizi diversi, aggiungendo diverse funzionalità, ad esempio il filtro, il bilanciamento del carico e altro ancora. Questo articolo illustra come creare un gateway che indirizza le richieste alle app contenitore.
In questa esercitazione, imparerai a:
- Creare un gateway per il componente Spring Java
- Aggiornare il gateway per spring con route personalizzate per reindirizzare le richieste alle app contenitore
Importante
Questa esercitazione usa servizi che possono influire sulla fattura Azure. Se decidi di seguire passo-passo, assicurati di eliminare le risorse in questo articolo per evitare addebiti imprevisti.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Se non ne hai già uno, puoi crearne uno gratuitamente.
- interfaccia della riga di comando di Azure.
Considerazioni
Quando si esegue il Gateway di Spring in App contenitore di Azure, tenere presenti i dettagli seguenti:
| Elemento | Spiegazione |
|---|---|
| Scope | Il gateway per Spring viene eseguito nello stesso ambiente dell'app contenitore connessa. |
| Risorse | L'allocazione delle risorse del contenitore per Gateway per Spring è fissa, il numero di core CPU è 0,5 e la dimensione della memoria è 1Gi. |
| Prezzi | Il gateway per la fatturazione Spring rientra nei prezzi basati sul consumo. Le risorse utilizzate dai componenti Java gestiti vengono fatturate alle tariffe attive/inattive. È possibile eliminare i componenti che non sono più in uso per interrompere la fatturazione. |
Configurazione
Prima di iniziare a usare il gateway per Spring, è prima necessario creare le risorse necessarie.
Eseguire i comandi seguenti per creare il gruppo di risorse e l'ambiente delle App contenitore.
Creare le variabili per supportare la configurazione dell'applicazione. Questi valori vengono forniti ai fini dello svolgimento di questa lezione. In questa lezione, usiamo l'endpoint dell'actuator di admin per l'app spring sample.
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"Variabile Descrizione LOCATIONPosizione dell'area Azure in cui si crea l'app contenitore e il componente Java. ENVIRONMENTNome dell'ambiente App contenitore di Azure per l'applicazione demo. RESOURCE_GROUPNome del gruppo di risorse Azure per l'applicazione demo. JAVA_COMPONENT_NAMENome del componente Java creato per l'app contenitore. In questo caso, si crea un componente Gateway per Spring Java. IMAGEL'immagine del container utilizzata nell'app del container. Accedere a Azure con il interfaccia della riga di comando di Azure.
az loginCreare un gruppo di risorse.
az group create --name $RESOURCE_GROUP --location $LOCATIONCrea l'ambiente delle tue app container.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATIONQuesto ambiente viene usato per ospitare sia il componente Gateway per Spring che l'app contenitore.
Usare il componente Gateway per Spring Java
Ora che si dispone di un ambiente Container Apps, è possibile creare la container app usando un gateway per i componenti Java Spring per instradare le richieste verso di essi.
Creare il componente Gateway per Spring Java.
az containerapp env java-component gateway-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \Creare l'app contenitore con il nome di dominio completo (FQDN).
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --ingress external \ --target-port 8080 \ --query properties.configuration.ingress.fqdnQuesto comando restituisce l'URL dell'app contenitore che utilizza i dati di configurazione. Copiare l'URL in un editor di testo in modo da poterlo usare nel passaggio successivo.
Aggiornare le rotte del gateway per instradare le richieste
Creare un file YAML con il contenuto seguente. Sostituire
<MYAPP_URL>con il nome di dominio completo dell'app contenitore del passaggio precedente.springCloudGatewayRoutes: - id: "route1" uri: "<MYAPP_URL>" predicates: - "Path=/myapp/{path}" filters: - "SetPath=/actuator/{path}"Esegui il comando seguente per aggiornare il componente Gateway per Spring con la configurazione di routing.
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.fqdnQuesto comando aggiorna la route del gateway e restituisce l'URL del gateway che utilizza i dati di configurazione.
Il comando restituisce l'URL del gateway. Visitare questo URL con il percorso
/myapp/healthdovrebbe instradare la richiesta all'endpoint dell'applicazioneactuator/health, restituendo{"status":"UP","groups":["liveness","readiness"]}.
Pulire le risorse
Le risorse create in questa esercitazione hanno effetto sulla fattura di Azure. Se non si intende usare questi servizi a lungo termine, eseguire il comando seguente per rimuovere tutti gli elementi creati in questa esercitazione.
az group delete --resource-group $RESOURCE_GROUP
Formato del file di route
Il componente Gateway per Spring supporta la definizione di route tramite proprietà con ID, URI, predicati e filtri. Per altre informazioni, vedere la documentazione di Spring Cloud Gateway. Di seguito è riportato un esempio di file YAML che illustra come configurare queste proprietà.
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}"
Elenco della configurazione autorizzata per il gateway per Spring (#proprietà-configurabili)
La tabella seguente descrive le proprietà del componente gateway che è possibile configurare per l'app. Per altre informazioni, vedere Proprietà comuni dell'applicazione Spring Cloud Gateway.
| Nome della proprietà | Descrizione | Valore predefinito |
|---|---|---|
spring.cloud.gateway.default-filters |
Elenco di definizioni di filtro applicate a ogni route. | |
spring.cloud.gateway.enabled |
Abilita la funzionalità del gateway. | true |
spring.cloud.gateway.fail-on-route-definition-error |
Opzione per fallire in caso di errori nella definizione della route, il valore predefinito è vero. In caso contrario, viene registrato un avviso. | true |
spring.cloud.gateway.handler-mapping.order |
L'ordine di RoutePredicateHandlerMapping. |
1 |
spring.cloud.gateway.loadbalancer.use404 |
false |
|
spring.cloud.gateway.discovery.locator.enabled |
Flag che abilita l'integrazione DiscoveryClient del gateway. |
false |
spring.cloud.gateway.discovery.locator.filters |
||
spring.cloud.gateway.discovery.locator.include-expression |
Espressione SpEL che valuta se includere un servizio nell'integrazione del gateway o meno. Il valore predefinito è true. |
true |
spring.cloud.gateway.discovery.locator.lower-case-service-id |
Opzione per in minuscolo serviceId nei predicati e nei filtri. Il valore predefinito è false. Utile con Eureka quando serviceId viene automaticamente reso maiuscolo. Quindi, MYSERVICE corrisponderebbe /myservice/** |
false |
spring.cloud.gateway.discovery.locator.predicates |
||
spring.cloud.gateway.discovery.locator.route-id-prefix |
Il prefisso predefinito per routeId è discoveryClient.getClass().getSimpleName() + "_". L'ID servizio viene aggiunto per creare il routeId. |
|
spring.cloud.gateway.discovery.locator.url-expression |
Espressione SpEL che crea l'URI per ogni route. Il valore predefinito è 'lb://'+serviceId. |
'lb://'+serviceId |
spring.cloud.gateway.filter.add-request-header.enabled |
Abilita il add-request-header filtro. |
true |
spring.cloud.gateway.filter.add-request-parameter.enabled |
Abilita il add-request-parameter filtro. |
true |
spring.cloud.gateway.filter.add-response-header.enabled |
Abilita il add-response-header filtro. |
true |
spring.cloud.gateway.filter.circuit-breaker.enabled |
Abilita il circuit-breaker filtro. |
true |
spring.cloud.gateway.filter.dedupe-response-header.enabled |
Abilita il dedupe-response-header filtro. |
true |
spring.cloud.gateway.filter.fallback-headers.enabled |
Abilita il fallback-headers filtro. |
true |
spring.cloud.gateway.filter.hystrix.enabled |
Abilita il hystrix filtro. |
true |
spring.cloud.gateway.filter.json-to-grpc.enabled |
Abilita il filtro JSON per gRPC. | true |
spring.cloud.gateway.filter.local-response-cache.enabled |
Abilita il local-response-cache filtro. |
false |
spring.cloud.gateway.filter.local-response-cache.request.no-cache-strategy |
||
spring.cloud.gateway.filter.local-response-cache.size |
Dimensione massima della cache per espellere le voci per questo percorso in KB, MB e GB. | |
spring.cloud.gateway.filter.local-response-cache.time-to-live |
Tempo di scadenza di una voce della cache, espresso in s per i secondi, m per i minuti e h per le ore. |
5m |
spring.cloud.gateway.filter.map-request-header.enabled |
Abilita il map-request-header filtro. |
true |
spring.cloud.gateway.filter.modify-request-body.enabled |
Abilita il modify-request-body filtro. |
true |
spring.cloud.gateway.filter.modify-response-body.enabled |
Abilita il modify-response-body filtro. |
true |
spring.cloud.gateway.filter.prefix-path.enabled |
Abilita il prefix-path filtro. |
true |
spring.cloud.gateway.filter.preserve-host-header.enabled |
Abilita il preserve-host-header filtro. |
true |
spring.cloud.gateway.filter.redirect-to.enabled |
Abilita il 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 |
Abilita il remove-request-header filtro. |
true |
spring.cloud.gateway.filter.remove-request-parameter.enabled |
Abilita il remove-request-parameter filtro. |
true |
spring.cloud.gateway.filter.remove-response-header.enabled |
Abilita il remove-response-header filtro. |
true |
spring.cloud.gateway.filter.request-header-size.enabled |
Abilita il request-header-size filtro. |
true |
spring.cloud.gateway.filter.request-header-to-request-uri.enabled |
Abilita il 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 |
Abilita il request-rate-limiter filtro. |
true |
spring.cloud.gateway.filter.request-size.enabled |
Abilita il request-size filtro. |
true |
spring.cloud.gateway.filter.retry.enabled |
Abilita il retry filtro. |
true |
spring.cloud.gateway.filter.rewrite-location-response-header.enabled |
Abilita il rewrite-location-response-header filtro. |
true |
spring.cloud.gateway.filter.rewrite-location.enabled |
Abilita il rewrite-location filtro. |
true |
spring.cloud.gateway.filter.rewrite-path.enabled |
Abilita il rewrite-path filtro. |
true |
spring.cloud.gateway.filter.rewrite-request-parameter.enabled |
Abilita il rewrite-request-parameter filtro. |
true |
spring.cloud.gateway.filter.rewrite-response-header.enabled |
Abilita il rewrite-response-header filtro. |
true |
spring.cloud.gateway.filter.save-session.enabled |
Abilita il 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 |
Abilita il 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 |
Abilita il set-path filtro. |
true |
spring.cloud.gateway.filter.set-request-header.enabled |
Abilita il set-request-header filtro. |
true |
spring.cloud.gateway.filter.set-request-host-header.enabled |
Abilita il set-request-host-header filtro. |
true |
spring.cloud.gateway.filter.set-response-header.enabled |
Abilita il set-response-header filtro. |
true |
spring.cloud.gateway.filter.set-status.enabled |
Abilita il set-status filtro. |
true |
spring.cloud.gateway.filter.strip-prefix.enabled |
Abilita il strip-prefix filtro. |
true |
spring.cloud.gateway.forwarded.enabled |
Abilita l'oggetto ForwardedHeadersFilter. |
true |
spring.cloud.gateway.global-filter.adapt-cached-body.enabled |
Abilita il adapt-cached-body filtro globale. |
true |
spring.cloud.gateway.global-filter.forward-path.enabled |
Abilita il forward-path filtro globale. |
true |
spring.cloud.gateway.global-filter.forward-routing.enabled |
Abilita il forward-routing filtro globale. |
true |
spring.cloud.gateway.global-filter.load-balancer-client.enabled |
Abilita il load-balancer-client filtro globale. |
true |
spring.cloud.gateway.global-filter.local-response-cache.enabled |
Abilita il local-response-cache filtro per tutte le route, che consente di aggiungere una configurazione specifica a livello di route usando un LocalResponseCache filtro. |
true |
spring.cloud.gateway.global-filter.netty-routing.enabled |
Abilita il netty-routing global filtro. |
true |
spring.cloud.gateway.global-filter.netty-write-response.enabled |
Abilita il netty-write-response filtro globale. |
true |
spring.cloud.gateway.global-filter.reactive-load-balancer-client.enabled |
Abilita il reactive-load-balancer-client filtro globale. |
true |
spring.cloud.gateway.global-filter.remove-cached-body.enabled |
Abilita il remove-cached-body filtro globale. |
true |
spring.cloud.gateway.global-filter.route-to-request-url.enabled |
Abilita il route-to-request-url filtro globale. |
true |
spring.cloud.gateway.global-filter.websocket-routing.enabled |
Abilita il websocket-routing filtro globale. |
true |
spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping |
Se la configurazione CORS globale deve essere aggiunta al gestore URL. | false |
spring.cloud.gateway.globalcors.cors-configurations |
||
spring.cloud.gateway.redis-rate-limiter.burst-capacity-header |
Nome dell'intestazione che restituisce la configurazione della capacità burst. | X-RateLimit-Burst-Capacity |
spring.cloud.gateway.redis-rate-limiter.config |
||
spring.cloud.gateway.redis-rate-limiter.include-headers |
Indica se includere o meno intestazioni contenenti informazioni sul limitatore di tasso. Il valore predefinito è true. |
true |
spring.cloud.gateway.redis-rate-limiter.remaining-header |
Nome dell'intestazione che restituisce il numero di richieste rimanenti nel corso del secondo attuale. | X-RateLimit-Remaining |
spring.cloud.gateway.redis-rate-limiter.replenish-rate-header |
Nome dell'intestazione che restituisce la configurazione della velocità di rifornimento. | X-RateLimit-Replenish-Rate |
spring.cloud.gateway.redis-rate-limiter.requested-tokens-header |
Nome dell'intestazione che restituisce la configurazione dei token richiesti. | X-RateLimit-Requested-Tokens |
spring.cloud.gateway.restrictive-property-accessor.enabled |
Limita l'accesso a metodi e proprietà in SpEL. | true |
spring.cloud.gateway.predicate.after.enabled |
Abilita il after predicato. |
true |
spring.cloud.gateway.predicate.before.enabled |
Abilita il before predicato. |
true |
spring.cloud.gateway.predicate.between.enabled |
Abilita il between predicato. |
true |
spring.cloud.gateway.predicate.cloud-foundry-route-service.enabled |
Abilita il cloud-foundry-route-service predicato. |
true |
spring.cloud.gateway.predicate.cookie.enabled |
Abilita il cookie predicato. |
true |
spring.cloud.gateway.predicate.header.enabled |
Abilita il header predicato. |
true |
spring.cloud.gateway.predicate.host.enabled |
Abilita il host predicato. |
true |
spring.cloud.gateway.predicate.host.include-port |
Includere la porta nella corrispondenza del nome host. | true |
spring.cloud.gateway.predicate.method.enabled |
Abilita il method predicato. |
true |
spring.cloud.gateway.predicate.path.enabled |
Abilita il path predicato. |
true |
spring.cloud.gateway.predicate.query.enabled |
Abilita il query predicato. |
true |
spring.cloud.gateway.predicate.read-body.enabled |
Abilita il read-body predicato. |
true |
spring.cloud.gateway.predicate.remote-addr.enabled |
Abilita il remote-addr predicato. |
true |
spring.cloud.gateway.predicate.weight.enabled |
Abilita il weight predicato. |
true |
spring.cloud.gateway.predicate.xforwarded-remote-addr.enabled |
Abilita il xforwarded-remote-addr predicato. |
true |
spring.cloud.gateway.set-status.original-status-header-name |
Nome dell'intestazione che contiene il codice HTTP della richiesta proxy. | |
spring.cloud.gateway.streaming-media-types |
||
spring.cloud.gateway.x-forwarded.enabled |
Indica se XForwardedHeadersFilter è abilitato. |
true |
spring.cloud.gateway.x-forwarded.for-append |
Se l'aggiunta di X-Forwarded-For come elenco è abilitata. |
true |
spring.cloud.gateway.x-forwarded.for-enabled |
Indica se X-Forwarded-For è abilitato. |
true |
spring.cloud.gateway.x-forwarded.host-append |
Se l'aggiunta X-Forwarded-Host come elenco è abilitata. |
true |
spring.cloud.gateway.x-forwarded.host-enabled |
Indica se X-Forwarded-Host è abilitato. |
true |
spring.cloud.gateway.x-forwarded.order |
L'ordine del XForwardedHeadersFilter. |
0 |
spring.cloud.gateway.x-forwarded.port-append |
Se l'aggiunta di X-Forwarded-Port come lista è abilitata. |
true |
spring.cloud.gateway.x-forwarded.port-enabled |
Indica se X-Forwarded-Port è abilitato. |
true |
spring.cloud.gateway.x-forwarded.prefix-append |
Se l'aggiunta di X-Forwarded-Prefix come elenco è abilitata. |
true |
spring.cloud.gateway.x-forwarded.prefix-enabled |
Indica se X-Forwarded-Prefix è abilitato. |
true |
spring.cloud.gateway.x-forwarded.proto-append |
Se l'aggiunta di X-Forwarded-Proto come elenco è abilitata. |
true |
spring.cloud.gateway.x-forwarded.proto-enabled |
Indica se X-Forwarded-Proto è abilitato. |
true |
spring.cloud.gateway.httpclient.compression |
Abilita la compressione per Netty HttpClient. |
false |
spring.cloud.gateway.httpclient.connect-timeout |
Timeout per la connessione in millisecondi. Il valore predefinito è 30s. |
|
spring.cloud.gateway.httpclient.max-header-size |
Dimensione massima dell'intestazione della risposta. | |
spring.cloud.gateway.httpclient.max-initial-line-length |
Lunghezza massima riga iniziale. | |
spring.cloud.gateway.httpclient.pool.acquire-timeout |
Solo per il tipo FIXED, il tempo massimo in millisecondi di attesa per l'acquisizione. |
|
spring.cloud.gateway.httpclient.pool.eviction-interval |
Eseguire controlli regolari di rimozione in background a un intervallo specificato. Disabilitato per impostazione predefinita ({@link Duration#ZERO}). |
0 |
spring.cloud.gateway.httpclient.pool.max-connections |
Solo per il tipo di connessione FIXED, il numero massimo di connessioni prima di avviare l'acquisizione in sospeso delle connessioni esistenti. | |
spring.cloud.gateway.httpclient.pool.max-idle-time |
Tempo in millisecondi dopo il quale il canale viene chiuso. Se NULL, non c'è tempo massimo di inattività. |
|
spring.cloud.gateway.httpclient.pool.max-life-time |
Durata dopo la quale il canale viene chiuso. Se NULL, non c'è tempo massimo di vita. |
|
spring.cloud.gateway.httpclient.pool.metrics |
Consente di raccogliere e registrare le metriche dei pool di canali in Micrometer. Disabilitato per impostazione predefinita. | false |
spring.cloud.gateway.httpclient.pool.name |
Nome della mappa del pool di canali. Il valore predefinito è proxy. |
proxy |
spring.cloud.gateway.httpclient.pool.type |
Tipo di pool da utilizzare per HttpClient, il valore predefinito è ELASTIC. |
|
spring.cloud.gateway.httpclient.response-timeout |
Timeout della risposta. | |
spring.cloud.gateway.httpclient.ssl.close-notify-flush-timeout |
Timeout di svuotamento del buffer SSL close_notify. Il valore predefinito è 3000 ms. |
3000ms |
spring.cloud.gateway.httpclient.ssl.close-notify-read-timeout |
Timeout di lettura SSL close_notify . Il valore predefinito è 0 ms. |
0 |
spring.cloud.gateway.httpclient.ssl.handshake-timeout |
Timeout dell'handshake SSL. Il valore predefinito è 10000 ms.. |
10000ms |
spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager |
Installa Netty InsecureTrustManagerFactory. Questo valore non è sicuro e non è adatto per la produzione. |
false |
spring.cloud.gateway.httpclient.websocket.max-frame-payload-length |
Lunghezza massima del payload del frame. | |
spring.cloud.gateway.httpclient.websocket.proxy-ping |
Eseguire il ping dei frame proxy ai servizi downstream. Il valore predefinito è true. |
true |
spring.cloud.gateway.httpclient.wiretap |
Abilita il debug wiretap per Netty HttpClient. |
false |
spring.cloud.gateway.httpserver.wiretap |
Abilita il debug wiretap per Netty HttpServer. |
false |
spring.cloud.gateway.metrics.enabled |
Abilita la raccolta di dati delle metriche. | false |
spring.cloud.gateway.metrics.prefix |
Prefisso di tutte le metriche generate dal gateway. | spring.cloud.gateway |
spring.cloud.gateway.metrics.tags |
La mappa dei tag che è stata aggiunta alle metriche. | |
spring.cloud.gateway.observability.enabled |
Indica se il supporto di Micrometer Observability deve essere attivato. | true |
Configurazioni comuni
L'elenco seguente descrive le configurazioni comuni:
- Registrazione delle configurazioni correlate:
logging.level.*logging.group.*- Tutte le altre configurazioni nello spazio dei nomi
logging.*non devono essere consentite. Ad esempio, la scrittura di file di log tramitelogging.filenon deve essere consentita.