Configura la gestione avanzata del traffico con Envoy
La configurazione è supportata per i clienti in anteprima, ma non è consigliata per i nuovi utenti di Cloud Service Mesh. Per ulteriori informazioni, consulta la panoramica del routing dei servizi Cloud Service Mesh.
Questo documento fornisce informazioni su come configurare la gestione avanzata del traffico per le implementazioni di Cloud Service Mesh che utilizzano Envoy.
Prima di iniziare
Prima di configurare la gestione avanzata del traffico, segui le istruzioni riportate in Preparati a configurare Cloud Service Mesh con Envoy, inclusa la configurazione di Cloud Service Mesh e di eventuali host di macchine virtuali (VM) o cluster Google Kubernetes Engine (GKE) necessari. Crea le risorse Google Cloud richieste.
La disponibilità delle funzionalità avanzate di gestione del traffico varia a seconda del protocollo di richiesta scelto. Questo protocollo viene configurato quando configuri il routing utilizzando il proxy HTTP o HTTPS di destinazione, il proxy gRPC di destinazione o la risorsa proxy TCP di destinazione:
- Con il proxy HTTP di destinazione e il proxy HTTPS di destinazione, sono disponibili tutte le funzionalità descritte in questo documento.
- Con il proxy gRPC di destinazione, alcune funzionalità sono disponibili.
- Con il proxy TCP di destinazione, non sono disponibili funzionalità avanzate di gestione del traffico.
Per saperne di più, consulta Funzionalità di Cloud Service Mesh e Gestione avanzata del traffico. Per una guida alla configurazione end-to-end, consulta Configura la gestione avanzata del traffico con i servizi gRPC senza proxy.
Configurare la suddivisione del traffico
Queste istruzioni presuppongono quanto segue:
- Il deployment di Cloud Service Mesh ha una mappa URL denominata
review-url-map. - La mappa URL invia tutto il traffico a un servizio di backend chiamato
review1, che funge da servizio di backend predefinito. - Prevedi di instradare il 5% del traffico a una nuova versione di un servizio. Questo servizio
è in esecuzione su una VM o un endpoint di backend in un gruppo di endpoint di rete (NEG)
associato al servizio di backend
review2. - Non vengono utilizzate regole host o matcher percorso.
Se stai dividendo il traffico in un nuovo servizio a cui non è stato fatto riferimento
in precedenza nella mappa URL, aggiungi prima il nuovo servizio a weightedBackendServices e
assegna un peso di 0. Poi, aumenta gradualmente il peso assegnato a quel servizio.
Per configurare la suddivisione del traffico:
Console
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Fai clic su Mappe di regole di routing.
Fai clic su Crea mappa di regole di routing.
Nella pagina Crea una mappa di regole di routing, inserisci un nome.
Nel menu Protocollo, seleziona HTTP.
Seleziona una regola di forwarding esistente.
Nella sezione Regole di routing, seleziona Regola avanzata per host, percorso e route.
Nella sezione Corrispondenze di host e percorsi, fai clic su Aggiungi corrispondenza di host e percorsi. In questo modo, viene aggiunto un nuovo matcher di percorso che puoi configurare per suddividere il traffico.
Aggiungi le seguenti impostazioni al campo Corrispondenza percorso:
- defaultService: global/backendServices/review1 name: matcher1 routeRules: - priority: 2 matchRules: - prefixMatch: '' routeAction: weightedBackendServices: - backendService: global/backendServices/review1 weight: 95 - backendService: global/backendServices/review2 weight: 5Fai clic su Fine.
Fai clic su Salva.
Quando la nuova versione ti soddisfa, puoi regolare gradualmente i pesi dei due servizi e alla fine inviare tutto il traffico a review2.
gcloud
Esegui il comando
gcloud exportper ottenere la configurazione della mappa URL:gcloud compute url-maps export review-url-map \ --destination=review-url-map-config.yamlAggiungi la seguente sezione al file
review-url-map-config.yaml:hostRules: - description: '' hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: global/backendServices/review1 name: matcher1 routeRules: - priority: 2 matchRules: - prefixMatch: '' routeAction: weightedBackendServices: - backendService: global/backendServices/review1 weight: 95 - backendService: global/backendServices/review2 weight: 5Aggiorna la mappa URL:
gcloud compute url-maps import review-url-map \ --source=review-url-map-config.yaml
Quando la nuova versione ti soddisfa, puoi regolare gradualmente i pesi dei due servizi e alla fine inviare tutto il traffico a review2.
Configurare una release parziale
Utilizza una procedura di deployment parziale, a volte chiamata canarying, per rilasciare una nuova versione del software su una piccola parte dei server prima di rilasciare la nuova versione sul resto dei server di produzione.
Un rilascio parziale utilizza weightedBackendServices. Per attivare un rilascio parziale,
designa un servizio di backend come servizio di test o canary e assegnagli un peso basso, ad esempio 2 o 5. Esegui il deployment della nuova versione del software solo su questi server. Quando hai la certezza che la nuova versione non presenta problemi, esegui il deployment
nel resto dei servizi.
- Per abilitare un rilascio parziale, utilizza il seguente esempio di codice YAML:
pathMatchers:
- defaultService: DEFAULT_SERVICE_URL
name: matcher1
routeRules:
- matchRules:
- prefixMatch: '/'
routeAction:
weightedBackendServices:
- backendService: BACKEND_SERVICE_PARTIAL_URL
weight: 2
- backendService: BACKEND_SERVICE_URL
weight: 98
DEFAULT_SERVICE_URLè l'URL predefinito per il tuo servizio.BACKEND_SERVICE_PARTIAL_URLè l'URL del servizio di backend che riceve il 2% del traffico.BACKEND_SERVICE_URLè l'URL del servizio di backend che riceve il 98% del traffico.
Configurare i deployment blu/verde
I deployment blu/verde sono modelli di rilascio che riducono il tempo necessario per trasferire il traffico di produzione a una nuova uscita di un servizio o per eseguire il rollback di una release precedente del servizio. Questi deployment mantengono entrambe le versioni del servizio disponibili in produzione e spostano il traffico da una all'altra.
I deployment blu/verde utilizzano weightedBackendServices. Nell'esempio YAML
che segue, il deployment completo dei backend per SERVICE_BLUE_URL è stato eseguito con la release di produzione attuale, mentre il deployment completo dei backend per SERVICE_GREEN_URL è stato eseguito con la nuova release. Nella configurazione dell'esempio, il deployment GREEN
riceve il 100% del traffico di produzione. Se riscontri problemi, puoi invertire i pesi dei due deployment, il che ripristina la release difettosa GREEN e reintegra la release BLUE nota per il suo funzionamento. In entrambi i casi, il traffico può essere spostato rapidamente poiché entrambe le versioni sono disponibili per ricevere il traffico.
- Per abilitare un deployment blu/verde, utilizza il seguente esempio di codice YAML:
pathMatchers:
- defaultService: DEFAULT_SERVICE_URL
name: matcher1
routeRules:
- matchRules:
- prefixMatch: '/'
routeAction:
weightedBackendServices:
- backendService: BACKEND_SERVICE_BLUE_URL
weight: 0
- backendService: BACKEND_SERVICE_GREEN_URL
weight: 100
DEFAULT_SERVICE_URLè l'URL predefinito per il tuo servizio.BACKEND_SERVICE_BLUE_URLè l'URL del servizio di backend che non riceve traffico.BACKEND_SERVICE_GREEN_URLè l'URL del servizio di backend che riceve il 100% del tuo traffico.
Configurare il mirroring del traffico
Utilizza il mirroring del traffico quando vuoi che il traffico venga indirizzato a due servizi di backend diversi per eseguire il debug o testare nuovi servizi.
Nell'esempio seguente, tutte le richieste vengono inviate a SERVICE_URL e a MIRROR_SERVICE_URL. Solo le risposte da SERVICE_URL vengono rinviate al client. MIRROR_SERVICE_URL non ha impatto sul client.
Per configurare il mirroring del traffico:
Console
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Fai clic su Mappe di regole di routing.
Fai clic su Crea mappa di regole di routing.
Nella pagina Crea una mappa di regole di routing, inserisci un nome.
Nell'elenco Protocollo, seleziona HTTP.
Seleziona una regola di forwarding esistente.
Nella sezione Regole di routing, seleziona Regola avanzata per host, percorso e route.
Nella sezione Corrispondenze di host e percorsi, fai clic su Aggiungi corrispondenza di host e percorsi. In questo modo, viene aggiunto un nuovo matcher di percorso che puoi configurare per eseguire il mirroring del traffico.
Aggiungi le seguenti impostazioni al campo Corrispondenza percorso:
- defaultService: DEFAULT_SERVICE_URL name: matcher1 routeRules: - matchRules: - prefixMatch: '/' routeAction: weightedBackendServices: - backendService: BACKEND_SERVICE_URL weight: 100 requestMirrorPolicy: backendService: BACKEND_SERVICE_MIRROR_URLDEFAULT_SERVICE_URLè l'URL predefinito per il tuo servizio.BACKEND_SERVICE_URLè l'URL del backend di cui viene eseguito il mirroring.BACKEND_SERVICE_MIRROR_URLè l'URL del servizio di backend di cui esegui il mirroring.
Fai clic su Fine.
Fai clic su Salva.
gcloud
Esegui il comando
gcloud exportper ottenere la configurazione della mappa URL:gcloud compute url-maps export review-url-map \ --destination=review-url-map-config.yamlAggiungi la seguente sezione al file
review-url-map-config.yaml:hostRules: - description: '' hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: DEFAULT_SERVICE_URL name: matcher1 routeRules: - matchRules: - prefixMatch: '/' routeAction: weightedBackendServices: - backendService: BACKEND_SERVICE_URL weight: 100 requestMirrorPolicy: backendService: BACKEND_SERVICE_MIRROR_URLDEFAULT_SERVICE_URLè l'URL predefinito per il tuo servizio.BACKEND_SERVICE_URLè l'URL del backend di cui viene eseguito il mirroring.BACKEND_SERVICE_MIRROR_URLè l'URL del servizio di backend di cui esegui il mirroring.
Aggiorna la mappa URL:
gcloud compute url-maps import review-url-map \ --source=review-url-map-config.yaml
Configurare l'interruzione del circuito
L'interruzione del circuito consente di impostare soglie di errore per impedire che le richieste dei client sovraccarichino i backend. Una volta raggiunto un limite che hai impostato, il client smette di consentire nuove connessioni o di inviare richieste aggiuntive, dando ai backend il tempo di recuperare.
Di conseguenza, l'interruzione del circuito impedisce errori a cascata restituendo un errore al client anziché sovraccaricare un backend. In questo modo, parte del traffico può essere gerito, mentre viene fornito il tempo per gestire la situazione di sovraccarico, ad esempio gestire un picco di traffico aumentando la capacità tramite la scalabilità automatica.
Nell'esempio seguente, i circuit breaker sono impostati come segue:
- Numero massimo di richieste per connessione: 100
- Numero massimo di connessioni: 1000
- Numero massimo di richieste in sospeso: 200
- Numero massimo di richieste: 1000
- Numero massimo di nuovi tentativi: 3
Per configurare l'interruzione del circuito:
Console
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Fai clic sul nome del servizio di backend da aggiornare.
Fai clic su Modifica.
Fai clic su Configurazioni avanzate.
Nella sezione Interruttori automatici, seleziona la casella di controllo Abilita.
Fai clic su Modifica.
- In Richieste massime per connessione, inserisci
100. - In Max connections (Numero massimo di connessioni), inserisci
1000. - In Numero massimo di richieste in sospeso, inserisci
200. - In Max requests, inserisci
1000. - In Numero massimo di nuovi tentativi, inserisci
3.
- In Richieste massime per connessione, inserisci
Fai clic su Salva e poi di nuovo su Salva.
gcloud
Esegui il comando
gcloud exportper esportare la configurazione del servizio di backend. SostituisciBACKEND_SERVICE_NAMEcon il nome del servizio di backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalAggiorna il file
BACKEND_SERVICE_NAME.yaml come segue:affinityCookieTtlSec: 0 backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group:https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP_NAME maxUtilization: 0.8 circuitBreakers: maxConnections: 1000 maxPendingRequests: 200 maxRequests: 1000 maxRequestsPerConnection: 100 maxRetries: 3 connectionDraining: drainingTimeoutSec: 300 healthChecks: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/HEALTH_CHECK_NAME loadBalancingScheme: INTERNAL_SELF_MANAGED localityLbPolicy: ROUND_ROBIN name: BACKEND_SERVICE_NAME port: 80 portName: http protocol: HTTP sessionAffinity: NONE timeoutSec: 30Aggiorna il file di configurazione del servizio di backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Configura l'affinità sessione in base a HTTP_COOKIE
La gestione avanzata del traffico consente di configurare l'affinità sessione in base a un cookie fornito.
Per configurare l'affinità sessione utilizzando HTTP_COOKIE:
Console
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Fai clic sul nome del servizio di backend da aggiornare.
Fai clic su Modifica.
Fai clic su Configurazioni avanzate.
In Affinità sessione, seleziona Cookie HTTP.
In Policy di bilanciamento del carico per le località, seleziona hash circolare.
- Nel campo Nome cookie HTTP, inserisci
http_cookie. - Nel campo Percorso cookie HTTP, inserisci
/cookie_path. - Nel campo TTL del cookie HTTP, inserisci
100. - Nel campo Dimensione minima anello, inserisci
10000.
- Nel campo Nome cookie HTTP, inserisci
Fai clic su Salva.
gcloud
Esegui il comando
gcloud exportper esportare la configurazione del servizio di backend. SostituisciBACKEND_SERVICE_NAMEcon il nome del servizio di backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalAggiorna il file
YAMLcome segue:sessionAffinity: 'HTTP_COOKIE' localityLbPolicy: 'RING_HASH' consistentHash: httpCookie: name: 'http_cookie' path: '/cookie_path' ttl: seconds: 100 nanos: 30 minimumRingSize: 10000Importa il file di configurazione del servizio di backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Configurare il rilevamento outlier
Il rilevamento outlier controlla l'eliminazione di host in stato non integro dal pool di bilanciamento del carico. Cloud Service Mesh lo fa utilizzando un insieme di policy che specificano i criteri per l'espulsione di VM o endpoint di backend non integri nei NEG, insieme ai criteri che definiscono quando un backend o un endpoint è considerato sufficientemente integro da ricevere nuovamente il traffico.
Nell'esempio seguente, il servizio di backend ha un gruppo di istanze come
backend. L'impostazione di rilevamento outlier specifica che l'analisi
viene eseguita ogni secondo. Se un endpoint restituisce cinque errori consecutivi, viene escluso dal bilanciamento del carico per 30 secondi la prima volta.5xx Il tempo di espulsione effettivo per lo stesso endpoint è di 30 secondi moltiplicato per il
numero di volte in cui viene espulso.
Per configurare il rilevamento di outlier nella risorsa del servizio di backend:
Console
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Fai clic sul nome di un servizio.
Fai clic su Modifica.
Fai clic su Configurazioni avanzate.
Seleziona la casella di controllo Rilevamento dei valori anomali.
Fai clic su Modifica.
- Imposta Errori consecutivi su
5. - Imposta Intervallo su
1000millisecondi. - Imposta Tempo di espulsione di base su
30000millisecondi.
- Imposta Errori consecutivi su
Fai clic su Salva e poi di nuovo su Salva.
gcloud
Esegui il comando
gcloud exportper esportare la configurazione del servizio di backend. SostituisciBACKEND_SERVICE_NAMEcon il nome del servizio di backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalAggiorna il file
YAMLcome segue, sostituendo il nome del servizio di backend conBACKEND_SERVICE_NAME:name: BACKEND_SERVICE_NAME loadBalancingScheme: INTERNAL_SELF_MANAGED backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group: $INSTANCE_GROUP_URL healthChecks: - $HEALTH_CHECK_URL port: 80 portName: http protocol: HTTP outlierDetection: consecutiveErrors: 5, interval: seconds: 1, nanos: 0 baseEjectionTime: seconds: 30, nanos: 0Importa il file di configurazione del servizio di backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Imposta la policy di bilanciamento del carico per le località
Utilizza la policy di bilanciamento del carico per le località per scegliere un algoritmo di bilanciamento del carico in base al peso e alla priorità della località forniti da Cloud Service Mesh. Ad esempio, puoi eseguire il bilanciamento del carico round robin ponderato tra gli endpoint integri o l'hashing coerente.
Nell'esempio seguente, il servizio di backend ha un gruppo di istanze come
backend. Il criterio di bilanciamento del carico per le località è impostato su RING_HASH.
Per impostare il criterio di bilanciamento del carico per le località:
Console
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Fai clic sul nome di un servizio.
Fai clic su Modifica.
Fai clic su Configurazioni avanzate.
In Criterio di traffico, nel menu Criterio di bilanciamento del carico per le località, seleziona hash circolare.
Fai clic su Salva.
gcloud
Esegui il comando
gcloud exportper esportare la configurazione del servizio di backend. SostituisciBACKEND_SERVICE_NAMEcon il nome del servizio di backend.gcloud compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_NAME-config.yaml --globalAggiorna il file
BACKEND_SERVICE_NAME.yaml come segue:name: shopping-cart-service loadBalancingScheme: INTERNAL_SELF_MANAGED backends: - balancingMode: UTILIZATION capacityScaler: 1.0 group: $INSTANCE_GROUP_URL healthChecks: - $HEALTH_CHECK_URL port: 80 portName: http protocol: HTTP localityLbPolicy: RING_HASH
Importa il file di configurazione del servizio di backend:
gcloud compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_NAME-config.yaml --global
Per saperne di più sul funzionamento della policy di bilanciamento del carico in base alla località, consulta la documentazione relativa alla risorsa backendService.
Configurazione del reindirizzamento URL
Queste istruzioni presuppongono quanto segue:
- Il deployment di Cloud Service Mesh ha una mappa URL denominata
review-url-map. - La mappa URL invia tutto il traffico a un servizio di backend chiamato
review1, che funge da servizio di backend predefinito. - Vuoi reindirizzare il traffico da un host all'altro.
Per configurare il reindirizzamento URL:
Console
Nella console Google Cloud , vai alla pagina Cloud Service Mesh.
Fai clic su Mappe di regole di routing.
Fai clic su Crea mappa di regole di routing.
Nella pagina Crea una mappa di regole di routing, inserisci un nome.
Nel menu Protocollo, seleziona HTTP.
Seleziona una regola di forwarding esistente.
Nella sezione Regole di routing, seleziona Regola avanzata per host, percorso e route.
Nella sezione Corrispondenze di host e percorsi, fai clic su Aggiungi corrispondenza di host e percorsi. In questo modo, viene aggiunto un nuovo matcher di percorso che reindirizza il traffico.
Aggiungi le seguenti impostazioni al campo Corrispondenza percorso:
- defaultService: global/backendServices/review1 name: matcher1 routeRules: - matchRules: - prefixMatch: '' urlRedirect: hostRedirect: '[REDIRECT_HOST]' pathRedirect: '[REDIRECT_URL]' redirectResponseCode: 'FOUND', stripQuery: TrueFai clic su Fine.
Fai clic su Salva.
gcloud
Esegui il comando
gcloud exportper ottenere la configurazione della mappa URL:gcloud compute url-maps export review-url-map \ --destination=review-url-map-config.yamlAggiungi la seguente sezione al file
review-url-map-config.yaml:hostRules: - description: '' hosts: - '*' pathMatcher: matcher1 pathMatchers: - defaultService: global/backendServices/review1 name: matcher1 routeRules: - matchRules: - prefixMatch: '' urlRedirect: hostRedirect: '[REDIRECT_HOST]' pathRedirect: '[REDIRECT_URL]' redirectResponseCode: 'FOUND', stripQuery: TrueAggiorna la mappa URL:
gcloud compute url-maps import review-url-map \ --source=review-url-map-config.yaml
Configura l'indirizzamento del traffico con la riscrittura dell'URL
L'indirizzamento del traffico consente di dirigere il traffico verso servizi di backend diversi in base agli attributi della richiesta, come i valori dell'intestazione. Inoltre, puoi configurare azioni come la riscrittura dell'URL nella richiesta prima che venga indirizzata al servizio di backend.
Nell'esempio seguente, la richiesta è diretta a SERVICE_ANDROID_URL se il percorso della richiesta contiene il prefisso /mobile/ e User-Agent della richiesta contiene Android. Prima di inviare la richiesta al servizio di backend, il prefisso dell'URL può essere sostituito da REWRITE_PATH_ANDROID, ad esempio /android/. Tuttavia,
se il percorso contiene il prefisso /mobile/ e ha un User-Agent contenente
iPhone, il traffico viene indirizzato a SERVICE_IPHONE_URL e il prefisso dell'URL viene
modificato in REWRITE_PATH_IPHONE. Tutte le altre richieste con prefisso
/mobile/ e con User-Agent con un valore diverso da Android o iPhone vengono
indirizzate a SERVICE_GENERIC_DEVICE_URL.
pathMatchers:
- defaultService: [DEFAULT_SERVICE_URL]
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /mobile/
headerMatches:
- headerName: User-Agent
regexMatch: .*Android.*
service: $[SERVICE_ANDROID_URL]
routeAction:
urlRewrite:
pathPrefixRewrite: [REWRITE_PATH_ANDROID]
- matchRules:
- prefixMatch: /mobile/
headerMatches:
- headerName: User-Agent
regexMatch: .*iPhone.*
service: [SERVICE_IPHONE_URL]
routeAction:
urlRewrite:
pathPrefixRewrite: [REWRITE_PATH_IPHONE]
- matchRules:
- prefixMatch: /mobile/
service: [SERVICE_GENERIC_DEVICE_URL]
Configurare l'inserimento di errori
Fault injection consente di introdurre un ritardo fisso e/o un'interruzione forzata, chiamata interruzione anomala, in una particolare route per verificare la resilienza di un'applicazione.
Nell'esempio che segue, tutte le richieste vengono inviate a SERVICE_URL, con un ritardo fisso di 10 secondi aggiunto al 100% delle richieste. Il client che invia le richieste vede che tutte le risposte sono ritardate di 10 secondi. Inoltre, al 50% delle richieste viene applicato un errore di interruzione con una risposta 503.Service Unavailable Il client vede che il 50% delle richieste riceve una risposta 503.
Queste richieste non raggiungono affatto il servizio di backend.
pathMatchers:
- defaultService: [DEFAULT_SERVICE_URL]
name: matcher1
routeRules:
- matchRules:
- prefixMatch: '/'
routeAction:
weightedBackendServices:
- backendService: [SERVICE_URL]
weight: 100
faultInjectionPolicy:
delay:
fixedDelay:
seconds: 10
nanos: 0
percentage: 100
abort:
httpStatus: 503
percentage: 50
Configurare il filtro di configurazione in base alla corrispondenza di MetadataFilters
MetadataFilters sono abilitate con regole di forwarding e HttpRouteRuleMatch.
Utilizza questa funzionalità per controllare una determinata regola di forwarding o di route in modo che
il control plane invii la regola di forwarding o di route solo ai proxy i cui
metadati del nodo corrispondono all'impostazione del filtro dei metadati. Se non specifichi alcun
MetadataFilters, la regola viene inviata a tutti i proxy Envoy.
Questa funzionalità semplifica l'esecuzione di un deployment in più fasi di una configurazione.
Ad esempio, crea una regola di forwarding denominata forwarding-rule1, che vuoi
venga inviata solo agli Envoy i cui metadati del nodo contengono app: review e
version: canary.
Per aggiungere MetadataFilters a una regola di forwarding:
gcloud
Esegui il comando
gcloud exportper ottenere la configurazione della regola di forwarding:gcloud compute forwarding-rules export forwarding-rule1 \ --destination=forwarding-rule1-config.yaml \ --globalElimina la regola di forwarding:
gcloud compute forwarding-rules delete forwarding-rule1 \ --globalAggiorna il file
forwarding-rule1-config.yaml.L'esempio seguente crea un filtro dei metadati
MATCH_ALL:metadataFilters: - filterMatchCriteria: 'MATCH_ALL' filterLabels: - name: 'app' value: 'review' - name: 'version' value: 'canary'L'esempio seguente crea un filtro dei metadati
MATCH_ANY:metadataFilters: - filterMatchCriteria: 'MATCH_ANY' filterLabels: - name: 'app' value: 'review' - name: 'version' value: 'production'Rimuovi tutti i campi di solo output dal file
forwarding-rule1-config.yaml. Per saperne di più, consulta la documentazione relativa agcloud compute forwarding-rules import.Esegui il comando
gcloud importper aggiornare il fileforwarding-rule1-config.yaml:gcloud compute forwarding-rules import forwarding-rule1 \ --source=forwarding-rule1-config.yaml \ --globalSegui queste istruzioni per aggiungere i metadati del nodo a Envoy prima di avviare Envoy. È supportato solo un valore stringa.
a. Per un deployment basato su VM, in
bootstrap_template.yaml, aggiungi quanto segue nella sezionemetadata:app: 'review' version: 'canary'b. Per un deployment basato su Google Kubernetes Engine o Kubernetes, in
trafficdirector_istio_sidecar.yaml, aggiungi quanto segue nella sezioneenv:- name: ISTIO_META_app value: 'review' - name: ISTIO_META_version value: 'canary'
Esempi di filtri dei metadati
Utilizza le seguenti istruzioni per uno scenario in cui più progetti si trovano nella stessa rete VPC condiviso e vuoi che le risorse Cloud Service Mesh di ogni progetto di servizio siano visibili ai proxy nello stesso progetto.
La configurazione del VPC condiviso è la seguente:
- Nome progetto host:
vpc-host-project - Progetti di servizio:
project1,project2 - Servizi di backend con istanze o endpoint di backend che eseguono un proxy conforme a xDS in
project1eproject2
Per configurare Cloud Service Mesh in modo da isolare project1, segui questi passaggi:
gcloud
Crea tutte le regole di inoltro in
project1con il seguente filtro dei metadati:metadataFilters: - filterMatchCriteria: 'MATCH_ALL' filterLabels - name: 'project_name' value: 'project1' - name: 'version' value: 'production'Quando configuri i proxy di cui è stato eseguito il deployment nelle istanze o negli endpoint in
project1, includi i seguenti metadati nella sezione dei metadati del nodo del file di bootstrap:project_name: 'project1' version: 'production'Verifica che i proxy già implementati in
project2non abbiano ricevuto la regola di forwarding creata nel primo passaggio. Per farlo, prova ad accedere ai servizi inproject1da un sistema che esegue un proxy inproject2. Per informazioni su come verificare che una configurazione di Cloud Service Mesh funzioni correttamente, consulta Verifica della configurazione.
Per testare una nuova configurazione su un sottoinsieme di proxy prima di renderla disponibile a tutti i proxy, segui questi passaggi:
gcloud
Avvia i proxy che utilizzi per i test con i seguenti metadati del nodo. Non includere i metadati di questo nodo per i proxy che non utilizzi per i test.
version: 'test'Per ogni nuova regola di forwarding che vuoi testare, includi il seguente filtro dei metadati:
metadataFilters: - filterMatchCriteria: 'MATCH_ALL' filterLabels: - name: 'version' value: 'test'Testa la nuova configurazione inviando traffico ai proxy di test e apporta le modifiche necessarie. Se la nuova configurazione funziona correttamente, solo i proxy che testi ricevono la nuova configurazione. I proxy rimanenti non ricevono la nuova configurazione e non sono in grado di utilizzarla.
Quando confermi che la nuova configurazione funziona correttamente, rimuovi il filtro dei metadati associato. In questo modo tutti i proxy ricevono la nuova configurazione.
Risoluzione dei problemi
Utilizza queste informazioni per risolvere i problemi quando il traffico non viene indirizzato in base alle regole di routing e alle norme sul traffico che hai configurato.
Sintomi:
- Aumento del traffico verso i servizi nelle regole sopra la regola in questione.
- Un aumento imprevisto delle risposte HTTP
4xxe5xxper una determinata regola di route.
Soluzione: poiché le regole di route vengono interpretate in ordine di priorità, esamina la priorità assegnata a ogni regola.
Quando definisci le regole di routing, assicurati che le regole con priorità più alta (ovvero con numeri di priorità più bassi) non instradino inavvertitamente il traffico che altrimenti sarebbe stato instradato da una regola di routing successiva. Considera l'esempio seguente:
Prima regola di route
- Route rule match pathPrefix =
/shopping/ - Azione di reindirizzamento: invia traffico al servizio di backend
service-1 - Priorità regola:
4
- Route rule match pathPrefix =
Seconda regola di route
- Route rule match regexMatch =
/shopping/cart/ordering/.* - Azione di reindirizzamento: invia traffico al servizio di backend
service-2 - Priorità regola:
8
- Route rule match regexMatch =
In questo caso, una richiesta con il percorso /shopping/cart/ordering/cart.html
viene indirizzata a service-1. Anche se la seconda regola avrebbe avuto una corrispondenza, viene
ignorata perché la prima regola aveva la priorità.
Bloccare il traffico tra i servizi
Se vuoi bloccare il traffico tra il servizio A e il servizio B e il deployment si trova su GKE, configura la sicurezza del servizio e utilizza un criterio di autorizzazione per bloccare il traffico tra i servizi. Per istruzioni complete, consulta Sicurezza dei servizi Cloud Service Mesh e le istruzioni di configurazione con Envoy e gRPC senza proxy.
Passaggi successivi
- Per aiutarti a risolvere i problemi di configurazione di Cloud Service Mesh, consulta Risoluzione dei problemi dei deployment che utilizzano Envoy.