Configurazione di un bilanciatore del carico delle applicazioni esterno

I bilanciatori del carico delle applicazioni esterni con Identity-Aware Proxy (IAP) sono supportati con i seguenti tipi di backend:

Questa guida alla configurazione mostra come creare un bilanciatore del carico delle applicazioni esterno con un backend del gruppo di istanze gestite di Compute Engine con IAP abilitato.

Per i concetti generali, consulta la panoramica del bilanciatore del carico delle applicazioni esterno.

Se sei un utente esistente del bilanciatore del carico delle applicazioni classico, assicurati di consultare la panoramica della migrazione quando pianifichi un nuovo deployment con il bilanciatore del carico delle applicazioni esterno globale.

Topologie del bilanciatore del carico

Per un bilanciatore del carico HTTPS, crei la configurazione mostrata nel diagramma seguente.

Bilanciatore del carico delle applicazioni esterno con un backend del gruppo di istanze gestite (MIG).
Figura 1. Bilanciatore del carico delle applicazioni esterno con un backend del gruppo di istanze gestite (MIG) (fai clic per ingrandire).

Per un bilanciatore del carico HTTP, crei la configurazione mostrata nel diagramma seguente.

Bilanciatore del carico delle applicazioni esterno con un backend del gruppo di istanze gestite (MIG).
Figura 2. Bilanciatore del carico delle applicazioni esterno con un backend del gruppo di istanze gestite (MIG) (fai clic per ingrandire).

La sequenza di eventi nei diagrammi è la seguente:

  1. Un client invia una richiesta di contenuti all'indirizzo IPv4 esterno definito nella regola di forwarding.
  2. Per un bilanciatore del carico HTTPS, la regola di forwarding indirizza la richiesta al proxy HTTPS di destinazione.

    Per un bilanciatore del carico HTTP, la regola di forwarding indirizza la richiesta al proxy HTTP di destinazione.

  3. Il proxy di destinazione utilizza la regola nella mappa URL per determinare che un singolo servizio di backend riceve tutte le richieste.

  4. Il bilanciatore del carico determina che il servizio di backend ha un solo gruppo di istanze e indirizza la richiesta a un'istanza di macchina virtuale (VM) in quel gruppo.

  5. La VM fornisce i contenuti richiesti dall'utente.

Prima di iniziare

Completa i seguenti passaggi prima di creare il bilanciatore del carico.

Configura una risorsa del certificato SSL

Per creare il bilanciatore del carico, devi disporre di una risorsa del certificato SSL che può essere collegata al proxy di destinazione. La risorsa del certificato SSL può essere una mappa dei certificati o un certificato SSL di Compute Engine (certificato classico).

Mappa di certificati

Puoi creare una mappa dei certificati come descritto in uno dei seguenti documenti:

Certificato SSL di Compute Engine

Per un bilanciatore del carico HTTPS, crea una risorsa certificato SSL di Compute Engine come descritto in uno dei seguenti documenti:

Ti consigliamo di utilizzare un certificato gestito da Google.

Configura le autorizzazioni

Per completare i passaggi di questa guida, devi disporre dell'autorizzazione per creare istanze Compute Engine, regole firewall e indirizzi IP prenotati in un progetto. Devi disporre del ruolo di proprietario o editor del progetto oppure dei seguenti ruoli IAM di Compute Engine.

Attività Ruolo richiesto
Creare istanze Instance Admin
Aggiungere e rimuovere regole firewall Security Admin
Creare i componenti del bilanciatore del carico Network Admin
Creare un progetto (facoltativo) Project Creator

Per saperne di più, consulta le guide seguenti:

(Facoltativo) Utilizza indirizzi BYOIP

Con Bring Your Own IP (BYOIP), puoi importare i tuoi indirizzi pubblici inGoogle Cloud per utilizzarli con le risorse Google Cloud . Ad esempio, se importi i tuoi indirizzi IPv4, puoi assegnarne uno alla regola di forwarding quando configuri il bilanciatore del carico. Quando segui le istruzioni riportate in questo documento per configurare il bilanciatore del carico, fornisci l'indirizzo BYOIP come indirizzo IP.

Per saperne di più sull'utilizzo di BYOIP, consulta Bring Your Own IP.

Configura la rete e le subnet

Per creare la rete e la subnet di esempio, segui questi passaggi.

Console

  1. Nella console Google Cloud , vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Fai clic su Crea rete VPC.

  3. Inserisci un Nome per la rete.

  4. In Modalità di creazione subnet, scegli Personalizzata.

  5. Nella sezione Nuova subnet, configura i seguenti campi:

    1. Specifica un Nome per la subnet.
    2. Seleziona una Regione.
    3. In Tipo di stack IP, seleziona IPv4 (stack singolo).
    4. Inserisci un Intervallo di indirizzi IP. Questo è l'intervallo IPv4 principale per la subnet.
  6. Fai clic su Fine.

  7. Per aggiungere una subnet in una regione diversa, fai clic su Aggiungi subnet e ripeti i passaggi precedenti.

  8. Fai clic su Crea.

gcloud

  1. Crea la rete VPC in modalità personalizzata:

    gcloud compute networks create NETWORK \
        --subnet-mode=custom
    
  2. All'interno della rete, crea una subnet per i backend:

    gcloud compute networks subnets create SUBNET \
        --network=NETWORK \
        --stack-type=IPV4_ONLY \
        --range=10.1.2.0/24 \
        --region=REGION
    

    Sostituisci quanto segue:

    • NETWORK: un nome per la rete VPC.

    • SUBNET: un nome per la subnet.

    • REGION: il nome della regione

Crea un gruppo di istanze gestite

Per configurare un bilanciatore del carico con un backend di Compute Engine, le VM devono trovarsi in un gruppo di istanze. Questa guida descrive come creare un gruppo di istanze gestite con VM Linux su cui è in esecuzione Apache e poi configurare il bilanciamento del carico. Un gruppo di istanze gestite crea ciascuna delle sue istanze gestite in base ai modelli di istanza che specifichi.

Il gruppo di istanze gestite fornisce VM che utilizzano i server di backend di un bilanciatore del carico HTTP(S) esterno. A scopo dimostrativo, i backend gestiscono i propri nomi host.

Prima di creare un gruppo di istanze gestite, crea un modello di istanza.

Console

Per supportare il traffico IPv4, segui questi passaggi:

  1. Nella console Google Cloud , vai alla pagina Template di istanza.

    Vai a Template di istanza

  2. Fai clic su Crea template di istanza.

  3. In Nome, inserisci lb-backend-template.

  4. Assicurati che il disco di avvio sia impostato su un'immagine Debian, ad esempio Debian GNU/Linux 10 (buster). Queste istruzioni utilizzano comandi disponibili solo su Debian, come apt-get.

  5. Espandi Opzioni avanzate.

  6. Espandi Networking e configura i seguenti campi:

    1. In Tag di rete, inserisci allow-health-check.
    2. Nella sezione Interfacce di rete, fai clic su Modifica e apporta le seguenti modifiche:
      • Rete: NETWORK
      • Subnet: SUBNET
      • Traffico IPv4: IPv4 (stack singolo)
    3. Fai clic su Fine.
  7. Espandi Gestione. Nel campo Script di avvio, inserisci il seguente 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
    
  8. Fai clic su Crea.

gcloud

Per supportare il traffico IPv4, esegui questo comando:

gcloud compute instance-templates create TEMPLATE_NAME \
  --region=REGION \
  --network=NETWORK \
  --subnet=SUBNET \
  --stack-type=IPV4_ONLY \
  --tags=allow-health-check \
  --image-family=debian-10 \
  --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'

Terraform

Per creare il template di istanza, utilizza la risorsa google_compute_instance_template.

resource "google_compute_instance_template" "default" {
  name = "lb-backend-template"
  disk {
    auto_delete  = true
    boot         = true
    device_name  = "persistent-disk-0"
    mode         = "READ_WRITE"
    source_image = "projects/debian-cloud/global/images/family/debian-11"
    type         = "PERSISTENT"
  }
  labels = {
    managed-by-cnrm = "true"
  }
  machine_type = "n1-standard-1"
  metadata = {
    startup-script = "#! /bin/bash\n     sudo apt-get update\n     sudo apt-get install apache2 -y\n     sudo a2ensite default-ssl\n     sudo a2enmod ssl\n     vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\"\n   sudo echo \"Page served from: $vm_hostname\" | \\\n   tee /var/www/html/index.html\n   sudo systemctl restart apache2"
  }
  network_interface {
    access_config {
      network_tier = "PREMIUM"
    }
    network    = "global/networks/default"
    subnetwork = "regions/us-east1/subnetworks/default"
  }
  region = "us-east1"
  scheduling {
    automatic_restart   = true
    on_host_maintenance = "MIGRATE"
    provisioning_model  = "STANDARD"
  }
  service_account {
    email  = "default"
    scopes = ["https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append"]
  }
  tags = ["allow-health-check"]
}

Crea il gruppo di istanze gestite e seleziona il modello di istanza.

Console

  1. Nella console Google Cloud , vai alla pagina Gruppi di istanze.

    Vai a Gruppi di istanze

  2. Fai clic su Crea gruppo di istanze.

  3. A sinistra, scegli Nuovo gruppo di istanze gestite (stateless).

  4. In Nome, inserisci lb-backend-example.

  5. In Località, seleziona Zona singola.

  6. In Regione, seleziona la regione che preferisci.

  7. In Zona, seleziona una zona.

  8. In Template di istanza, seleziona il template di istanza lb-backend-template.

  9. In Modalità di scalabilità automatica, seleziona On: aggiungi e rimuovi istanze al gruppo.

    Imposta Numero minimo di istanze su 2 e Numero massimo di istanze su 2 o più.

  10. Per creare il nuovo gruppo di istanze, fai clic su Crea.

gcloud

  1. Crea un gruppo di istanze gestite basato sul template.

    gcloud compute instance-groups managed create lb-backend-example \
       --template=TEMPLATE_NAME --size=2 --zone=ZONE_A
    

Terraform

Per creare il gruppo di istanze gestite, utilizza la risorsa google_compute_instance_group_manager.

resource "google_compute_instance_group_manager" "default" {
  name = "lb-backend-example"
  zone = "us-east1-b"
  named_port {
    name = "http"
    port = 80
  }
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  base_instance_name = "vm"
  target_size        = 2
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Aggiungi una porta denominata al gruppo di istanze

Per il gruppo di istanze, definisci un servizio HTTP e mappa un nome di porta alla porta pertinente. Il servizio di bilanciamento del carico inoltra il traffico alla porta denominata. Per saperne di più, consulta Porte denominate.

Console

  1. Nella console Google Cloud , vai alla pagina Gruppi di istanze.

    Vai a Gruppi di istanze

  2. Fai clic su lb-backend-example.

  3. Nella pagina Panoramica del gruppo di istanze, fai clic su Modifica.

  4. Nella sezione Mappatura delle porte, fai clic su Aggiungi porta.

    1. Come nome della porta, inserisci http. Come numero della porta, inserisci 80.
  5. Fai clic su Salva.

gcloud

Utilizza il comando gcloud compute instance-groups set-named-ports.

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone ZONE_A

Terraform

L'attributo named_port è incluso nell'esempio del gruppo di istanze gestite.

Configura 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 dai sistemi di controllo di integrità 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 Policy del firewall.

    Vai a Policy del firewall

  2. Fai clic su Crea regola firewall per creare la regola firewall.

  3. In Nome, inserisci fw-allow-health-check.

  4. Seleziona una Rete.

  5. In Destinazioni, 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, quindi digita 80 per i numeri di porta.

  11. Fai clic su Crea.

gcloud

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

Terraform

Per creare la regola firewall, utilizza la risorsa google_compute_firewall.

resource "google_compute_firewall" "default" {
  name          = "fw-allow-health-check"
  direction     = "INGRESS"
  network       = "global/networks/default"
  priority      = 1000
  source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
  target_tags   = ["allow-health-check"]
  allow {
    ports    = ["80"]
    protocol = "tcp"
  }
}

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Prenota 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. Nella console Google Cloud , vai alla pagina Indirizzi IP esterni.

    Vai a Indirizzi IP esterni

  2. Per prenotare un indirizzo IPv4, fai clic su Prenota indirizzo IP statico esterno.

  3. In Nome, inserisci lb-ipv4-1.

  4. Imposta Livello di servizio di rete su Premium.

  5. Imposta Versione IP su IPv4.

  6. Imposta Tipo su Globale.

  7. Fai clic su Prenota.

gcloud

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

Prendi nota dell'indirizzo IPv4 prenotato:

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