Questa pagina mostra come attivare il controller GKE Gateway multi-cluster, 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 Eseguire il deployment di gateway o Eseguire il deployment di gateway multi-cluster.
GKE Gateway Controller multi-cluster installa i seguenti GatewayClass multi-cluster nei tuoi cluster:
gke-l7-global-external-managed-mc
per i gateway multicluster esterni globaligke-l7-regional-external-managed-mc
per i gateway multi-cluster esterni regionaligke-l7-rilb-mc
per i gateway multi-cluster interni regionaligke-l7-gxlb-mc
per i gateway multi-cluster classic esterni globali
Scopri di più sulle funzionalità dei vari GatewayClass in GKE.
Prezzi
Tutte le risorse Compute Engine di cui è stato eseguito il deployment tramite i controller di gateway vengono addebitate sul progetto in cui si trovano 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 Ingress e Gateway 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à,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Requisiti di GKE Gateway Controller
- Per Standard, GKE 1.24 o versioni successive.
- Per Autopilot, GKE versione 1.26 o successive.
- Google Cloud CLI versione 407.0.0 o successive.
- L'API Gateway è supportata solo su cluster VPC-native.
- Se utilizzi GatewayClasses interno, devi attivare una subnet solo proxy.
- Nel cluster deve essere attivato il componente aggiuntivo
HttpLoadBalancing
. - 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 User
all'account di servizio GKE per il progetto di servizio.
Requisiti di Multi-cluster Gateway
Oltre ai requisiti del controller GKE Gateway, per i deployment di Gateway in più cluster, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Gateway sul cluster di configurazione.
- Abilita Workload Identity Federation for GKE nei 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 Ingress multi-cluster
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_ID
con l'ID progetto in cui sono in esecuzione i tuoi cluster GKE.
Restrizioni e limitazioni
Le stesse limitazioni e gli stessi problemi noti per i gateway a cluster singolo si applicano anche ai gateway a più cluster.
Oltre alle limitazioni dei gateway a cluster singolo, ai gateway multi-cluster si applicano le seguenti limitazioni:
Il bilanciamento del carico verso i backend in regioni diverse non è supportato con la classe Gateway interna regionale
gke-l7-rilb-mc
. Per scoprire di più sulle diverse funzionalità supportate da ogni GatewayClass, consulta Funzionalità di GatewayClass.Un
Service
non è supportato comebackendRefs
con il gateway multicluster. Il gateway multi-cluster supporta soloServiceImport
comebackendRefs
valido.Il bilanciamento del carico tra progetti non è supportato. Tutti i cluster (cluster di configurazione e cluster di destinazione) collegati allo stesso gateway multi-cluster devono essere di cui è stato eseguito il deployment nello stesso progetto host o progetto di servizio VPC condiviso. Per maggiori informazioni sulle topologie VPC condivise supportate con Gateway multi-cluster, consulta Utilizzare 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 dipiazzati nello stesso VPC.
Multi-cluster Gateway dipende da MCS per gestire il rilevamento dei servizi tra cluster. Di conseguenza, i servizi esposti dal gateway multi-cluster sono soggetti a tutti i requisiti dei servizi multi-cluster.
Quote
GKE Gateway utilizza le quote di Cloud Load Balancing per limitare il numero di risorse che il controller di gateway può creare per gestire il traffico in entrata indirizzato ai cluster GKE.
Configurare 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 più cluster.
I passaggi che seguono 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 multi-regione e la suddivisione del traffico blue-green multi-cluster utilizzando 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. Raggruppare i cluster GKE in un parco risorse consente di sceglierli come target di un gateway multi-cluster.
Crea un cluster GKE in
us-west1
denominatogke-west-1
:gcloud container clusters create gke-west-1 \ --gateway-api=standard \ --zone=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 vengono eseguiti i cluster GKE.VERSION
: la versione di GKE, 1.24 o successiva.
Crea un altro cluster GKE in
us-west1
(o nella stessa regione del cluster precedente) chiamatogke-west-2
:gcloud container clusters create gke-west-2 \ --gateway-api=standard \ --zone=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) denominatogke-east-1
gcloud container clusters create gke-east-1 \ --gateway-api=standard \ --zone=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
Configura le credenziali del cluster
Questo passaggio configura le credenziali del cluster con nomi facili da ricordare. In questo modo, è più facile passare da un cluster all'altro quando esegui il deployment delle risorse su più cluster.
Recupera le credenziali per i cluster
gke-west-1
,gke-west-2
egke-east-1
:gcloud container clusters get-credentials gke-west-1 --zone=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-west-2 --zone=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-east-1 --zone=us-east1-b --project=PROJECT_ID
Le credenziali vengono memorizzate 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 da potervi fare più facilmente 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_ID
con l'ID progetto in cui sono dipiazzati i tuoi cluster.
Attivare i servizi multi-cluster nel parco risorse
Abilita i servizi multi-cluster nel tuo parco risorse per i cluster registrati. In questo modo, il controller MCS per i tre cluster registrati nel tuo parco risorse potrà iniziare a 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_ID
con l'ID progetto in cui sono eseguiti i deployment dei tuoi cluster.Verifica che MCS sia abilitato per i cluster registrati. Vedrai gli annunci 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'
Attivare il gateway multi-cluster nel parco risorse
Il controller GKE Gateway multi-cluster regola il deployment di gateway multi-cluster.
Quando attivi il controller gateway multi-cluster, devi selezionare il tuo cluster di configurazione. Il cluster di configurazione è il cluster GKE in cui vengono di cui vengono implementate le risorse di gateway (Gateway, Routes, Policies). È un punto centrale che controlla il routing nei cluster. Consulta Design 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-1
come 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 IAM (Identity and Access Management) richieste dal controller gateway multicluster:
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_ID
ePROJECT_NUMBER
con l'ID progetto e il numero di progetto in cui sono dipiazzati i tuoi cluster.Verifica che il controller GKE Gateway sia abilitato per il tuo parco risorse:
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 GatewayClasses esista 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 il contesto kubectl al cluster di configurazione:
kubectl config use-context gke-west-1
Ora puoi iniziare a eseguire il deployment di gateway multi-cluster nel cluster di configurazione.
Risoluzione dei problemi
Questa sezione mostra come risolvere i problemi relativi all'attivazione del controller gateway in più cluster.
GatewayClasses non è disponibile nel cluster di configurazione
Quando esegui il comandokubectl 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 nel cluster:
gcloud container clusters update CLUSTER_NAME \
--gateway-api=standard \
--region=COMPUTE_REGION
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del tuo cluster.COMPUTE_REGION
: la regione Compute Engine del cluster. Per i cluster di zona, utilizza--zone=COMPUTE_ZONE
.
Problemi noti
- Esiste un problema noto con il controller gateway multicluster che potrebbe non riuscire a avviarsi. Per evitare questo problema, abilita l'API Gateway nel cluster di configurazione e includi i CRD prima dell'attivazione della funzionalità di entrata di Fleet.
- I gateway multi-cluster possono causare una perdita di risorse del bilanciatore del carico nei seguenti scenari:
- La funzionalità di ingresso del parco risorse viene aggiornata con un nuovo cluster di configurazione
che non contiene tutte le risorse
Gateway
esistenti nel cluster di configurazione attuale. - La funzionalità di ingresso del parco risorse è disattivata se nel cluster di configurazione esistono risorse
Gateway
che fanno riferimento a unGatewayClass
multi-cluster.
- La funzionalità di ingresso del parco risorse viene aggiornata con un nuovo cluster di configurazione
che non contiene tutte le risorse
- Gateway multi-cluster viene eseguito come servizio globale. Se il controller di gateway multi-cluster rileva un errore del piano di controllo di un parco (hub) a livello di regione, risponderà con un errore statico e non apporterà ulteriori modifiche al bilanciatore del carico finché la regione non sarà tornata in servizio.
Passaggi successivi
- Per eseguire il deployment del bilanciamento del carico multi-cluster, consulta Eseguire il deployment di gateway multi-cluster.
- Per scoprire di più sul controller Gateway, consulta Gateway.