Abilita gateway multi-cluster


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 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 le seguenti classi di gateway multi-cluster nei tuoi cluster:

  • gke-l7-global-external-managed-mc per i gateway multi-cluster esterni globali
  • gke-l7-regional-external-managed-mc per i gateway multi-cluster esterni a livello di regione
  • gke-l7-rilb-mc per i gateway multi-cluster interni a livello di regione
  • gke-l7-gxlb-mc per i gateway multi-cluster classici esterni globali

Scopri di più sulle funzionalità dei vari GatewayClass in GKE.

Prezzi

Tutte le risorse di Compute Engine di cui è stato eseguito il deployment tramite i controller gateway vengono addebitate in base al progetto in cui risiedono i cluster GKE. Il controller gateway a cluster singolo viene 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 attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica 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 su cluster native VPC.
  • Se utilizzi le classi di gateway interne, devi abilitare una subnet solo proxy.
  • Nel cluster deve essere abilitato 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 del gateway GKE, assicurati di aver eseguito le seguenti attività per i deployment dei gateway multi-cluster:

  • Abilita l'API Gateway sul cluster di configurazione.
  • Abilita la federazione delle identità per i carichi di lavoro per GKE sui tuoi cluster.
  • Completa i prerequisiti generali del parco risorse per registrare i cluster.
  • Abilita le seguenti API obbligatorie per i gateway multi-cluster nel tuo progetto:

    • API Traffic Director
    • 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 in cui sono in esecuzione i cluster GKE.

Limitazioni 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 nei backend di regioni diverse non è supportato con 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.

  • Un Service non è supportato come backendRefs con il gateway multi-cluster. Il gateway multi-cluster supporta solo ServiceImport come backendRefs 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 del VPC condiviso o nello stesso progetto di servizio. Per ulteriori informazioni sulle topologie VPC condivise supportate con il gateway multi-cluster, consulta Utilizzare il gateway multi-cluster con il VPC condiviso.

  • Il gateway multi-cluster dipende da MCS per la gestione del rilevamento dei servizi tra cluster. Di conseguenza, i servizi esposti al gateway multi-cluster sono soggetti a tutti i requisiti per i servizi multi-cluster.

Quote

Gateway GKE 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 instradato verso i cluster GKE.

Configura il tuo ambiente per gateway multi-cluster

Richiede più cluster GKE per completare gli esempi in Deployment di gateway multi-cluster. Tutti i cluster sono registrati nello stesso parco risorse in modo che gateway e servizi multi-cluster possano operare su di essi.

I passaggi seguenti eseguiranno il deployment di tre cluster GKE in due diverse regioni 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 di cluster:

La topologia dei cluster che mostra la relazione tra regioni, parco risorse e progetto.

Questi cluster GKE vengono utilizzati per dimostrare il bilanciamento del carico multiregionale e la suddivisione del traffico multi-cluster blu/verde 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.

  1. Crea un cluster GKE in us-west1 denominato gke-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 \
        --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto su cui sono in esecuzione i cluster GKE.
    • VERSION: la versione di GKE 1.24 o successiva.
  2. 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 \
        --zone=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    
  3. 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 \
        --zone=us-east1-b \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    

Configura le credenziali del cluster

Questo passaggio configura le credenziali del cluster con nomi memorabili. In questo modo, è più facile passare da un cluster all'altro quando esegui il deployment di risorse in diversi cluster.

  1. Recupera le credenziali per i cluster gke-west-1, gke-west-2 e gke-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
    

    In questo modo le credenziali vengono archiviate localmente in modo che tu possa usare il tuo client kubectl per accedere ai server API del cluster. Per impostazione predefinita, viene creato un nome generato automaticamente per la credenziale.

  2. Rinomina i contesti del cluster in modo che siano più facili da consultare 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.

Registra i cluster nel parco risorse

  1. Dopo aver creato tutti e tre i cluster, dovrai registrarli nel parco risorse del tuo progetto. Il raggruppamento dei cluster GKE in un parco risorse consente di scegliere come target un gateway multi-cluster.

    gcloud container fleet memberships register gke-west-1 \
         --gke-cluster us-west1-a/gke-west-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-west-2 \
         --gke-cluster us-west1-a/gke-west-2 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-east-1 \
         --gke-cluster us-east1-b/gke-east-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
  2. 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
    

Abilita i servizi multi-cluster nel parco risorse

  1. Abilita i servizi multi-cluster nel tuo parco risorse per i cluster registrati. Questa opzione 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
    
  2. 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.

  3. Conferma 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 gateway multi-cluster nel parco risorse

Il controller gateway GKE multi-cluster gestisce 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 Configurazione della progettazione del cluster per decidere quale cluster scegliere come cluster di configurazione.

  1. Abilita il gateway multi-cluster e specifica il cluster di configurazione nel tuo parco risorse. Tieni presente che puoi aggiornare il cluster di configurazione in qualsiasi 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-a/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. 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 e PROJECT_NUMBER con l'ID e il numero del progetto in cui viene eseguito il deployment dei cluster.

  3. 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'
    
  4. Verifica che il parametro GatewayClasses esista 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 gke-l7-rilb-mc per i gateway multi-cluster interni.

  5. Cambia il contesto kubectl nel cluster di configurazione:

    kubectl config use-context gke-west-1
    

Ora è tutto pronto per iniziare il deployment di 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 \
    --region=COMPUTE_REGION

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del tuo cluster.
  • COMPUTE_REGION: la regione di Compute Engine del cluster. Per i cluster a livello di zona, utilizza --zone=COMPUTE_ZONE.

Problemi noti

  • Si è verificato un problema noto con il controller gateway multi-cluster in cui potrebbe non essere avviato. Per evitare questo problema, abilita l'API Gateway nel cluster di configurazione e includi le CRD prima dell'abilitazione della funzionalità Ingress del parco risorse.
  • I gateway multi-cluster possono perdere risorse del bilanciatore del carico nei seguenti scenari:
    • La funzionalità Ingress del parco risorse è stata aggiornata con un nuovo cluster di configurazione che non contiene tutte le risorse Gateway esistenti nel cluster di configurazione attuale.
    • La funzionalità Ingress del parco risorse è disabilitata, mentre nel cluster di configurazione sono presenti risorse Gateway che fanno riferimento a un GatewayClass multi-cluster.
  • Il gateway multi-cluster viene eseguito come servizio globale. Se il controller gateway multi-cluster rileva un errore del piano di controllo del parco risorse (Hub) a livello di regione, risponderà a causa di un errore di staticità e non apportare ulteriori modifiche al bilanciatore del carico finché la regione non sarà tornata in servizio.

Passaggi successivi