Configurare il routing basato su parametri di query e intestazioni per il bilanciatore del carico delle applicazioni classico

Questa pagina include due esempi per il bilanciatore del carico delle applicazioni classico:

Per configurare la gestione del traffico per il bilanciatore del carico delle applicazioni esterno globale e Application Load Balancer esterno regionale, consulta le pagine seguenti:

Prima di iniziare

Configurare il routing basato su parametri di query

Questo esempio mostra l'utilizzo parametri di ricerca per eseguire test A/B mediante corrispondenze della stringa di query.

Aggiungi due gruppi di istanza di backend

Affinché il routing sia utile, devi avere più backend.

Per configurare due backend, le VM devono trovarsi in due gruppi di istanze. Questa guida descrive come creare gruppi di istanze gestite con VM Linux che hanno Apache in esecuzione, quindi configura il bilanciamento del carico.

I gruppi di istanze gestite forniscono VM che eseguono i server di backend di un bilanciatore del carico HTTP esterno. A scopo dimostrativo, i backend gestiscono i propri nomi host.

Per semplicità, i backend si trovano nella stessa regione. Se vuoi una configurazione in più regioni, devi avere configurato un modello di istanza per la seconda regione.

Console

  1. Creare un modello di istanza. Nella console Google Cloud, vai a la pagina Modelli di istanza.

    Vai a Modelli di istanza

    1. Fai clic su Crea modello istanza.
    2. In Nome, inserisci lb-backend-template.
    3. Assicurati che il disco di avvio sia impostato su un'immagine Debian, ad esempio Debian GNU/Linux 12 (bookworm). Queste istruzioni utilizzano comandi disponibili solo su Debian, come apt-get.
    4. Fai clic su Opzioni avanzate.
    5. Fai clic su Networking e configura il seguente campo:
      1. In Tag di rete, inserisci allow-health-check.
    6. Fai clic su Gestione. Inserisci lo script che segue nel campo Script di avvio.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    7. Fai clic su Crea.

  2. Creare un gruppo di istanze gestite. Vai alla pagina Gruppi di istanze nella console Google Cloud.

    Vai a Gruppi di istanze

    1. Fai clic su Crea gruppo di istanze.
    2. Seleziona Nuovo gruppo di istanze gestite (stateless). Per maggiori informazioni consulta le informazioni sui MIG stateless o stateful.
    3. In Nome, inserisci first-example-ig.
    4. In Località, seleziona Zona singola.
    5. In Regione, seleziona l'area che preferisci. Questo esempio utilizza us-east1.
    6. In Zona, seleziona us-east1-b.
    7. In Modello di istanza, seleziona il modello di istanza lb-backend-template.
    8. In Numero massimo di istanze, inserisci 2.
    9. In Modalità di scalabilità automatica, seleziona Off:do not autoscale.
    10. Fai clic su Crea.

Crea un altro gruppo di istanze gestite come questo. Indica il secondo second-example-ig e basalo sul modello lb-backend-template.

gcloud

  1. Creare un modello di istanza.

    gcloud compute instance-templates create `lb-backend-template` \
       --region=us-east1 \
       --network=default \
       --subnet=default \
       --tags=allow-health-check \
       --image-family=debian-12 \
       --image-project=debian-cloud \
       --metadata=startup-script='#! /bin/bash
         apt-get update
         apt-get install apache2 -y
         a2ensite default-ssl
         a2enmod ssl
         vm_hostname="$(curl -H "Metadata-Flavor:Google" \
         http://metadata.google.internal/computeMetadata/v1/instance/name)"
         echo "Page served from: $vm_hostname" | \
         tee /var/www/html/index.html
         systemctl restart apache2'
    
  2. Crea il primo gruppo di istanze gestite basato sul modello.

    gcloud compute instance-groups managed create first-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-b
    
  3. Crea il secondo gruppo di istanze gestite in base al modello.

    gcloud compute instance-groups managed create second-example-ig \
       --template=lb-backend-template --size=2 --zone=us-east1-c
    

Configurazione di una regola firewall

In questo esempio, crei la regola firewall fw-allow-health-check. Si tratta di una regola in entrata che consente il traffico proveniente dai sistemi di controllo di integrità di Google Cloud (130.211.0.0/22 e 35.191.0.0/16). Questo esempio utilizza il tag di destinazione allow-health-check per identificare le VM.

Console

  1. Nella console Google Cloud, vai alla pagina Criteri firewall.
    Vai ai criteri firewall
  2. Fai clic su Crea regola firewall per creare la seconda regola firewall:
  3. Inserisci un nome per fw-allow-health-check.
  4. In Rete, seleziona Default.
  5. In Target, seleziona Tag di destinazione specificati.
  6. Compila il campo Tag di destinazione con allow-health-check.
  7. Imposta Filtro di origine su Intervalli IPv4.
  8. Imposta Intervalli IPv4 di origine su 130.211.0.0/22 e 35.191.0.0/16.
  9. In Protocolli e porte, seleziona Protocolli e porte specificati.
  10. Seleziona la casella di controllo TCP e inserisci 80 per la porta numeri.
  11. Fai clic su Crea.

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp

Prenotazione di un indirizzo IP esterno

Ora che le istanze sono operative, configura un indirizzo IP esterno statico e globale, che verrà utilizzato dai clienti per raggiungere il bilanciatore del carico.

Console

  1. Vai alla pagina Indirizzi IP esterni nella console Google Cloud.
    Vai alla pagina Indirizzi IP esterni
  2. Fai clic su Prenota indirizzo statico per prenotare un indirizzo IPv4.
  3. Assegna il nome di lb-ipv4-1.
  4. Imposta il livello di rete su Standard.
  5. Imposta la versione IP su IPv4.
  6. Imposta il Tipo su Globale.
  7. Fai clic su Prenota.
  8. Assicurati che l'opzione Tipo sia impostata su Globale.
  9. Fai clic su Prenota.

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

Prendi nota dell'indirizzo IPv4 riservato:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Configurazione dei backend del bilanciatore del carico

Console

Al momento, la console Google Cloud non è supportata per la configurazione del routing basato su intestazioni e parametri. Usa invece gcloud o l'API.

gcloud

  1. Crea un controllo di integrità.
        gcloud compute health-checks create http http-basic-check \
            --port 80
        
  2. Crea il primo servizio di backend.
    • Per un bilanciatore del carico delle applicazioni esterno globale, utilizza il comando gcloud CLI con load-balancing-scheme=EXTERNAL_MANAGED. Questa impostazione offre funzionalità di gestione del traffico avanzate.
    • Per un bilanciatore del carico delle applicazioni classico, utilizza load-balancing-scheme=EXTERNAL.
        gcloud compute backend-services create service-a \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  3. Crea il secondo servizio di backend.
        gcloud compute backend-services create service-b \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --global-health-checks \
            --protocol HTTP \
            --health-checks http-basic-check \
            --global
        
  4. Aggiungi il tuo primo gruppo di istanze come backend del primo backend completamente gestito di Google Cloud.
        gcloud compute backend-services add-backend service-a \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=first-example-ig \
            --instance-group-zone=us-east1-b \
            --global
        
  5. Aggiungi il tuo secondo gruppo di istanze come backend del secondo backend completamente gestito di Google Cloud.
        gcloud compute backend-services add-backend service-b \
            --balancing-mode=UTILIZATION \
            --max-utilization=0.8 \
            --capacity-scaler=1 \
            --instance-group=second-example-ig \
            --instance-group-zone=us-east1-c \
            --global
        

Creazione della mappa URL

Console

Al momento, la console Google Cloud non è supportata per la configurazione del routing basato su intestazioni e parametri. Usa invece gcloud o l'API.

gcloud

  1. Crea un file YAML /tmp/web-map-http.yaml. Sostituisci PROJECT_ID con il tuo ID progetto.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: web-map-http
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              queryParameterMatches:
                - name: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /?ABTest=A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      expectedOutputUrl: http://example.com/?ABTest=A
    - description: Test routing for query ABTest with B
      host: example.com
      path: /?ABTest=B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
      expectedOutputUrl: http://example.com/?ABTest=B
    
  2. Convalida la mappa URL.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Se i test hanno esito positivo e il comando restituisce un messaggio di operazione riuscita, salva le modifiche alla mappa URL.

  3. Aggiorna la mappa URL.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Creazione del proxy di destinazione e della regola di inoltro

Console

Al momento, la console Google Cloud non è supportata per la configurazione del routing basato su intestazioni e parametri. Usa invece gcloud o l'API.

gcloud

  1. Crea un proxy HTTP di destinazione per instradare le richieste alla mappa URL.
        gcloud compute target-http-proxies create http-lb-proxy \
            --url-map web-map-http
        
  2. Crea una regola di forwarding globale per instradare le richieste in entrata a il proxy.
    • Per un bilanciatore del carico delle applicazioni esterno globale, utilizza il comando gcloud CLI con load-balancing-scheme=EXTERNAL_MANAGED. Questo impostazione offre traffico avanzato funzionalità di gestione dei dati.
    • Per un bilanciatore del carico delle applicazioni classico, utilizza load-balancing-scheme=EXTERNAL.
        gcloud compute forwarding-rules create http-content-rule \
            --load-balancing-scheme=LOAD_BALANCING_SCHEME \
            --network-tier=PREMIUM \
            --address=lb-ipv4-1 \
            --global \
            --target-http-proxy=http-lb-proxy \
            --ports=80
        

Test

Prendi nota dell'indirizzo IPv4 riservato:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Testa questa configurazione eseguendo:

curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B

In un browser, apri http://IP_ADDRESS?ABTest=A e http://IP_ADDRESS?ABTest=B.

Configurare il routing basato sulle intestazioni HTTP

Questo esempio mostra l'aggiunta e la rimozione di intestazioni HTTP da eseguire percorso intelligente.

Prima di iniziare

Puoi utilizzare un bilanciatore del carico delle applicazioni esterno esistente o crearne uno nuovo.

Puoi utilizzare questa funzionalità con uno qualsiasi dei tipi di backend supportati. Questo esempio presuppone che tu stia utilizzando VM in un gruppo di istanze.

Per configurare un bilanciatore del carico semplice, vedi l'esempio basato su parametri di query riportato sopra.

Aggiornamento della mappa URL

Console

Al momento, la console Google Cloud non è supportata per la configurazione del routing basato su intestazioni e parametri. Usa invece gcloud o l'API.

gcloud

  1. Questo esempio mostra come utilizzare le intestazioni delle richieste HTTP per eseguire test A/B tramite la corrispondenza dei valori nelle intestazioni HTTP della richiesta.

    Crea un file YAML /tmp/web-map-http.yaml. Sostituisci PROJECT_ID con l'ID del tuo progetto.

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    kind: compute#urlMap
    name: web-map-http
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
      name: path-matcher-1
      routeRules:
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: A
          priority: 0
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
        - matchRules:
            - prefixMatch: /
              headerMatches:
                - headerName: ABTest
                  exactMatch: B
          priority: 1
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    tests:
    - description: Test routing for query ABTest with A
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: A
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a
    - description: Test routing for query ABTest with B
      host: example.com
      path: /
      headers:
      - name: ABTest
        value: B
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
    
  2. Convalida la mappa URL.

    gcloud compute url-maps validate --source /tmp/web-map-http.yaml
    

    Se i test hanno esito positivo e il comando restituisce un messaggio di operazione riuscita, salva le modifiche alla mappa URL.

  3. Aggiorna la mappa URL.

    gcloud compute url-maps import web-map-http \
       --source /tmp/web-map-http.yaml \
       --global
    

Test

Utilizzando l'indirizzo IPv4 del bilanciatore del carico associato, testa questa configurazione eseguendo:

curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"

Passaggi successivi