Preparare l'ambiente per i gateway multi-cluster

Questo documento mostra come preparare l'ambiente Google Kubernetes Engine (GKE) per abilitare il controller GKE Gateway multi-cluster. Questo controller è ospitato da Google ed esegue il provisioning dei 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 Deployment dei gateway o Deployment dei gateway multi-cluster.

Il GKE Gateway Controller multi-cluster installa le seguenti GatewayClass 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 il multi-cluster esterno regionale
  • gke-l7-cross-regional-internal-managed-mc per i gateway multi-cluster interni tra regioni
  • gke-l7-rilb-mc per i gateway multi-cluster interni a livello di regione
  • gke-l7-gxlb-mc per i gateway multi-cluster esterni classici 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 al progetto in cui risiedono i cluster GKE. Il controller del 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 Gateway multi-cluster e Ingress 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
  • Per utilizzare Google Cloud CLI per questa attività, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo il comando gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Requisiti del GKE Gateway Controller

  • L'API Gateway è supportata solo sui cluster nativi di VPC.
  • Se utilizzi GatewayClass a livello di regione o tra regioni, devi attivare una subnet solo proxy.
  • Il cluster deve avere il componente aggiuntivo HttpLoadBalancing abilitato.
  • 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 al service account GKE per il progetto di servizio.

Requisiti del gateway multi-cluster

Oltre ai requisiti del GKE Gateway Controller, per i deployment di gateway multi-cluster, assicurati di aver eseguito le seguenti attività:

  • Attiva l'API Gateway sui tuoi cluster.
  • Abilita Workload Identity Federation for 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 Ingress multi-cluster
    • API del cloud DNS
    • API GKE Hub (parco risorse)
    • API Resource Manager
    • API Multi-cluster Service Discovery

    Esegui questo comando per abilitare le API richieste, se non sono già abilitate:

    gcloud services enable \
      trafficdirector.googleapis.com \
      multiclusteringress.googleapis.com \
      dns.googleapis.com \
      gkehub.googleapis.com \
      cloudresourcemanager.googleapis.com \
      multiclusterservicediscovery.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 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 sui backend in regioni diverse non è supportato con la GatewayClass interna a livello di regione gke-l7-rilb-mc. Per scoprire 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.

  • Tutti i cluster del parco risorse devono esistere nel progetto host del parco risorse.

  • 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 sottoposti a deployment nello stesso progetto host o di servizio VPC condiviso. Per maggiori informazioni sulle topologie VPC condivise supportate con il gateway multi-cluster, consulta Utilizza il 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 di cui è stato eseguito il deployment nello stesso VPC.

  • Il gateway multi-cluster dipende da MCS per la gestione del Service Discovery tra cluster. Pertanto, i servizi esposti dal gateway multi-cluster sono soggetti a tutti i requisiti dei servizi multi-cluster.

  • I gateway multi-cluster possono causare la perdita di risorse del bilanciatore del carico nei seguenti scenari:

    • La funzionalità Ingress del parco risorse è stata 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 esistono risorse Gateway che fanno riferimento a un GatewayClass multi-cluster.
  • Il gateway multi-cluster viene eseguito come servizio globale. Se il controller del gateway multi-cluster rileva un errore del control plane del parco risorse (hub) regionale, 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 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 al loro interno.

I passaggi seguenti 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:

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

Questi cluster GKE vengono utilizzati per dimostrare il bilanciamento del carico multiregionale e la suddivisione del traffico blu-verde 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. Il raggruppamento dei cluster GKE in un parco risorse consente di indirizzarli a un gateway multi-cluster.

  1. Crea un cluster GKE in us-west1 denominato gke-west-1:

    gcloud container clusters create gke-west-1 \
        --gateway-api=standard \
        --location=us-west1-a \
        --workload-pool=PROJECT_ID. \
        --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 successive.
  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 \
        --location=us-west1-a \
        --workload-pool=PROJECT_ID. \
        --cluster-version=VERSION \
        --enable-fleet \
        --project=PROJECT_ID
    
  3. Crea un cluster GKE in us-east1 (o in una regione diversa dalla precedente) denominato gke-east-1

    gcloud container clusters create gke-east-1 \
        --gateway-api=standard \
        --location=us-east1-b \
        --workload-pool=PROJECT_ID. \
        --cluster-version=VERSION \
        --enable-fleet \
        --project=PROJECT_ID
    
  4. 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.

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

    In questo modo, le credenziali vengono archiviate localmente, così puoi utilizzare il 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 dei cluster in modo che sia più facile farvi 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 hai eseguito il deployment dei cluster.

Abilita i servizi multi-cluster nel parco risorse

  1. Abilita i servizi multi-cluster nel tuo parco risorse per i cluster registrati. In questo modo, il controller MCS viene abilitato per i tre cluster registrati nel 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 Identity and Access Management (IAM) richieste dal controller MCS:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID./subject/ns/gke-mcs/sa/gke-mcs-importer" \
        --role "roles/compute.networkViewer" \
        --project=PROJECT_ID
    

    Sostituisci PROJECT_ID e PROJECT_NUMBER con l'ID progetto e il numero di progetto in cui è stato eseguito il deployment dei cluster.

  3. Crea un'associazione IAM nel progetto host del parco risorse che assegna il ruolo Agente di servizio MCS al account di servizio MCS del progetto:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_ID@gcp-sa-mcsd." \
        --role roles/multiclusterservicediscovery.serviceAgent \
        --project=PROJECT_ID
    
  4. Verifica che MCS sia abilitato per i cluster registrati. Vedrai le appartenenze 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'
    

Abilita il gateway multi-cluster nel parco risorse

Il controller GKE Gateway multi-cluster gestisce il deployment dei gateway multi-cluster.

Quando attivi il controller del gateway multi-cluster, devi selezionare il cluster di configurazione. Il cluster di configurazione è il cluster GKE in cui vengono eseguite il deployment delle risorse Gateway (Gateway, Route, Policy). È un luogo centrale che controlla il routing tra i cluster. Consulta Progettazione del cluster di configurazione 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 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
    
  2. Concedi le autorizzazioni IAM (Identity and Access Management) richieste dal controller del gateway multi-cluster:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress." \
        --role "roles/container.admin" \
        --project=PROJECT_ID
    

    Sostituisci PROJECT_ID e PROJECT_NUMBER con l'ID progetto e il numero di progetto in cui hai eseguito il deployment dei cluster.

  3. Se il progetto per la rete del cluster è diverso dal progetto del parco risorse (ad esempio, se utilizzi un VPC condiviso), devi consentire al account di servizio del controller del gateway multi-cluster nel progetto del parco risorse di accedere al progetto di rete.

    Concedi al account di servizio del controller del gateway multi-cluster nel progetto del parco risorse l'autorizzazione per accedere al progetto di rete:

    gcloud projects add-iam-policy-binding NETWORK_PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress." \
        --role "roles/compute.networkUser" \
        --project=NETWORK_PROJECT_ID
    
  4. 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'
    
  5. Verifica che le GatewayClass esistano 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 gateway multi-cluster esterni e GatewayClass gke-l7-rilb-mc per gateway multi-cluster interni.

  6. Cambia il contesto kubectl impostandolo sul cluster di configurazione:

    kubectl config use-context gke-west-1
    

Ora puoi iniziare a eseguire il deployment dei gateway multi-cluster nel cluster di configurazione.

Utilizza il gateway multi-cluster con VPC condiviso

È possibile eseguire il deployment di un gateway multi-cluster anche in un ambiente VPC condiviso, con topologie diverse, a seconda del caso d'uso.

La tabella seguente descrive le topologie di gateway multi-cluster supportate in un ambiente VPC condiviso:

Scenario Progetto host del parco risorse Cluster di configurazione Cluster di workload
1 Progetto host VPC condiviso Progetto host VPC condiviso Progetto host VPC condiviso
2 Progetto di servizio del VPC condiviso Progetto di servizio VPC condiviso
(Uguale al progetto di servizio del parco risorse)
Progetto di servizio VPC condiviso
(Uguale al progetto di servizio del parco risorse)

Per creare gateway multi-cluster in un ambiente VPC condiviso, segui questi passaggi in base allo scenario scelto:

Scenario 1

In questo scenario, il progetto host del parco risorse, il cluster di configurazione e i cluster dei workload vengono creati e configurati nel progetto host del VPC condiviso. Per creare gateway multi-cluster in questa configurazione, segui le istruzioni riportate in questo documento per configurare l'ambiente per i gateway multi-cluster e utilizza l'ID progetto host del VPC condiviso per PROJECT_ID.

Scenario 2

In questo scenario, il progetto host del parco risorse, il cluster di configurazione e i cluster dei workload vengono creati e configurati nello stesso progetto di servizio del VPC condiviso. Il deployment dei cluster di configurazione e dei workload deve essere eseguito nello stesso VPC.

  1. Abilita le API richieste. L'output di Google Cloud CLI mostra se un'API è già stata abilitata.

    1. Abilita l'API Cloud DNS solo nel progetto host del VPC condiviso:

      gcloud services enable dns.googleapis.com \
        --project=SHARED_VPC_HOST_PROJECT_ID
      

      In questo scenario, il progetto host del parco risorse è un progetto di servizio connesso al progetto host del VPC condiviso. L'API Cloud DNS deve essere abilitata nel progetto host del VPC condiviso, perché è lì che si trova la rete VPC condivisa. GKE crea zone private gestite di Cloud DNS nel progetto host e le autorizza per la rete VPC condiviso.

    2. Abilita tutte le altre API nel progetto di servizio del VPC condiviso, che è anche il progetto host del parco risorse:

        gcloud services enable \
        trafficdirector.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        multiclusteringress.googleapis.com \
        gkehub.googleapis.com \
        cloudresourcemanager.googleapis.com \
        --project=FLEET_HOST_PROJECT_ID
      
  2. Abilita i servizi multi-cluster nel parco risorse.

    1. Abilita i servizi multi-cluster nel progetto host del parco risorse per i cluster registrati. Questo passaggio abilita i cluster del controller MCS registrati nel tuo parco risorse in modo che possano iniziare ad ascoltare ed esportare i servizi.

      gcloud container fleet multi-cluster-services enable \
      --project FLEET_HOST_PROJECT_ID
      

      L'abilitazione dei servizi multi-cluster nel progetto host del parco risorse crea o contribuisce a garantire l'esistenza del seguente account di servizio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd..

    2. Per concedere il ruolo Agente di servizio MCS al account di servizio MCS del progetto host del parco risorse, crea un'associazione IAM nel progetto host del VPC condiviso.

      gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJECT_ID \
      --member "serviceAccount:service-FLEET_HOST_PROJECT_NUMBER@gcp-sa-mcsd." \
      --role roles/multiclusterservicediscovery.serviceAgent
      
    3. Per concedere il ruolo Visualizzatore rete Compute al service account Kubernetes dell'importatore MCS del progetto host del parco risorse, crea un'associazione IAM nel progetto host del parco risorse.

      gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
       --member "principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID./subject/ns/gke-mcs/sa/gke-mcs-importer" \
       --role roles/compute.networkViewer
      
  3. Abilita il gateway multi-cluster nel parco risorse.

    1. Abilita 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/FLEET_HOST_PROJECT_ID/locations/us-west1/memberships/gke-west-1 \
        --project=FLEET_HOST_PROJECT_ID
      
    2. Concedi le autorizzazioni Identity and Access Management (IAM) richieste dal controller del gateway multi-cluster:

      gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
         --member "serviceAccount:service-FLEET_HOST_PROJECT_NUMBER@gcp-sa-multiclusteringress." \
         --role "roles/container.admin" \
         --project=FLEET_HOST_PROJECT_ID
      
  4. Se prevedi di utilizzare un gateway interno multi-cluster, crea una subnet solo proxy.

  5. Crea una regola firewall nel progetto host del VPC condiviso.

    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:

      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
    
  6. Crea ed esporta i tuoi servizi nel cluster di configurazione.

Dopo aver completato i passaggi precedenti, puoi convalidare il deployment, a seconda della topologia.

Risoluzione dei problemi

Questa sezione mostra come risolvere i problemi relativi all'attivazione del controller del gateway multi-cluster.

Le risorse GatewayClass 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 il 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 control plane del tuo cluster. Specifica una regione per i cluster a livello di regione o una zona per i cluster a livello di zona.

Se l'API Gateway è abilitata nel cluster di configurazione, ma l'esecuzione del comando kubectl get gatewayclasses non elenca ancora le GatewayClass multi-cluster come gke-l7-gxlb-mc, completa i seguenti passaggi:

Il controller del gateway multi-cluster non si avvia

Se abiliti l'API Gateway sul cluster di configurazione e includi i CRD dopo l'abilitazione della funzionalità Ingress del parco risorse, il controller del gateway multi-cluster potrebbe non avviarsi.

Puoi evitare questo problema abilitando l'API Gateway prima di abilitare l'Ingress del parco risorse. Tuttavia, se hai già abilitato l'accesso al parco risorse, risolvi il problema disabilitandolo e riabilitandolo:

  1. Disabilita Ingress del parco risorse:

    gcloud container fleet ingress disable
    
  2. Abilita Ingress del parco risorse:

    gcloud container fleet ingress enable \
        --config-membership=CONFIG_MEMBERSHIP \
        --project=PROJECT_ID
    

Sostituisci quanto segue:

  • CONFIG_MEMBERSHIP: l'ID della membership o l'identificatore completo della membership. 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.

Connect Gateway segnala "ERRORE: connessione persa"

Quando esegui il comando gcloud container fleet ingress describe, nell'output potrebbe verificarsi il seguente errore:

state:
  code: ERROR
  description: 'ERROR: Lost connection'

Potresti anche scoprire che l'esecuzione del comando kubectl get gatewayclasses non elenca le GatewayClass multi-cluster come gke-l7-gxlb-mc nel cluster di configurazione, anche dopo aver abilitato l'API Gateway nel cluster di configurazione.

In questi casi, l'agente di servizio Ingress multi-cluster potrebbe non avere il ruolo roles/multiclusteringress.serviceAgent. Questo problema si verifica quando vengono rimossi i ruoli predefiniti degli agenti di servizio, il che accade comunemente quando le risorse IAM autoritative in Terraform (google_project_iam_binding o google_project_iam_policy) sovrascrivono la policy IAM del progetto, rimuovendo le concessioni dei ruoli degli agenti di servizio predefiniti non dichiarate nella configurazione di Terraform.

Per risolvere questo problema, completa i seguenti passaggi:

  1. Concedi il ruolo roles/multiclusteringress.serviceAgent all'agente di servizio Ingress multi-cluster nel progetto host del parco risorse:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress." \
        --role "roles/multiclusteringress.serviceAgent" \
        --project=PROJECT_ID
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto in cui sono stati eseguiti i deployment dei cluster.

    • PROJECT_NUMBER: il numero di progetto in cui è stato eseguito il deployment dei cluster.

  2. Assicurati che all'agente di servizio sia concesso anche il ruolo roles/container.admin eseguendo nuovamente il comando gcloud projects add-iam-policy-binding in Abilita il gateway multi-cluster nel parco risorse.

  3. Se gestisci le autorizzazioni IAM con Terraform, aggiorna la configurazione in modo da utilizzare risorse google_project_iam_member non autoritative per impedire che i deployment Terraform futuri rimuovano nuovamente il ruolo dell'agente di servizio.

  4. Verifica che la connessione del controller sia stata ripristinata e che le GatewayClass multi-cluster siano disponibili eseguendo i comandi di verifica in Abilita il gateway multi-cluster nel parco risorse. Se il comando kubectl get gatewayclasses restituisce il messaggio error: the server doesn't have a resource type "gatewayclasses", consulta GatewayClasses non sono disponibili nel cluster di configurazione.

Passaggi successivi