Abilita gateway multi-cluster


Questa pagina mostra come abilitare la configurazione multi-cluster Controller gateway GKE, un controller ospitato da Google che esegue il provisioning di bilanciatori del carico esterni e interni, per i tuoi cluster GKE. Scopri come utilizzare le risorse gateway per il container del carico, consulta Deployment dei gateway o Deployment di gateway multi-cluster.

GKE Gateway Controller multi-cluster installa quanto segue GatewayClass a cluster multipli nei tuoi cluster:

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

Scopri di più sulle funzionalità delle varie GatewayClass in GKE.

Prezzi

A tutte le risorse Compute Engine di cui è stato eseguito il deployment tramite i controller Gateway vengono addebitate rispetto al progetto in cui si trovano i cluster GKE. La il controller gateway a cluster singolo è offerto senza costi aggiuntivi nell'ambito Prezzi di GKE Standard e Autopilot. Prezzi per i gateway multi-cluster sono descritti nel Pagina dei prezzi di Ingress multi-cluster e gateway.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Attiva l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine .
  • Se vuoi utilizzare Google Cloud CLI per questa attività, install e poi initialize con 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 su Nativo VPC di cluster GKE.
  • Se si utilizzano le classi gateway interne, è necessario abilitare un 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 opzioni versions:
    • 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, per di deployment di gateway multi-cluster, assicurati di aver eseguito le seguenti attività:

  • Abilita il gateway API 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 in cui I cluster GKE sono in esecuzione.

Restrizioni e limitazioni

Stesse limitazioni e problemi noti per i gateway a cluster singolo si applica anche ai gateway a cluster multipli.

Oltre alle limitazioni del gateway a cluster singolo, si applicano le seguenti limitazioni si applica ai gateway multi-cluster:

  • Il bilanciamento del carico verso backend in regioni diverse non è supportato con GatewayClass interno regionale gke-l7-rilb-mc. Per saperne di più sulle a diverse caratteristiche supportate da ogni GatewayClass, consulta le funzionalità di GatewayClass.

  • Service non è supportato come backendRefs con gateway multi-cluster. Il gateway multi-cluster supporta solo ServiceImport come backendRefs 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 deve essere eseguito il deployment nello stesso progetto host o progetto di servizio del VPC condiviso. Per ulteriori informazioni informazioni sulle topologie delle reti VPC condiviso supportate Gateway, vedi Utilizzare un gateway multi-cluster con un VPC condiviso.

  • Il gateway multi-cluster dipende da MCS per la gestione del servizio cross-cluster scoperta. Pertanto, le esposizioni multi-cluster dei servizi sono soggette a tutti i servizi multi-cluster Requisiti.

Quote

Il gateway GKE utilizza le quote di Cloud Load Balancing per limita il numero di risorse che il controller del gateway può creare per gestire traffico in entrata indirizzato 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 parco risorse, in modo che Gateway e servizi possono operare su di essi.

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

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

Questi cluster GKE vengono utilizzati per dimostrare il bilanciamento del carico tra più regioni e la suddivisione del traffico multi-cluster blu/verde tramite gateway interni ed esterni.

Esegui il deployment dei cluster

In questi passaggi eseguirai il deployment di tre cluster GKE in 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 in cui I cluster GKE sono in esecuzione.
    • 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 dalla precedente) denominata 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 facili da ricordare. Ciò rende è più facile passare da un cluster all'altro quando si esegue il deployment di risorse cluster.

  1. Recupera le credenziali per il 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
    

    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, un nome generato automaticamente è creato per la credenziale.

  2. 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.

Registra i cluster nel parco risorse

  1. Dopo aver creato tutti e tre i cluster, dovrai registrare questi cluster nel parco risorse del tuo progetto. Il raggruppamento dei cluster GKE in un parco risorse consente di essere scelti come target da un cluster Gateway.

    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. Abilita il controller MCS per i tre cluster registrati in del tuo 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. Verifica che MCS sia abilitato per i cluster registrati. Vedrai l'icona le appartenenze ai tre cluster registrati. L'operazione potrebbe richiedere diversi minuti per mostrare 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 GKE Gateway multi-cluster regola il deployment di gateway multi-cluster.

Quando abiliti il controller gateway multi-cluster, devi selezionare la configurazione in un cluster Kubernetes. Il cluster di configurazione è il cluster GKE in cui Risorse gateway (Gateway, Route criteri). È una posizione centrale che controlla il routing tra i cluster. Consulta Configurazione della progettazione del cluster per aiutarti a decidere quale cluster scegliere come cluster di configurazione.

  1. 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à il 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
    
  2. Concedi le autorizzazioni IAM (Identity and Access Management) richieste dall'istanza multi-cluster Controller 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_ID e PROJECT_NUMBER con l'ID e il numero di 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. 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 il parametro gke-l7-global-external-managed-mc di GatewayClass, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc per cluster multipli esterni Gateway e GatewayClass gke-l7-rilb-mc per i gateway multi-cluster interni.

  5. 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'architettura multi-cluster Abilitazione del controller gateway.

Le classi Gateway non sono disponibili nel cluster di configurazione

Quando esegui il comando, potrebbe verificarsi il seguente errore kubectl get gatewayclasses:

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: il Compute Engine regione del tuo cluster. Per cluster di zona, usa --zone=COMPUTE_ZONE.

Problemi noti

  • Si è verificato un problema noto con il controller gateway multi-cluster a causa del quale potrebbe l'avvio non riesce. Per evitare questo problema, abilita il gateway API sulla di configurazione del cluster e includi i CRD prima del traffico in entrata del parco risorse sia abilitata.
  • I gateway multi-cluster possono rilasciare risorse del bilanciatore del carico nei seguenti scenari aggiuntivi:
    • La funzionalità in entrata del parco risorse viene aggiornata con un nuovo cluster di configurazione che non dispone di tutte le risorse Gateway esistenti nell'attuale di configurazione del deployment.
    • La funzionalità in entrata del parco risorse è disabilitata mentre Gateway risorsa che fanno riferimento a un GatewayClass multi-cluster esistono nella configurazione in un cluster Kubernetes.
  • Il gateway multi-cluster viene eseguito come servizio globale. Se il gateway multi-cluster rileva un errore del piano di controllo del parco risorse regionale (Hub), rispondere con un errore statico e non apportando ulteriori modifiche al bilanciatore del carico finché la regione è tornata in servizio.

Passaggi successivi