Questo documento mostra come eseguire la migrazione delle risorse e dei backend del bilanciatore del carico delle applicazioni esterno globale da stack singolo a doppio stack.
Devi prima eseguire la migrazione da IPv4 solo ai backend IPv4 e IPv6 (stack a doppio stack). In seguito puoi cambiare il criterio di selezione dell'indirizzo IP del servizio di backend per specificare il tipo di traffico inviato dal GFE ai tuoi backend. Per ulteriori informazioni, consulta la sezione Configurare il criterio di selezione degli indirizzi IP.
Informazioni sul processo di migrazione
Il processo di migrazione richiede l'aggiornamento delle seguenti risorse del bilanciatore del carico:
- Subnet. Il tipo di stack IP della subnet può essere aggiornato per supportare solo IPv4 (stack singolo) o IPv4 e IPv6 (stack doppio). Non puoi eseguire il downgrade della subnet da indirizzi a doppio stack a indirizzi a stack singolo. Per eseguire l'aggiornamento, vedi Aggiornare la subnet.
- Backend. Il tipo di stack IP dei seguenti backend può essere aggiornato per supportare solo IPv4 (stack singolo) o IPv4 e IPv6 (stack doppio):
Tutti i backend dei gruppi di istanze: uno o più backend gestiti, non gestiti o una combinazione di backend di gruppi di istanze gestiti e non gestiti.
Per eseguire l'aggiornamento, vedi Aggiornare l'istanza o i modelli VM
Tutti i NEG a livello di zona: uno o più NEG a livello di zona di tipo
GCE_VM_IP_PORT
.Per eseguire l'aggiornamento, vedi Aggiornare il NEG a livello di zona
- Regole firewall. Crea una regola firewall per consentire al traffico dei probe del controllo di integrità IPv6 di raggiungere i backend. Per crearla, consulta Creare una regola firewall per il controllo di integrità IPv6.
- Servizio di backend. Il criterio di selezione degli indirizzi IP del servizio di backend può essere aggiornato per specificare il tipo di traffico inviato dal GFE ai backend. Per eseguire l'aggiornamento, vedi Aggiornare il servizio di backend.
- Regola di forwarding. Crea una regola di forwarding per IPv6
Non esiste una convalida per verificare se hai aggiornato tutte le risorse richieste. Dopo aver aggiornato tutte le risorse, il traffico passa ai backend ed puoi controllare i log e verificare che la migrazione sia completata.
Identifica le risorse di cui eseguire la migrazione
Per elencare tutte le subnet, esegui questo comando in Cloud Shell:
gcloud compute networks subnets list
Prendi nota del nome della subnet con indirizzi solo IPv4 di cui eseguire la migrazione a doppio stack. Questo nome sarà indicato in seguito come
SUBNET
. La rete VPC verrà detta in seguitoNETWORK
.Per visualizzare un elenco di tutti i servizi di backend, esegui il comando seguente in Cloud Shell:
gcloud beta compute backend-services list
Prendi nota del nome del servizio di backend di cui eseguire la migrazione a doppio stack. Questo nome sarà indicato in seguito come
BACKEND_SERVICE
.Per visualizzare l'elenco di tutte le mappe URL, esegui il comando seguente in Cloud Shell:
gcloud beta compute url-maps list
Prendi nota del nome della mappa URL associata al tuo bilanciatore del carico. Questo nome sarà indicato in seguito come
URL_MAP
.Per elencare tutte le istanze VM e tutti i modelli di istanza, esegui questo comando in Cloud Shell:
gcloud compute instances list
gcloud compute instance-templates list
Prendi nota del nome delle istanze e dei modelli di istanza di cui eseguire la migrazione a doppio stack. Questo nome sarà indicato in seguito come
VM_INSTANCE
eINSTANCE_TEMPLATES
.Per elencare tutti i gruppi di endpoint di rete (NEG), esegui questo comando in Cloud Shell:
gcloud compute network-endpoint-groups list
Prendi nota del nome dei backend NEG a livello di zona di cui eseguire la migrazione a doppio stack. Questo nome sarà indicato in seguito come
ZONAL_NEG
.Per elencare tutti i proxy di destinazione, esegui questo comando in Cloud Shell:
gcloud compute target-http-proxies list
Prendi nota del nome del proxy di destinazione associato al bilanciatore del carico. Questo nome sarà indicato in seguito come
TARGET_PROXY
.
Esegui la migrazione da backend IPv4 a IPv4 e IPv6 (stack a doppio stack)
Questa sezione descrive la procedura per eseguire la migrazione del bilanciatore del carico e dei backend utilizzando solo IPv4 (stack singolo) su IPv4 e IPv6 (stack doppio).
Prerequisiti
Prima di iniziare, devi aver già configurato un bilanciatore del carico delle applicazioni esterno globale con tipo di stack IP IPv4_ONLY
per i backend di gruppi di istanze o NEG a livello di zona.
Per configurare i bilanciatori del carico delle applicazioni esterni globali, consulta la documentazione seguente:
- Configura un bilanciatore del carico delle applicazioni esterno globale con backend di gruppi di istanze VM
- Configura un bilanciatore del carico delle applicazioni esterno globale con NEG a livello di zona
Puoi eseguire questo comando per elencare le informazioni sul tipo di stack di tutte le istanze VM in un progetto:
gcloud
gcloud compute instances list \ --format= \ "table(name, zone.basename(), networkInterfaces[].stackType.notnull().list(), networkInterfaces[].ipv6AccessConfigs[0].externalIpv6.notnull().list():label=EXTERNAL_IPV6, networkInterfaces[].ipv6Address.notnull().list():label=INTERNAL_IPV6)"
Aggiorna la subnet
Le subnet a doppio stack sono supportate solo sulle reti VPC in modalità personalizzata. Le subnet a doppio stack non sono supportate sulle reti VPC in modalità automatica o sulle reti legacy.
Per aggiornare la rete all'impostazione a doppio stack:
Se utilizzi una rete VPC in modalità automatica, devi prima convertire la rete VPC dalla modalità automatica alla modalità personalizzata.
Per abilitare IPv6, vedi Cambiare il tipo di stack di una subnet in stack doppio.
Aggiorna l'istanza o i modelli VM
Non puoi modificare istanze VM che fanno parte di un gruppo di istanze gestite o non gestite. Per aggiornare le istanze VM a stack doppio:
- Elimina istanze specifiche da un gruppo
- Crea una VM a doppio stack.
- Crea istanze con nomi specifici nei MIG
Non puoi aggiornare un modello di istanza esistente. Se devi apportare modifiche, puoi creare un altro modello con proprietà simili. Per aggiornare i modelli di istanza VM in modo che sia a doppio stack, segui questi passaggi:
Console
Nella console Google Cloud, vai alla pagina Modelli di istanza.
- Fai clic sul modello di istanza che vuoi copiare e aggiornare.
- Fai clic su Crea simile.
- Espandi la sezione Opzioni avanzate.
- In Tag di rete, inserisci
allow-health-check-ipv6
. - Nella sezione Interfacce di rete, fai clic su Aggiungi un'interfaccia di rete.
- Nell'elenco Rete, seleziona la rete VPC in modalità personalizzata.
- Nell'elenco Subnet, seleziona
SUBNET
. - Per Tipo di stack IP, seleziona IPv4 e IPv6 (stack doppio).
- Fai clic su Crea.
Avvio di un aggiornamento in sequenza di base sul gruppo di istanze gestite
MIG
associato al bilanciatore del carico.
Aggiorna il NEG a livello di zona
Impossibile modificare gli endpoint NEG di zona. Devi eliminare gli endpoint IPv4 e creare un nuovo endpoint a doppio stack con indirizzi IPv4 e IPv6.
Per configurare un NEG a livello di zona (con endpoint di tipo GCE_VM_IP_PORT
) nella regione REGION_A
, crea prima le VM nella zona GCP_NEG_ZONE
. Quindi aggiungi gli endpoint di rete VM
al NEG a livello di zona.
Crea VM
Console
Nella console Google Cloud, vai alla pagina Istanze VM.
Fai clic su Crea istanza.
Imposta il Nome su
vm-a1
.Per Regione, scegli
REGION_A
e scegli qualsiasi valore per il campo Zona. Questa zona è denominataGCP_NEG_ZONE
in questa procedura.Nella sezione Disco di avvio, assicurati che siano selezionate il sistema operativo Debian e la versione 10 (buster) per le opzioni del disco di avvio. Fai clic su Scegli per modificare l'immagine, se necessario.
Espandi la sezione Opzioni avanzate e apporta le seguenti modifiche:
- Espandi la sezione Networking.
- Nel campo Tag di rete, inserisci
allow-health-check
. - Nella sezione Interfacce di rete, apporta le seguenti modifiche:
- Rete:
NETWORK
- Subnet:
SUBNET
- Tipo di stack IP: IPv4 e IPv6 (stack doppio)
- Rete:
- Fai clic su Fine.
Fai clic su Gestione. Nel campo Script di avvio, copia e incolla i seguenti contenuti dello 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
Fai clic su Crea.
Ripeti i passaggi seguenti per creare una seconda VM utilizzando la seguente combinazione di nome e zona:
- Nome:
vm-a2
, zona:GCP_NEG_ZONE
- Nome:
gcloud
Crea le VM eseguendo questo comando due volte, utilizzando queste combinazioni per il nome della VM e la sua zona. I contenuti dello script sono identici per entrambe le VM.
VM_NAME
divm-a1
e una zonaGCP_NEG_ZONE
a tua scelta.VM_NAME
divm-a2
e la stessa zonaGCP_NEG_ZONE
.gcloud compute instances create VM_NAME \ --zone=GCP_NEG_ZONE \ --stack-type=IPV4_IPV6 \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=allow-health-check \ --subnet=SUBNET \ --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'
Aggiungi endpoint al NEG a livello di zona
Console
Per aggiungere endpoint al NEG a livello di zona:
Nella console Google Cloud, vai alla pagina Gruppi di endpoint di rete.
Nell'elenco Nome, fai clic sul nome del gruppo di endpoint di rete (
ZONAL_NEG
). Viene visualizzata la pagina Dettagli gruppo di endpoint di rete.Nella sezione Endpoint di rete in questo gruppo, seleziona l'endpoint NEG creato in precedenza. Fai clic su Rimuovi endpoint.
Nella sezione Endpoint di rete in questo gruppo, fai clic su Aggiungi endpoint di rete.
Seleziona l'istanza VM.
Nella sezione Interfaccia di rete, sono visualizzati il nome, la zona e la subnet della VM.
Nel campo Indirizzo IPv4, inserisci l'indirizzo IPv4 del nuovo endpoint di rete.
Nel campo Indirizzo IPv6, inserisci l'indirizzo IPv6 del nuovo endpoint di rete.
Seleziona il Tipo di porta.
- Se selezioni Predefinita, l'endpoint utilizza la porta predefinita
80
per tutti gli endpoint nel gruppo di endpoint di rete. Ciò è sufficiente per il nostro esempio perché il server Apache gestisce le richieste sulla porta80
. - Se selezioni Personalizzato, inserisci il Numero di porta per l'endpoint da utilizzare.
- Se selezioni Predefinita, l'endpoint utilizza la porta predefinita
Per aggiungere altri endpoint, fai clic su Aggiungi endpoint di rete e ripeti i passaggi precedenti.
Dopo aver aggiunto tutti gli endpoint, fai clic su Crea.
gcloud
Aggiungi endpoint (
GCE_VM_IP_PORT
endpoint) aZONAL_NEG
.gcloud compute network-endpoint-groups update ZONAL_NEG \ --zone=GCP_NEG_ZONE \ --add-endpoint='instance=vm-a1,ip=IPv4_ADDRESS, \ ipv6=IPv6_ADDRESS,port=80' \ --add-endpoint='instance=vm-a2,ip=IPv4_ADDRESS, \ ipv6=IPv6_ADDRESS,port=80'
Sostituisci quanto segue:
IPv4_ADDRESS
:
indirizzo IPv4 dell'endpoint di rete. L'IPv4 deve appartenere a una VM in Compute Engine (l'IP principale o come parte di un intervallo IP con alias).
Se l'indirizzo IP non è specificato, viene utilizzato l'indirizzo IP principale dell'istanza VM nella rete a cui appartiene il gruppo di endpoint di rete.
IPv6_ADDRESS
:
indirizzo IPv6 dell'endpoint di rete. L'indirizzo IPv6 deve appartenere a un'istanza VM nella rete a cui appartiene il gruppo di endpoint di rete (indirizzo IPv6 esterno).
Crea una regola firewall per il controllo di integrità IPv6
Assicurati di avere una regola in entrata applicabile alle istanze con bilanciamento del carico e che consenta il traffico dai sistemi di controllo di integrità di Google Cloud (2600:2d00:1:b029::/64
,2600:2d00:1:1::/64
). Questo esempio utilizza il tag di destinazione allow-health-check-ipv6
per identificare le istanze VM a cui si applica.
Senza questa regola firewall, la regola di negazione predefinita in entrata blocca il traffico IPv6 in entrata verso le istanze di backend.
Console
Nella console Google Cloud, vai alla pagina Criteri firewall.
Per consentire il traffico della subnet IPv6, fai di nuovo clic su Crea regola firewall e inserisci le seguenti informazioni:
- Nome:
fw-allow-lb-access-ipv6
- Rete:
NETWORK
- Priorità:
1000
- Direzione del traffico: ingress
- Target: tag di destinazione specificati
- Tag di destinazione:
allow-health-check-ipv6
- Filtro di origine: Intervalli IPv6
- Intervalli IPv6 di origine:
2600:2d00:1:b029::/64
,2600:2d00:1:1::/64
- Protocolli e porte: Consenti tutto
- Nome:
Fai clic su Crea.
gcloud
Crea la regola firewall
fw-allow-lb-access-ipv6
per consentire la comunicazione con la subnet:gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=NETWORK \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64,2600:2d00:1:1::/64 \ --rules=all
Crea un nuovo servizio di backend e una regola di forwarding per IPv6
Anche se puoi aggiornare BACKEND_SERVICE
esistente per supportare il doppio stack, questa sezione fornisce istruzioni per creare un nuovo servizio di backend con il criterio di selezione dell'indirizzo IP come Prefer IPv6
. Creando un nuovo servizio di backend puoi instradare il traffico al nuovo servizio di backend IPv6 ed eseguire la migrazione graduale ai backend IPv6.
Console
Nella console Google Cloud, vai alla pagina Bilanciamento del carico.
Fai clic sul nome del bilanciatore del carico.
Fai clic su Modifica.
Configura il servizio di backend:
- Fai clic su Configurazione backend.
- Nel campo Servizio di backend, seleziona Crea un servizio di backend.
- Imposta BACKEND_SERVICE_IPV6 come Nome.
- Per Tipo di backend, seleziona Gruppo di endpoint di rete a livello di zona.
- Nell'elenco Criterio di selezione degli indirizzi IP, seleziona Preferenza IPv6.
- Nel campo Protocollo, seleziona HTTP.
- Nel riquadro Nuovo backend, segui questi passaggi:
- Nell'elenco del gruppo di endpoint di rete, seleziona ZONAL_NEG.
- In Numero massimo di RPS, inserisci
10
.
- Nell'elenco Controllo di integrità, seleziona un controllo di integrità HTTP.
- Fai clic su Fine.
Configura il frontend IPv6:
- Fai clic su Configurazione frontend.
- Fai clic su Aggiungi IP e porta frontend.
- Nel campo Nome, inserisci un nome per la regola di forwarding.
- Nel campo Protocollo, seleziona
HTTP
. - Imposta Versione IP su
IPv6
. - Fai clic su Fine.
- Fai clic su Update (Aggiorna).
Configura le regole di routing
- Fai clic su Regole di routing.
- Fai clic su Regola host e percorso avanzata.
- Fai clic su Update (Aggiorna).
gcloud
Crea un controllo di integrità:
gcloud compute health-checks create http HEALTH_CHECK \ --port 80
Crea il servizio di backend per il traffico HTTP:
gcloud beta compute backend-services create BACKEND_SERVICE_IPV6 \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --ip-address-selection-policy=PREFER_IPV6 \ --health-checks=HEALTH_CHECK \ --global
Aggiungi NEG a livello di zona come backend del servizio di backend.
gcloud beta compute backend-services add-backend BACKEND_SERVICE_IPV6 \ --network-endpoint-group=ZONAL_NEG \ --max-rate-per-endpoint=10 \ --global
Prenota un indirizzo IPv6 esterno che i tuoi clienti utilizzano per raggiungere il bilanciatore del carico.
gcloud compute addresses create lb-ipv6-1 \ --ip-version=IPV6 \ --network-tier=PREMIUM \ --global
Creare una regola di forwarding per il servizio di backend. Quando crei la regola di forwarding, specifica l'indirizzo IP esterno nella subnet.
gcloud beta compute forwarding-rules create FORWARDING_RULE_IPV6 \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=lb-ipv6-1 \ --global \ --target-https-proxy=TARGET_PROXY \ --ports=443
Instrada il traffico al nuovo servizio di backend IPv6
Sia BACKEND_SERVICE
sia
BACKEND_SERVICE_IPV6
sono in grado di gestire il traffico.
Aggiorna la mappa URL per indirizzare una parte del traffico client al nuovo servizio di backend IPv6.
Utilizza il seguente comando per modificare le mappe URL:
gcloud compute url-maps edit URL_MAP \ --global
Nell'editor di testo visualizzato, aggiungi
routeRule
con un'azioneweightedBackendServices
che indirizzi una percentuale del traffico IPv6 aBACKEND_SERVICE_IPV6
.defaultService: global/backendServices/BACKEND_SERVICE hostRules: - hosts: - '*' pathMatcher: matcher1 name: URL_MAP pathMatchers: - defaultService: global/backendServices/BACKEND_SERVICE name: matcher1 routeRules: - matchRules: - prefixMatch: '' priority: 1 routeAction: weightedBackendServices: - backendService: global/backendServices/BACKEND_SERVICE weight: 95 - backendService: global/backendServices/BACKEND_SERVICE_IPV6 weight: 5
Per implementare la migrazione graduale a IPv6, aumenta la percentuale di ponderazione per il
nuovo servizio di backend BACKEND_SERVICE_IPV6
in modo incrementale
al 100% modificando la mappa URL più volte.
Configura il criterio di selezione degli indirizzi IP
Questo passaggio è facoltativo e fornisce istruzioni per configurare il criterio di selezione degli indirizzi IP del servizio di backend. Dopo aver eseguito la migrazione dei backend a doppio stack, puoi utilizzare il criterio di selezione degli indirizzi IP per specificare il tipo di traffico inviato dal GFE ai backend.
Sostituisci IP_ADDRESS_SELECTION_POLICY con uno dei seguenti valori:
Criterio di selezione degli indirizzi IP | Descrizione |
---|---|
Solo IPv4 | Invia solo traffico IPv4 ai backend del servizio di backend, indipendentemente dal traffico dal client al GFE. Solo i controlli di integrità IPv4 vengono utilizzati per verificare l'integrità dei backend. |
Preferenza per IPv6 | Dai la priorità alla connessione IPv6 del backend sulla connessione IPv4 (a condizione che sia presente un backend integro con indirizzi IPv6). I controlli di integrità monitorano periodicamente le connessioni IPv6 e IPv4 dei backend. Il GFE tenta prima la connessione IPv6; se la connessione IPv6 è interrotta o lenta, GFE usa occhi felici per passare e connettersi a IPv4. Anche se una delle connessioni IPv6 o IPv4 non è integro, il backend viene comunque considerato integro ed entrambe le connessioni possono essere provate dal GFE, con un occhio felice alla scelta della connessione da utilizzare. |
Solo IPv6 | Invia solo traffico IPv6 ai backend del servizio di backend, indipendentemente dal traffico dal client al proxy. Solo i controlli di integrità IPv6 vengono utilizzati per verificare l'integrità dei backend. Non esiste una convalida per verificare se il tipo di traffico di backend corrisponde al criterio di selezione dell'indirizzo IP. Ad esempio, se hai backend IPV4 e
selezioni |
Console
Nella console Google Cloud, vai alla pagina Bilanciamento del carico.
Fai clic sul nome del bilanciatore del carico.
Fai clic su Modifica.
Fai clic su Configurazione backend.
Nel campo Servizio di backend, seleziona BACKEND_SERVICE_IPV6.
Il Tipo di backend deve essere Gruppo di endpoint di rete a livello di zona o Gruppo di istanze.
Nell'elenco Criterio di selezione degli indirizzi IP, seleziona IP_ADDRESS_SELECTION_POLICY.
Fai clic su Fine.
gcloud
Aggiorna il servizio di backend:
gcloud beta compute backend-services update BACKEND_SERVICE_IPV6 \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --ip-address-selection-policy=IP_ADDRESS_SELECTION_POLICY \ --global
Testa il bilanciatore del carico
Testa il bilanciatore del carico per confermare che la migrazione sia riuscita e che il traffico in entrata raggiunga i backend come previsto.
Cerca l'indirizzo IP esterno del bilanciatore del carico
Console
Nella console Google Cloud, vai alla pagina Bilanciamento del carico.
Fai clic sul nome del bilanciatore del carico.
Nella sezione Frontend, sono visualizzati due indirizzi IP del bilanciatore del carico. In questa procedura, l'indirizzo IPv4 è indicato come IP_ADDRESS_IPV4 e l'indirizzo IPv6 IP_ADDRESS_IPV6.
Nella sezione Backend, quando il criterio di selezione degli indirizzi IP è
Prefer IPv6
, per i backend vengono visualizzati due stati del controllo di integrità.
Testa il traffico inviato alle istanze
In questo esempio, le richieste provenienti dal comando curl
vengono distribuite in modo casuale ai backend.
Ripeti i comandi seguenti alcune volte finché non vedi tutte le VM di backend che rispondono:
curl http://IP_ADDRESS_IPV4
curl http://IP_ADDRESS_IPV6
Ad esempio, se l'indirizzo IPv6 è
[fd20:1db0:b882:802:0:46:0:0]:80
, il comando è simile a questo:curl http://[fd20:1db0:b882:802:0:46:0:0]
Controlla i log
Ogni voce di log acquisisce l'indirizzo IPv4 e IPv6 di destinazione per il backend. Poiché supportiamo il doppio stack, è importante osservare l'indirizzo IP utilizzato dal backend.
Puoi verificare se il traffico sta per IPv6 o se sta tornando a IPv4 visualizzando i log.
L'elemento HttpRequest
contiene l'indirizzo backend_ip
associato al
backend. Esaminando i log e confrontando l'indirizzo IPv4 e IPv6 di destinazione di backend_ip
, puoi confermare quale indirizzo IP viene utilizzato.
Limitazioni
Se il criterio di selezione degli indirizzi IP è configurato su IPV6_ONLY
, puoi comunque configurare i backend IPv4 only
. Una configurazione di questo tipo non genera backend integro, i client ricevono il codice di risposta 503
e non c'è traffico upstream.
Esaminando i log, puoi vedere il messaggio di errore HTTP statusDetails
con
failed_to_pick_backend.