Questa pagina mostra come instradare il traffico su più cluster Google Kubernetes Engine (GKE) in regioni diverse utilizzando Ingress multi-cluster, con un esempio utilizzando due cluster.
Per un confronto dettagliato tra Ingress multi-cluster (MCI), gateway multi-cluster (MCG) e bilanciatore del carico con gruppi di endpoint di rete autonomi (LB e NEG autonomi), consulta Scegliere l'API di bilanciamento del carico multi-cluster per GKE.
Per ulteriori informazioni sul deployment di Ingress multi-cluster, consulta Deployment di Ingress in più cluster.
Questi passaggi richiedono autorizzazioni elevate e devono essere eseguiti da un amministratore GKE.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività, installa e quindi initialize gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Requisiti e limitazioni
L'impostazione Ingress multi-cluster ha i seguenti requisiti:
- Google Cloud CLI versione 290.0.0 e successive.
Se utilizzi cluster in modalità Standard, assicurati di soddisfare i seguenti requisiti. I cluster Autopilot soddisfano già questi requisiti.
- Nei cluster deve essere abilitato il componente aggiuntivo
HttpLoadBalancing
. Questo componente aggiuntivo è abilitato per impostazione predefinita, non devi disabilitarlo. - I cluster devono essere nativi VPC.
- Nei cluster deve essere abilitata la Federazione delle identità dei carichi di lavoro per GKE.
L'impostazione Ingress multi-cluster ha le seguenti limitazioni:
- Supportata solo con un bilanciatore del carico delle applicazioni esterno.
- Non creare bilanciatori del carico Compute Engine nello stesso progetto con il prefisso
mci-
che non siano gestiti da Ingress multi-cluster, altrimenti verranno eliminati. Google Cloud utilizza il prefissomci-[6 char hash]
per gestire le risorse Compute Engine di cui Ingress multi-cluster esegue il deployment. - La configurazione di HTTPS richiede un indirizzo IP statico preallocato. HTTPS non è supportato con gli indirizzi IP temporanei.
Panoramica
In questo esercizio devi eseguire questi passaggi:
- Seleziona i prezzi che vuoi utilizzare.
- Eseguire il deployment dei cluster.
- Configura le credenziali del cluster.
- Registra i cluster in un parco risorse.
- Specifica un cluster di configurazione. Può essere un piano di controllo dedicato oppure eseguire altri carichi di lavoro.
Il seguente diagramma mostra l'aspetto del tuo ambiente dopo aver completato l'esercizio:
Nel diagramma, sono presenti due cluster GKE denominati gke-us
e
gke-eu
nelle regioni europe-west1
e us-central1
. I cluster sono registrati in un parco risorse in modo che il controller Ingress multi-cluster possa riconoscerli. Un parco risorse consente di raggruppare e normalizzare logicamente i cluster GKE, semplificando l'amministrazione dell'infrastruttura e consentendo l'uso di funzionalità multi-cluster come Ingress multi-cluster. Per saperne di più sui vantaggi dei parchi risorse e su come crearli, consulta la documentazione sulla gestione del parco risorse.
Seleziona il prezzo
Se Ingress multi-cluster è l'unica funzionalità di GKE Enterprise che stai utilizzando, ti consigliamo di utilizzare prezzi autonomi. Se il tuo progetto utilizza altri componenti o funzionalità di GKE Enterprise su Google Cloud, devi abilitare l'intera piattaforma GKE Enterprise. In questo modo puoi utilizzare tutte le funzionalità di GKE Enterprise con un singolo addebito per vCPU.
Le API da abilitare dipendono dai prezzi di Ingress multi-cluster utilizzati.
- Se l'API GKE Enterprise (
anthos.googleapis.com
) è abilitata, il tuo progetto viene fatturato in base al numero di vCPU di cluster e ai prezzi di GKE Enterprise. - Se l'API GKE Enterprise è disabilitata, il costo del progetto viene fatturato in base al numero di pod Ingress multi-cluster backend nel tuo progetto.
Puoi cambiare il modello di fatturazione di Ingress multi-cluster da autonomo a GKE Enterprise oppure da GKE Enterprise a autonomo in qualsiasi momento, senza influire sulle risorse o sul traffico di Ingress multi-cluster.
Prezzi autonomi
Per attivare i prezzi autonomi, segui questi passaggi:
Verifica che l'API GKE Enterprise sia disabilitata nel tuo progetto:
gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
Sostituisci
PROJECT_ID
con l'ID progetto in cui sono in esecuzione i cluster GKE.Se l'output è una risposta vuota, l'API GKE Enterprise viene disabilitata nel progetto e qualsiasi risorsa Ingress multi-cluster viene fatturata utilizzando prezzi autonomi.
Abilita le API richieste nel tuo progetto:
gcloud services enable \ multiclusteringress.googleapis.com \ gkehub.googleapis.com \ container.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project=PROJECT_ID
Prezzi di GKE Enterprise
Per abilitare i prezzi di GKE Enterprise, abilita le API richieste nel tuo progetto:
gcloud services enable \
anthos.googleapis.com \
multiclusteringress.googleapis.com \
gkehub.googleapis.com \
container.googleapis.com \
multiclusterservicediscovery.googleapis.com \
--project=PROJECT_ID
Dopo l'abilitazione di anthos.googleapis.com
nel progetto, tutti i cluster
registrati in Connect vengono fatturati in base ai
prezzi di GKE Enterprise.
Esegui il deployment dei cluster
Crea due cluster GKE denominati gke-us
e gke-eu
nelle regioni europe-west1
e us-central1
.
Autopilot
Crea il cluster
gke-us
nella regioneus-central1
:gcloud container clusters create-auto gke-us \ --region=us-central1 \ --release-channel=stable \ --project=PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID del tuo progetto Google Cloud.Crea il cluster
gke-eu
nella regioneeurope-west1
:gcloud container clusters create-auto gke-eu \ --region=europe-west1 \ --release-channel=stable \ --project=PROJECT_ID
Standard
Crea i due cluster con la Federazione delle identità per i carichi di lavoro per GKE abilitata.
Crea il cluster
gke-us
nella regioneus-central1
:gcloud container clusters create gke-us \ --region=us-central1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID del tuo progetto Google Cloud.Crea il cluster
gke-eu
nella regioneeurope-west1
:gcloud container clusters create gke-eu \ --region=europe-west1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Configura le credenziali del cluster
Configura le credenziali per i cluster e rinomina i contesti dei cluster per semplificare il passaggio da un cluster all'altro durante il deployment delle risorse.
Recupera le credenziali per i tuoi cluster:
gcloud container clusters get-credentials gke-us \ --region=us-central1 \ --project=PROJECT_ID gcloud container clusters get-credentials gke-eu \ --region=europe-west1 \ --project=PROJECT_ID
Le credenziali vengono archiviate localmente in modo che tu possa utilizzare il client kubectl per accedere ai server API del cluster. Per impostazione predefinita, viene creato un nome generato automaticamente per le credenziali.
Rinomina i contesti del cluster:
kubectl config rename-context gke_PROJECT_ID_us-central1_gke-us gke-us kubectl config rename-context gke_PROJECT_ID_europe-west1_gke-eu gke-eu
Registra i cluster in un parco risorse
Registra i cluster nel parco risorse del progetto come segue.
Registra i tuoi cluster:
gcloud container fleet memberships register gke-us \ --gke-cluster us-central1/gke-us \ --enable-workload-identity \ --project=PROJECT_ID gcloud container fleet memberships register gke-eu \ --gke-cluster europe-west1/gke-eu \ --enable-workload-identity \ --project=PROJECT_ID
Verifica che i cluster siano stati registrati correttamente nel parco risorse:
gcloud container fleet memberships list --project=PROJECT_ID
L'output è simile al seguente:
NAME EXTERNAL_ID gke-us 0375c958-38af-11ea-abe9-42010a800191 gke-eu d3278b78-38ad-11ea-a846-42010a840114
Dopo aver registrato i cluster, GKE esegue il deployment del pod gke-mcs-importer
nel tuo cluster.
Per saperne di più sulla registrazione dei cluster, vedi Registrare un cluster GKE nel parco risorse.
Specifica un cluster di configurazione
Il cluster di configurazione è un cluster GKE che scegli come punto di controllo centrale per Ingress nei cluster membri. Questo cluster deve essere già registrato nel parco risorse. Per ulteriori informazioni, consulta Configurazione della progettazione del cluster.
Abilita Ingress multi-cluster e seleziona gke-us
come cluster di configurazione:
gcloud container fleet ingress enable \
--config-membership=gke-us \
--location=us-central1 \
--project=PROJECT_ID
La registrazione del cluster di configurazione richiede fino a 15 minuti. L'output riuscito è simile al seguente:
Waiting for Feature to be created...done.
Waiting for controller to start...done.
L'output non riuscito è simile al seguente:
Waiting for controller to start...failed.
ERROR: (gcloud.container.fleet.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
Se si è verificato un errore nel passaggio precedente, controlla lo stato della funzionalità:
gcloud container fleet ingress describe \
--project=PROJECT_ID
L'output corretto è simile al seguente:
createTime: '2021-02-04T14:10:25.102919191Z'
membershipStates:
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: ERROR
description: '...is not a VPC-native GKE Cluster.'
updateTime: '2021-08-10T13:58:50.298191306Z'
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: OK
updateTime: '2021-08-10T13:58:08.499505813Z'
Per scoprire di più sulla risoluzione degli errori relativi a Ingress multi-cluster, consulta Risoluzione dei problemi e operazioni.
VPC condiviso
Puoi eseguire il deployment di una risorsa MultiClusterIngress
per i cluster in una rete VPC condiviso, ma tutti i cluster GKE di backend partecipanti devono trovarsi nello stesso progetto. Non è supportato avere cluster GKE in progetti diversi che utilizzano lo stesso VIP di Cloud Load Balancing.
Nelle reti VPC non condivise, il controller Ingress multi-cluster gestisce le regole firewall per consentire il passaggio dei controlli di integrità dal bilanciatore del carico ai carichi di lavoro del container.
In una rete VPC condiviso, un amministratore del progetto host deve creare manualmente le regole firewall per il traffico del bilanciatore del carico per conto del controller Ingress multi-cluster.
Il comando seguente mostra la regola firewall che devi creare se i tuoi cluster si trovano su una rete VPC condiviso. Gli intervalli di origine sono gli intervalli che
il bilanciatore del carico utilizza per inviare il traffico ai backend. Questa regola deve esistere per la durata operativa di una risorsa MultiClusterIngress
.
Se i tuoi cluster si trovano su una rete VPC condivisa, crea la regola firewall:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
--project=HOST_PROJECT \
--network=SHARED_VPC \
--direction=INGRESS \
--allow=tcp:0-65535 \
--source-ranges=130.211.0.0/22,35.191.0.0/16
Sostituisci quanto segue:
FIREWALL_RULE_NAME
: il nome della nuova regola firewall che scegli.HOST_PROJECT
: l'ID del progetto host del VPC condiviso.SHARED_VPC
: il nome della rete VPC condiviso.
Problemi noti
Questa sezione descrive i problemi noti di Ingress multi-cluster
InvalidValueError per il campo config_membership
Un problema noto impedisce a Google Cloud CLI di interagire con Ingress multi-cluster. Questo problema è stato introdotto nella versione 346.0.0 ed è stato risolto nella versione 348.0.0. Sconsigliamo di utilizzare gcloud CLI versioni 346.0.0 e 347.0.0 con Ingress multi-cluster.
Valore non valido per il campo "resource"
Google Cloud Armor non può comunicare con Ingress multi-cluster cluster di configurazione in esecuzione nelle seguenti versioni GKE:
- 1.18.19-gke.1400 e versioni successive
- 1.19.10-gke.700 e versioni successive
- 1.20.6-gke.700 e versioni successive
Quando configuri un criterio di sicurezza di Google Cloud Armor, viene visualizzato il seguente messaggio:
Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist
Per evitare questo problema, esegui l'upgrade del cluster di configurazione alla versione 1.21 o successiva oppure utilizza il comando seguente per aggiornare BackendConfig CustomResourceDefinition
:
kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'