Configura il bilanciamento del carico tra aree geografiche per i server web Microsoft IIS

Questo tutorial descrive come utilizzare il bilanciamento del carico HTTP(S) per distribuire il traffico al server web Microsoft Internet Information Services (IIS) in esecuzione su VM di Compute Engine di cui è stato eseguito il provisioning in diverse aree geografiche.

Obiettivo

Questo tutorial mostra come bilanciare il carico del traffico per il sito www.example.com e come garantire che:

  • Le richieste in entrata vengono indirizzate all'area geografica più vicina.
  • Se un'istanza non riesce o raggiunge la capacità massima, il bilanciatore del carico indirizza le richieste ad altre istanze adattabili nella stessa area geografica o in un'altra.

La configurazione per questo scenario utilizza un bilanciatore del carico HTTP(S) esterno che richiede richieste tramite un singolo indirizzo IP globale. Questo indirizzo IP può indirizzare ogni richiesta in entrata in base al tipo di connessione, ovvero HTTP o HTTPS. Per le richieste HTTPS, il bilanciatore del carico implementa la crittografia SSL/TLS tra il client che invia la richiesta e il bilanciatore del carico.

Il seguente diagramma mostra l'architettura del bilanciatore del carico:

bilanciamento del carico tra aree geografiche.

Tieni presente che il bilanciatore del carico include diversi componenti per ottenere la massima configurabilità. Per una descrizione delle operazioni svolte da ciascun componente, consulta la Panoramica del bilanciamento del carico HTTP(S).

Questo tutorial ti mostra come completare le seguenti attività per raggiungere il tuo obiettivo:

  • Configura le istanze di backend.
  • Crea e configura il servizio di bilanciamento del carico.
  • Invia il traffico ai backend.
  • Limita l'accesso ai backend.
  • Simula un'interruzione.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

  • Istanze di macchine virtuali (VM) Compute Engine
  • Dischi permanenti di Compute Engine
  • (Facoltativo) Certificato SSL gestito da Google
  • Immagini della macchina Windows Server 2016

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

Al termine di questo tutorial, puoi evitare una fatturazione continua eliminando le risorse che hai creato. Per scoprire di più, vedi Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Abilita le API Compute Engine, BigQuery, and Cloud Firestore.

    Abilita le API

  5. Installa e inizializza l'interfaccia a riga di comando di Google Cloud.
  6. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  8. Abilita le API Compute Engine, BigQuery, and Cloud Firestore.

    Abilita le API

  9. Installa e inizializza l'interfaccia a riga di comando di Google Cloud.
  10. In alternativa, puoi utilizzare Cloud Shell su Google Cloud Console per interagire con Google Cloud, nel qual caso non hai bisogno di installare l'interfaccia a riga di comando di Google Cloud.
  11. Installa l'estensione RDP di Chrome per Google Cloud. Se hai già un client RDP, puoi ignorare questa attività.
  12. Decidi le zone e le aree geografiche in cui vuoi eseguire il provisioning delle risorse. Il diagramma dell'architettura mostra le risorse di cui è stato eseguito il deployment nelle diverse zone delle aree geografiche degli Stati Uniti e dell'UE. È solo un riferimento. Puoi eseguire il deployment delle tue risorse in tutte le aree geografiche o zone di tua scelta.
  13. (Facoltativo) Leggi e comprendi la panoramica del bilanciamento del carico HTTP(S).

Configura le istanze di backend

In questa sezione creerai due servizi di backend in aree geografiche diverse. Ogni servizio di backend include due istanze di backend, ciascuna delle quali esegue un server web Microsoft IIS su Windows Server 2016. Per evitare una complessa configurazione manuale di ogni server, crea un'immagine disco da un'istanza server e utilizza questa immagine per creare le altre istanze server.

Creare e configurare un'istanza di Compute Engine

Per creare l'istanza da utilizzare come immagine di origine:

Da Google Cloud Marketplace, avvia un'istanza di Windows Server 2016 che esegue Microsoft IIS su Compute Engine in una zona a tua scelta e configura le regole del firewall per consentire il traffico HTTP, HTTPS e RDP esterno all'istanza dell'immagine di origine:

  1. In Google Cloud Console, vai alla pagina ASP.NET Framework Cloud Marketplace.

    Vai a Cloud Marketplace

  2. Fai clic su Launch .

  3. Nel campo Nome deployment, inserisci src-img.

  4. Nel campo Zona, seleziona una zona in cui vuoi eseguire il deployment dell'immagine.

  5. Nella sezione Piattaforma CPU e GPU, seleziona 2016 come versione del sistema operativo Windows Server.

  6. Nella sezione Networking - Firewall, seleziona soltanto le seguenti opzioni:

    • Consenti traffico HTTP
    • Consenti traffico HTTPS
    • Consenti traffico RDP

  7. Accetta i termini di servizio e fai clic su Esegui il deployment.

  8. Attendi la creazione dell'istanza di Compute Engine.

Configura la tua istanza di immagine di origine

Per configurare la tua nuova istanza dell'immagine di origine, crea un nuovo utente Windows sull'istanza dell'immagine di origine e stabilisci una connessione RDP:

  1. In Google Cloud Console, vai alla pagina Istanze VM.

    Vai alle istanze VM

  2. Fai clic sul nome dell'istanza dell'immagine di origine (src-img).

  3. Fai clic su Imposta password di Windows.

  4. Nella finestra di dialogo Imposta nuova password di Windows, aggiungi il tuo nome utente e fai clic su Imposta per creare l'account utente nell'istanza.

  5. Copia la password fornita e chiudi la finestra di dialogo.

  6. Nella pagina della console dell'istanza, fai clic su RDP.

    • Se hai installato l'estensione RDP di Chrome, si apre la finestra dell'estensione. Conferma che vuoi connetterti all'istanza, inserisci il tuo nome utente e la password e fai clic su OK per connetterti all'istanza.
    • Se scegli di non installare l'estensione RDP di Chrome, hai la possibilità di scaricare il file RDP per la tua istanza. Utilizza questo file per connetterti all'istanza utilizzando la connessione desktop remoto di Windows o il tuo client di terze parti preferito.

Dopo aver stabilito una connessione RDP con l'istanza dell'immagine di origine, aggiungi una home page predefinita nella directory web predefinita di IIS:

  1. Sulla tua istanza di immagine di origine, apri PowerShell come amministratore.

  2. Crea una nuova home page nella directory web IIS predefinita C:\inetpub\wwwroot:

    Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html
    

Verifica che l'istanza dell'immagine di origine possa pubblicare contenuti

In Google Cloud Console, vai alla pagina Istanze VM.

Vai alle istanze VM

Fai clic sull'indirizzo IP esterno dell'istanza per verificare che stia pubblicando la home page creata in precedenza.

Crea un'immagine Windows Server 2016 riutilizzabile dall'istanza dell'immagine di origine

Dopo aver verificato che l'istanza dell'immagine di origine sia configurata correttamente e in grado di pubblicare i contenuti, crea un'immagine disco riutilizzabile dal disco permanente principale dell'istanza:

  1. Sulla tua istanza di immagine di origine, apri PowerShell come amministratore.
  2. Esegui questo comando per preparare il sistema per la clonazione:

    GCESysprep
    

    Al termine dell'operazione, GCESysprep, la connessione alla sessione RDP viene interrotta automaticamente.

  3. Sulla macchina locale, esegui il comando seguente per eliminare l'istanza di origine mantenendo il disco permanente principale:

    gcloud compute instances delete src-img \
       --keep-disks=boot \
       --zone=INSTANCE_ZONE
    

    Sostituisci INSTANCE_ZONE con la zona dell'istanza di origine.

  4. Dopo aver eliminato l'istanza, crea una nuova immagine dal disco permanente principale che hai conservato:

    gcloud compute images create win-be-img \
       --source-disk=src-img \
       --source-disk-zone=IMAGE_ZONE
    

    Sostituisci IMAGE_ZONE con la zona in cui vuoi creare l'immagine di origine.

Crea un modello di istanza utilizzando l'immagine di origine

Utilizza l'immagine disco del tuo server Windows configurato come immagine di origine per un modello di istanza. In seguito, configurerai due gruppi di istanze gestite per utilizzare questo modello per le nuove istanze.

Sul computer locale, esegui il comando seguente per creare un modello di istanza che utilizza win-be-img come immagine di origine e rdp-tag e www-tag come tag di istanza:

gcloud compute instance-templates create win-be-tmpl \
    --tags=rdp-tag,www-tag \
    --image=win-be-img

Crea un gruppo di istanze gestite per ogni area geografica

In ogni area geografica, crea gruppi di istanze gestite. Dopo aver creato ogni gruppo di istanze, il gruppo viene completato automaticamente con due istanze identiche in base al modello di istanza definito in precedenza. In seguito, configurerai il bilanciatore del carico per trattare questi gruppi di istanze come target di backend.

Per creare i gruppi di istanze gestite:

  1. Sulla tua macchina locale, esegui il comando seguente per creare un nuovo gruppo di istanze gestite nella zona in cui hai creato l'immagine e compilarla automaticamente con due istanze identiche:

    gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_1 \
       --base-instance-name=BASE_INSTANCE_NAME_1 \
       --size=2 \
       --zone=ZONE_1 \
       --template=win-be-tmpl
    

    Sostituisci quanto segue:

    • MANAGED_INSTANCE_GROUP_NAME_1: nome dell'istanza gestita
    • BASE_INSTANCE_NAME_1: nome dell'istanza di base
    • ZONE_1: la zona in cui vuoi eseguire il deployment dell'istanza gestita
  2. Crea un gruppo di istanze gestite nella seconda zona:

    gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_2 \
       --base-instance-name=BASE_INSTANCE_NAME_2 \
       --size=2 \
       --zone=ZONE_2 \
       --template=win-be-tmpl
    

    Sostituisci quanto segue:

    • MANAGED_INSTANCE_GROUP_NAME_2: nome dell'istanza gestita
    • BASE_INSTANCE_NAME_2: nome dell'istanza di base
    • ZONE_2: la zona in cui vuoi eseguire il deployment dell'istanza gestita

Verifica che le istanze di backend siano in esecuzione

  1. In Google Cloud Console, vai alla pagina Istanze VM.

    Vai alle istanze VM

  2. Fai clic sull'indirizzo IP esterno di ogni backend per verificare che questo stia pubblicando la home page che hai creato in precedenza.

Crea e configura il servizio di bilanciamento del carico

Il servizio di bilanciamento del carico di Compute Engine include diversi componenti. In questa sezione creerai dei componenti e li collegherai.

  1. Sul computer locale, esegui il comando seguente per creare un nuovo controllo di integrità. Il bilanciatore del carico utilizza questo controllo per verificare la reattività delle istanze di backend:

    gcloud compute http-health-checks create basic-check
    
  2. Crea un servizio di backend:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --protocol=HTTP \
      --http-health-checks=basic-check \
      --global
    

    Sostituisci BACKEND_SERVICE_NAME con un nome per il servizio di backend.

  3. Aggiungi i gruppi di istanze come target di backend per il servizio di backend:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
       --instance-group=MANAGED_INSTANCE_GROUP_NAME_1 \
       --instance-group-zone=ZONE_1
    
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
       --instance-group=MANAGED_INSTANCE_GROUP_NAME_2 \
       --instance-group-zone=ZONE_2
    
  4. Crea una mappa URL predefinita che indirizza tutte le richieste in entrata a tutte le tue istanze:

    gcloud compute url-maps create lb-map \
       --default-service=BACKEND_SERVICE_NAME
    
  5. Creare una risorsa certificato SSL. Il bilanciatore del carico utilizza questa risorsa per criptare e decriptare il traffico.

    Se hai già una chiave privata e un certificato SSL da un'autorità di certificazione, puoi utilizzarli per creare una nuova risorsa SSLCertificate eseguendo il comando seguente. In alternativa, puoi creare e utilizzare un certificato SSL gestito da Google o un certificato autofirmato per i test. Per ulteriori informazioni, consulta i certificati SSL.

    Esegui questo comando per creare la risorsa del certificato SSL:

    gcloud compute ssl-certificates create www-cert \
       --certificate CRT_FILE_PATH \
       --private-key KEY_FILE_PATH
    

    Sostituisci quanto segue:

    • CRT_FILE_PATH: percorso file locale del certificato
    • KEY_FILE_PATH: percorso del file della chiave privata
  6. Crea proxy HTTP e HTTPS di destinazione per instradare le richieste alla tua mappa URL. Il proxy è la parte del bilanciatore del carico che contiene il certificato SSL per il bilanciamento del carico HTTPS, quindi puoi anche caricare il certificato in questo passaggio:

    gcloud compute target-http-proxies create http-lb-proxy \
       --url-map=lb-map
    
    gcloud compute target-https-proxies create https-lb-proxy \
       --url-map lb-map \
       --ssl-certificate SSL_CERT
    

    Sostituisci SSL_CERT in base a quanto segue:

    • Se hai creato una risorsa SSLCertificate con il tuo certificato SSL e la tua chiave privata, sostituisci SSL_CERT con www-cert.
    • Se utilizzi un certificato SSL gestito da Google o autofirmato, sostituisci SSL_CERT con il nome del certificato.
  7. Affinché il bilanciatore del carico possa ricevere il traffico in modo affidabile, devi assegnare un indirizzo IP statico globale alla regola di forwarding globale del bilanciatore del carico.

    Per creare una risorsa indirizzo IP statico globale, esegui il seguente comando:

    gcloud compute addresses create lb-ip \
       --global \
       --network-tier=PREMIUM
    

    Prendi nota dell'indirizzo IP.

  8. Crea due regole di forwarding globali per gestire le richieste in entrata HTTP e HTTPS. Ogni regola di forwarding invia il traffico a uno dei proxy di destinazione creati in base all'indirizzo IP, al protocollo IP e alla porta specificati.

    • Per un bilanciatore del carico HTTP(S) esterno globale, utilizza il comando gcloud CLI con load-balancing-scheme=EXTERNAL_MANAGED. Questa impostazione offre funzionalità avanzate di gestione del traffico.
    • Per un bilanciatore del carico HTTP(S) esterno globale (classico), utilizza load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create http-fwd-rule \
       --load-balancing-scheme=LOAD_BALANCING_SCHEME \
       --network-tier=PREMIUM \
       --address=lb-ip \
       --global \
       --target-http-proxy=http-lb-proxy \
       --ports=80
    
    gcloud compute forwarding-rules create https-fwd-rule \
       --load-balancing-scheme=LOAD_BALANCING_SCHEME \
       --network-tier=PREMIUM \
       --address=lb-ip \
       --global \
       --target-https-proxy=https-lb-proxy \
       --ports=443
    

Dopo aver creato le regole di forwarding globali, la propagazione della configurazione può richiedere diversi minuti. Per verificare l'avanzamento della propagazione, puoi monitorare la tua configurazione in Google Cloud Console o eseguire il seguente comando sulla tua macchina locale:

gcloud compute backend-services get-health BACKEND_SERVICE_NAME

Invia traffico ai tuoi backend

Ora che hai configurato il tuo servizio di bilanciamento del carico, puoi iniziare a inviare traffico alla regola di forwarding e osservare la distribuzione del traffico su diverse istanze.

Invia il traffico ai tuoi backend come segue:

  1. In Google Cloud Console, vai alla pagina Bilanciamento del carico.

    Vai al bilanciamento del carico

  2. Seleziona la scheda Frontend.

  3. Per visualizzare la home page predefinita, fai clic sugli indirizzi IP nella colonna Indirizzo.

Limita l'accesso ai tuoi backend

Dopo aver verificato che tutto funzioni come previsto, modifica le regole firewall in modo che il traffico HTTP o HTTPS possa provenire solo dal servizio di bilanciamento del carico:

  1. In Google Cloud Console, vai alla pagina Firewall.

    Vai a Firewall

  2. Fai clic sulla regola firewall che consente l'accesso esterno alla porta 80.

  3. Fai clic su Modifica per modificare la regola firewall.

  4. Nel campo Intervalli IPv4 di origine, inserisci 130.211.0.0/22. In questo modo la regola degli IP di origine consentiti dalla regola firewall è limitata all'intervallo 130.211.0.0/22, che è l'intervallo IP del controllo di integrità del bilanciamento del carico HTTPS.

  5. Fai clic su Salva.

  6. In Google Cloud Console, vai alla pagina Istanze VM.

    Vai alle istanze VM

  7. Fai clic sull'indirizzo IP esterno di ogni istanza per verificare che l'istanza sia ora inaccessibile.

Simula un'interruzione

Per vedere come viene bilanciato un carico tra le istanze adattabili, puoi simulare un'interruzione per una o più istanze in un'area geografica.

Per impedire a un'istanza di ricevere richieste aggiuntive:

  1. Stabilisci una connessione RDP all'istanza.
  2. Apri PowerShell come amministratore nell'istanza.
  3. Esegui il comando seguente per creare una nuova regola firewall sull'istanza. Questo comando blocca il traffico del controllo di integrità dal controllo di integrità e impedisce tutte le nuove connessioni HTTP dal bilanciatore del carico all'istanza:

    netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
    
  4. Sul computer locale, esegui il comando seguente per verificare che l'istanza ora riporti uno stato UNHEALTHY:

    gcloud compute backend-services get-health BACKEND_SERVICE_NAME
    
  5. Dopo che l'istanza inizia a segnalare uno stato UNHEALTHY, invia una richiesta al tuo bilanciatore del carico. Solo le istanze adattabili dovrebbero rispondere.

  6. Dopo aver terminato la simulazione di un'interruzione, puoi ripristinare la connettività dell'istanza eliminando la regola firewall. Dopo aver aperto PowerShell come amministratore dell'istanza che non risponde, esegui il comando seguente per eliminare la regola:

    netsh advfirewall firewall delete rule name="Outage Test"
    

Esegui la pulizia

Al termine del tutorial, puoi riorganizzare le risorse che hai creato in modo che non utilizzino più la quota e vengano addebitati costi. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.

    Elimina un progetto Cloud:

    gcloud projects delete PROJECT_ID

Elimina singole risorse

Dovrai eliminare singolarmente tutte le risorse create per il progetto (immagini, modelli di istanza, gruppi di istanze, controlli di integrità, servizi di backend, mappa URL, proxy http, indirizzi, regole di forwarding). Non puoi eliminare le istanze VM finché non esegui i comandi seguenti.

Esegui i comandi seguenti sul computer locale per eliminare le risorse create per il tutorial:

  1. Elimina le regole di forwarding HTTP/S:
    gcloud compute forwarding-rules delete https-fwd-rule --global
    
    gcloud compute forwarding-rules delete http-fwd-rule --global
    
  2. Elimina l'indirizzo IP statico globale:
    gcloud compute addresses delete lb-ip --global
    
  3. Elimina i proxy HTTP/S:
    gcloud compute target-https-proxies delete https-lb-proxy
    
    gcloud compute target-http-proxies delete http-lb-proxy
    
  4. Elimina il certificato SSL:
    gcloud compute ssl-certificates delete SSL_CERT
    
  5. Elimina la mappa URL:
    gcloud compute url-maps delete lb-map
    
  6. Elimina il servizio di backend:
    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
    
  7. Elimina il controllo di integrità HTTP:
    gcloud compute http-health-checks delete basic-check
    
  8. Elimina i gruppi di istanze gestite:
    gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_1 --zone=ZONE_1
    
    gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_2 --zone=ZONE_2
    
  9. Elimina il modello di istanza:
    gcloud compute instance-templates delete win-be-tmpl
    
  10. Elimina l'immagine:
    gcloud compute images delete IMAGE_NAME
  11. Elimina il disco:
    gcloud compute disks delete DISK_NAME

Passaggi successivi