Questa pagina mostra come abilitare il controller GKE Gateway multicluster, un controller ospitato da Google che esegue il provisioning di bilanciatori del carico esterni e interni per i tuoi cluster GKE. Per scoprire come utilizzare le risorse Gateway per il bilanciamento del carico dei container, consulta Deployment dei gateway o Deployment dei gateway multi-cluster.
Il controller gateway multi-cluster GKE installa le seguenti GatewayClass multi-cluster nei tuoi cluster:
- gke-l7-global-external-managed-mcper i gateway multicluster esterni globali
- gke-l7-regional-external-managed-mcper il multi-cluster esterno regionale
- gke-l7-cross-regional-internal-managed-mcper i gateway multi-cluster interni tra regioni
- gke-l7-rilb-mcper i gateway multi-cluster interni regionali
- gke-l7-gxlb-mcper i gateway multi-cluster esterni classici globali
Scopri di più sulle funzionalità delle varie GatewayClass in GKE.
Prezzi
Tutte le risorse Compute Engine di cui è stato eseguito il deployment tramite i controller Gateway vengono addebitate al progetto in cui risiedono i cluster GKE. Il controller Gateway a cluster singolo è offerto senza costi aggiuntivi nell'ambito dei prezzi di GKE Standard e Autopilot. I prezzi dei gateway multi-cluster sono descritti nella pagina dei prezzi di Gateway multi-cluster e Ingress multi-cluster.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
    installala e poi
    inizializza
    gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
    versione eseguendo il comando gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Requisiti del controller GKE Gateway
- L'API Gateway è supportata solo sui cluster VPC nativi.
- Se utilizzi GatewayClass regionali o tra regioni, devi attivare una subnet solo proxy.
- Il cluster deve avere il componente aggiuntivo HttpLoadBalancingabilitato.
- Se utilizzi Istio, devi eseguire l'upgrade a una delle seguenti versioni:
- 1.15.2 o versioni successive
- 1.14.5 o versioni successive
- 1.13.9 o versioni successive.
 
- Se utilizzi un VPC condiviso, nel progetto host devi assegnare il ruolo Compute Network Useral service account GKE per il progetto di servizio.
Requisiti del gateway multi-cluster
Oltre ai requisiti del controller GKE Gateway, per i deployment di Gateway multicluster, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Gateway sul cluster di configurazione.
- Abilita Workload Identity Federation for GKE sui tuoi cluster.
- Completa i prerequisiti generali del parco risorse per registrare i cluster.
- Abilita le seguenti API richieste per i gateway multi-cluster nel tuo progetto: - API Cloud Service Mesh
- API Multi-cluster Services
- API Multi Cluster Ingress
 - Esegui questo comando per abilitare le API richieste, se non sono già abilitate: - gcloud services enable \ trafficdirector.googleapis.com \ multiclusterservicediscovery.googleapis.com \ multiclusteringress.googleapis.com \ --project=PROJECT_ID- Sostituisci - PROJECT_IDcon l'ID progetto in cui sono in esecuzione i tuoi cluster GKE.
Limitazioni e restrizioni
Le stesse limitazioni e problemi noti per i gateway a singolo cluster si applicano anche ai gateway multicluster.
Oltre alle limitazioni del gateway a cluster singolo, ai gateway multi-cluster si applicano le seguenti limitazioni:
- Il bilanciamento del carico sui backend in regioni diverse non è supportato con GatewayClass interna regionale - gke-l7-rilb-mc. Per scoprire di più sulle diverse funzionalità supportate da ogni GatewayClass, consulta Funzionalità di GatewayClass.
- Un - Servicenon è supportato come- backendRefscon il gateway multicluster. Multi-cluster Gateway supporta solo- ServiceImportcome- backendRefsvalido.
- Tutti i cluster nel parco risorse devono esistere nel progetto host del parco risorse. 
- Il bilanciamento del carico tra progetti non è supportato. Tutti i cluster (cluster di configurazione e cluster di destinazione) collegati allo stesso gateway multicluster devono essere sottoposti a deployment nello stesso progetto host o progetto di servizio VPC condiviso. Per maggiori informazioni sulle topologie VPC condiviso supportate con il gateway multi-cluster, consulta Utilizzare il gateway multi-cluster con VPC condiviso. 
- Il bilanciamento del carico tra VPC non è supportato. Tutti i cluster (cluster di configurazione e cluster di destinazione) collegati allo stesso gateway multi-cluster devono essere distribuiti nello stesso VPC. 
- Il gateway multi-cluster dipende da MCS per la gestione del rilevamento dei servizi tra cluster. Pertanto, i servizi esposti dal gateway multi-cluster sono soggetti a tutti i requisiti del servizio multi-cluster. 
- I gateway multi-cluster possono causare perdite di risorse del bilanciatore del carico nei seguenti scenari: - La funzionalità Ingress del parco risorse viene aggiornata con un nuovo cluster di configurazione
che non contiene tutte le risorse Gatewayesistenti nel cluster di configurazione attuale.
- La funzionalità Ingress del parco risorse è disattivata mentre le risorse Gatewayche fanno riferimento a unGatewayClassmulti-cluster esistono nel cluster di configurazione.
 
- La funzionalità Ingress del parco risorse viene aggiornata con un nuovo cluster di configurazione
che non contiene tutte le risorse 
- Il gateway multi-cluster viene eseguito come servizio globale. Se il controller multi-cluster Gateway rileva un errore del control plane regionale di Fleet (hub), risponde in modo statico e non apporta ulteriori modifiche al bilanciatore del carico finché la regione non torna in servizio. 
Quote
GKE Gateway utilizza le quote di Cloud Load Balancing per limitare il numero di risorse che il controller Gateway può creare per gestire il traffico in entrata indirizzato ai cluster GKE.
Configura l'ambiente per i gateway multi-cluster
Per completare gli esempi in Deployment di gateway multi-cluster sono necessari più cluster GKE. Tutti i cluster sono registrati nello stesso parco risorse, in modo che i gateway e i servizi multi-cluster possano operare su tutti.
I passaggi seguenti eseguiranno il deployment di tre cluster GKE in due regioni diverse del tuo progetto:
- us-west1-a/gke-west-1
- us-west1-a/gke-west-2
- us-east1-b/gke-east-1
Verrà creata la seguente topologia del cluster:
Questi cluster GKE vengono utilizzati per dimostrare il bilanciamento del carico multiregionale e la suddivisione del traffico blu/verde multi-cluster utilizzando i gateway esterni e interni.
Esegui il deployment dei cluster
In questi passaggi eseguirai il deployment di tre cluster GKE nelle regioni
us-east1 e us-west1.
I cluster verranno registrati nel parco risorse del progetto. Il raggruppamento dei cluster GKE in un parco risorse consente di indirizzarli a un gateway multi-cluster.
- Crea un cluster GKE in - us-west1denominato- gke-west-1:- gcloud container clusters create gke-west-1 \ --gateway-api=standard \ --location=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID- Sostituisci quanto segue: - PROJECT_ID: l'ID progetto in cui sono in esecuzione i cluster GKE.
- VERSION: la versione di GKE, 1.24 o successive.
 
- Crea un altro cluster GKE in - us-west1(o nella stessa regione del cluster precedente) denominato- gke-west-2:- gcloud container clusters create gke-west-2 \ --gateway-api=standard \ --location=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
- Crea un cluster GKE in - us-east1(o in una regione diversa da quella precedente) denominato- gke-east-1- gcloud container clusters create gke-east-1 \ --gateway-api=standard \ --location=us-east1-b \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
- Verifica che i cluster siano stati registrati correttamente nel parco risorse: - gcloud container fleet memberships list --project=PROJECT_ID- L'output sarà simile al seguente: - NAME EXTERNAL_ID LOCATION gke-east-1 45a80b37-4b00-49aa-a68b-b430fce1e3f0 us-east1 gke-west-2 ac7087a5-f5ee-401e-b430-57f3af141239 us-west1 gke-west-1 549efe3a-b18e-4eb9-8796-e50b7967cde2 us-west1
Configurare le credenziali del cluster
Questo passaggio configura le credenziali del cluster con nomi memorizzabili. In questo modo, è più facile passare da un cluster all'altro quando esegui il deployment di risorse in più cluster.
- Recupera le credenziali per i cluster - gke-west-1,- gke-west-2e- gke-east-1:- gcloud container clusters get-credentials gke-west-1 --location=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-west-2 --location=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-east-1 --location=us-east1-b --project=PROJECT_ID- In questo modo le credenziali vengono archiviate localmente, in modo da poter utilizzare il client kubectl per accedere ai server API del cluster. Per impostazione predefinita, viene creato un nome generato automaticamente per la credenziale. 
- Rinomina i contesti del cluster in modo che sia più facile farvi riferimento in un secondo momento: - kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-1 gke-west-1 kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-2 gke-west-2 kubectl config rename-context gke_PROJECT_ID_us-east1-b_gke-east-1 gke-east-1- Sostituisci - PROJECT_IDcon l'ID progetto in cui sono stati deployati i cluster.
Abilitare i servizi multi-cluster nel parco risorse
- Abilita i servizi multi-cluster nel parco risorse per i cluster registrati. In questo modo, il controller MCS per i tre cluster registrati nel tuo parco risorse può iniziare ad ascoltare ed esportare i servizi. - gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
- Concedi le autorizzazioni Identity and Access Management (IAM) richieste dal controller MCS: - gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role "roles/compute.networkViewer" \ --project=PROJECT_ID- Sostituisci - PROJECT_IDcon l'ID progetto in cui sono stati deployati i cluster.
- Verifica che MCS sia abilitato per i cluster registrati. Verranno visualizzate le appartenenze per i tre cluster registrati. Potrebbero essere necessari diversi minuti prima che vengano visualizzati tutti i cluster. - gcloud container fleet multi-cluster-services describe --project=PROJECT_ID- L'output è simile al seguente: - createTime: '2023-10-12T06:14:33.466903587Z' membershipStates: projects/441323991697/locations/us-east1/memberships/gke-east-1: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:28.395318091Z' projects/441323991697/locations/us-west1/memberships/gke-west-1: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:30.534594027Z' projects/441323991697/locations/us-west1/memberships/gke-west-2: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:29.110582109Z' name: projects/pierre-louis-playground/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {} updateTime: '2023-10-12T06:15:31.027276757Z'
Abilita il gateway multi-cluster nel parco risorse
Il controller gateway GKE multi-cluster gestisce il deployment dei gateway multi-cluster.
Quando attivi il controller del gateway multi-cluster, devi selezionare il cluster di configurazione. Il cluster di configurazione è il cluster GKE in cui vengono implementate le risorse Gateway (Gateway, Routes, Policies). È una posizione centrale che controlla il routing tra i cluster. Consulta Progettazione del cluster di configurazione per decidere quale cluster scegliere come cluster di configurazione.
- Attiva il gateway multi-cluster e specifica il cluster di configurazione nel tuo parco risorse. Tieni presente che puoi sempre aggiornare il cluster di configurazione in un secondo momento. Questo esempio specifica - gke-west-1come cluster di configurazione che ospiterà le risorse per i gateway multi-cluster.- gcloud container fleet ingress enable \ --config-membership=projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1 \ --project=PROJECT_ID
- Concedi le autorizzazioni Identity and Access Management (IAM) richieste dal controller multi-cluster Gateway: - gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/container.admin" \ --project=PROJECT_ID- Sostituisci - PROJECT_IDe- PROJECT_NUMBERcon l'ID progetto e il numero di progetto in cui sono stati implementati i cluster.
- Verifica che il controller GKE Gateway sia abilitato per il tuo parco progetti: - gcloud container fleet ingress describe --project=PROJECT_ID- L'output è simile al seguente: - createTime: '2023-10-12T06:23:06.732858524Z' membershipStates: projects/441323991697/locations/us-east1/memberships/gke-east-1: state: code: OK updateTime: '2023-10-12T06:30:08.815839024Z' projects/441323991697/locations/us-west1/memberships/gke-west-1: state: code: OK updateTime: '2023-10-12T06:30:08.815837031Z' projects/441323991697/locations/us-west1/memberships/gke-west-2: state: code: OK updateTime: '2023-10-12T06:30:08.815840985Z' name: projects/pierre-louis-playground/locations/global/features/multiclusteringress resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/pierre-louis-playground/locations/us-west1/memberships/gke-west-1 state: state: code: OK description: Ready to use updateTime: '2023-10-12T06:23:51.317464415Z' updateTime: '2023-10-12T06:30:09.439319551Z'
- Verifica che le GatewayClass esistano nel cluster di configurazione: - kubectl get gatewayclasses --context=gke-west-1- L'output è simile al seguente: - NAME CONTROLLER ACCEPTED AGE gke-l7-global-external-managed networking.gke.io/gateway True 78m gke-l7-global-external-managed-mc networking.gke.io/gateway True 4m22s gke-l7-gxlb networking.gke.io/gateway True 78m gke-l7-gxlb-mc networking.gke.io/gateway True 4m23s gke-l7-regional-external-managed networking.gke.io/gateway True 78m gke-l7-regional-external-managed-mc networking.gke.io/gateway True 4m22s gke-l7-rilb networking.gke.io/gateway True 78m gke-l7-rilb-mc networking.gke.io/gateway True 4m22s- Questo output include GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc per i gateway multi-cluster esterni e GatewayClass gke-l7-rilb-mc per i gateway multi-cluster interni. 
- Passa al contesto kubectl del cluster di configurazione: - kubectl config use-context gke-west-1
Ora puoi iniziare a eseguire il deployment dei gateway multi-cluster nel cluster di configurazione.
Risoluzione dei problemi
Questa sezione mostra come risolvere i problemi relativi all'attivazione del controller multi-cluster Gateway.
GatewayClasses non sono disponibili nel cluster di configurazione
Quando esegui il comando
kubectl get gatewayclasses, potrebbe verificarsi il seguente errore:
error: the server doesn't have a resource type "gatewayclasses"
Per risolvere il problema, installa l'API Gateway sul cluster:
gcloud container clusters update CLUSTER_NAME \
    --gateway-api=standard \
    --location=CONTROL_PLANE_LOCATION
Sostituisci quanto segue:
- CLUSTER_NAME: il nome del tuo cluster.
- CONTROL_PLANE_LOCATION: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
Il controller del gateway multi-cluster non si avvia
Quando abiliti l'API Gateway sul cluster di configurazione e includi i CRD dopo l'abilitazione della funzionalità Ingress del parco risorse, il controller Gateway multi-cluster potrebbe non avviarsi.
Puoi evitare questo problema abilitando l'API Gateway prima di abilitare l'ingresso di Fleet. Tuttavia, se hai già attivato l'accesso al parco risorse, risolvi questo problema disattivando e riattivando l'accesso al parco risorse:
- Disabilita l'ingresso del parco risorse: - gcloud container fleet ingress disable
- Abilita l'accesso in entrata del parco veicoli: - gcloud container fleet ingress enable \ --config-membership=CONFIG_MEMBERSHIP \ --project=PROJECT_ID
Sostituisci quanto segue:
- CONFIG_MEMBERSHIP: l'ID dell'abbonamento o l'identificatore completo dell'abbonamento. Ad esempio,
projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1.
- PROJECT_ID: l'ID progetto in cui sono in esecuzione i cluster GKE.
Passaggi successivi
- Per eseguire il deployment del bilanciamento del carico multi-cluster, vedi Deployment di gateway multi-cluster.
- Per scoprire di più sul controller Gateway, consulta Gateway.