Questa pagina mostra come abilitare il controller gateway GKE multi-cluster, un controller ospitato da Google che esegue il provisioning di bilanciatori del carico esterni e interni per i cluster GKE. Per scoprire come utilizzare le risorse gateway per il bilanciamento del carico dei container, consulta Deployment di gateway o Deployment di gateway multi-cluster.
Il controller gateway GKE multi-cluster installa le seguenti GatewayClass multi-cluster nei tuoi cluster:
gke-l7-global-external-managed-mc
per i gateway multi-cluster esterni globaligke-l7-regional-external-managed-mc
per gateway multi-cluster esterni a livello di regionegke-l7-rilb-mc
per i gateway multi-cluster interni regionaligke-l7-gxlb-mc
per i gateway multi-cluster classici esterni 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 in base al progetto in cui si trovano i cluster GKE. Il controller gateway a cluster singolo è offerto senza costi aggiuntivi come parte dei prezzi di GKE Standard e Autopilot. I prezzi dei gateway multi-cluster sono descritti nella pagina dei prezzi di Ingress multi-cluster e gateway.
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 l'interfaccia a riga di comando gcloud, ottieni la versione più recente eseguendo
gcloud components update
.
Requisiti del controller gateway GKE
- Per Standard, GKE versione 1.24 o successive.
- Per Autopilot, GKE versione 1.26 o successive.
- Google Cloud CLI versione 407.0.0 o successive.
- L'API Gateway è supportata solo sui cluster nativi VPC.
- Se utilizzi le GatewayClass interni, devi abilitare una subnet solo proxy.
- Nel cluster deve essere attivato il componente aggiuntivo
HttpLoadBalancing
. - Se utilizzi Istio, devi eseguire l'upgrade di Istio 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 del gateway multi-cluster
Oltre ai requisiti del controller GKE Gateway, per i deployment del gateway multi-cluster, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Gateway sul cluster di configurazione.
- Abilita la Federazione delle identità dei carichi di lavoro per GKE sui tuoi cluster.
- Completa i prerequisiti generali del parco risorse per la registrazione dei 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_ID
con l'ID progetto su cui sono in esecuzione i cluster GKE.
Restrizioni e limitazioni
Le stesse limitazioni e gli stessi problemi noti per i gateway a cluster singolo si applicano anche ai gateway multi-cluster.
Oltre alle limitazioni dei gateway a cluster singolo, ai gateway multi-cluster si applicano le seguenti limitazioni:
Il bilanciamento del carico verso backend in regioni diverse non è supportato con il GatewayClass interno a livello di regione
gke-l7-rilb-mc
. Per saperne di più sulle diverse funzionalità supportate con ogni GatewayClass, consulta Funzionalità di GatewayClass.Service
non è supportato comebackendRefs
con gateway multi-cluster. Il gateway multi-cluster supporta soloServiceImport
comebackendRefs
valido.Il bilanciamento del carico tra progetti non è supportato. Il deployment di tutti i cluster (cluster di configurazione e cluster di destinazione) collegati allo stesso gateway multi-cluster deve essere eseguito nello stesso progetto host o progetto di servizio del VPC condiviso. Per ulteriori informazioni sulle topologie VPC condivise supportate con gateway multi-cluster, consulta Utilizzare un gateway multi-cluster con un 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 eseguire il deployment nello stesso VPC.
Il gateway multi-cluster dipende da MCS per la gestione del rilevamento dei servizi tra cluster. Pertanto, le esposizioni multi-cluster dei servizi sono soggette a tutti i requisiti del servizio multi-cluster.
I gateway multi-cluster possono distribuire le risorse del bilanciatore del carico nei seguenti scenari:
- La funzionalità in entrata del parco risorse viene aggiornata con un nuovo cluster di configurazione che non dispone di tutte le risorse
Gateway
presenti nel cluster di configurazione attuale. - La funzionalità Ingress del parco risorse è disabilitata mentre nel cluster di configurazione sono presenti
Gateway
risorse che fanno riferimento a unGatewayClass
multi-cluster.
- La funzionalità in entrata del parco risorse viene aggiornata con un nuovo cluster di configurazione che non dispone di tutte le risorse
Il gateway multi-cluster viene eseguito come servizio globale. Se il controller gateway multi-cluster riscontra un errore del piano di controllo del parco risorse (Hub) a livello di regione, risponde con un errore statico e non apporta ulteriori modifiche al bilanciatore del carico finché la regione non torna in servizio.
Quote
Il gateway GKE utilizza le quote di Cloud Load Balancing per limitare il numero di risorse che il controller del gateway può creare per gestire il traffico in entrata instradato ai cluster GKE.
Configura il tuo ambiente per i gateway multi-cluster
Richiede più cluster GKE per completare gli esempi in Deployment di gateway multi-cluster. Tutti i cluster sono registrati nello stesso gruppo in modo che gateway e servizi multi-cluster possano operare su di essi.
La procedura seguente eseguirà il deployment di tre cluster GKE in due regioni diverse nel 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 di cluster:
Questi cluster GKE vengono utilizzati per dimostrare il bilanciamento del carico tra più regioni e la suddivisione del traffico multi-cluster blu/verde mediante 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 saranno registrati nel parco risorse del tuo progetto. Il raggruppamento dei cluster GKE in un parco risorse consente di utilizzarli come target da un gateway multi-cluster.
Crea un cluster GKE in
us-west1
denominatogke-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 successiva.
Crea un altro cluster GKE in
us-west1
(o nella stessa regione del cluster precedente) denominatogke-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 una regione diversa da quella precedente) denominatogke-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
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 si esegue il deployment di risorse su più cluster.
Recupera le credenziali per il cluster
gke-west-1
,gke-west-2
egke-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
Questo archivia le credenziali localmente in modo che tu possa utilizzare il tuo 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 fare riferimento in seguito:
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 viene eseguito il deployment dei cluster.
Abilita i servizi multi-cluster nel parco risorse
Abilita i servizi multi-cluster nel tuo parco risorse per i cluster registrati. Ciò abilita il controller MCS per i tre cluster registrati nel parco risorse in modo che possa iniziare ad ascoltare ed esportare i servizi.
gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
Concedi le autorizzazioni IAM (Identity and Access Management) 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 viene eseguito il deployment dei cluster.Verifica che MCS sia abilitato per i cluster registrati. Vedrai gli abbonamenti per i tre cluster registrati. La visualizzazione di tutti i cluster potrebbe richiedere diversi minuti.
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 GKE Gateway multi-cluster controlla il deployment dei gateway multi-cluster.
Quando abiliti il controller gateway multi-cluster, devi selezionare il cluster di configurazione. Il cluster di configurazione è il cluster GKE in cui viene eseguito il deployment delle risorse gateway (Gateway, Route, Criteri). È 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.
Abilita il gateway multi-cluster e specifica il cluster di configurazione nel 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 multi-cluster:
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 e il numero del progetto in cui viene eseguito il deployment dei cluster.Verifica che il controller gateway GKE 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'
Conferma che le GatewayClass esistano nel tuo 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 è tutto pronto per iniziare il deployment dei gateway multi-cluster nel cluster di configurazione.
Risoluzione dei problemi
Questa sezione mostra come risolvere i problemi relativi all'abilitazione del controller gateway multi-cluster.
Le classi Gateway 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 questo problema, installa l'API Gateway sul tuo 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 località di Compute Engine del piano di controllo del tuo cluster. Fornisci una regione per i cluster a livello di regione o una zona per i cluster di zona.
Il controller gateway multi-cluster non si avvia
Quando abiliti l'API Gateway sul cluster di configurazione e includi i CRD dopo aver abilitato la funzionalità Ingress del parco risorse, il controller gateway multi-cluster potrebbe non avviarsi.
Per evitare questo problema, abilita l'API Gateway prima di abilitare il traffico in entrata nel parco risorse. Tuttavia, se hai già abilitato Ingress nel parco risorse, risolvi il problema disattivando e riattivando il traffico in entrata nel parco risorse:
Disabilita traffico in entrata del parco risorse:
gcloud container fleet ingress disable
Abilita traffico in entrata nel parco risorse:
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, consulta Deployment di gateway multi-cluster.
- Per scoprire di più sul controller Gateway, consulta Gateway.