Configurazione di Ingress multi-cluster


Questa pagina mostra come instradare il traffico su più cluster Google Kubernetes Engine (GKE) in regioni diverse utilizzando Ingress multi-cluster, con un esempio che utilizza 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 scoprire di più sul deployment di Ingress multi-cluster, consulta Deployment di Ingress in diversi 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 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 gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Requisiti e limitazioni

Ingress multi-cluster presenta i seguenti requisiti:

  • Google Cloud CLI versione 290.0.0 e successive.

Se utilizzi i 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 è attivo per impostazione predefinita e non devi disattivarlo.
  • I cluster devono essere nativi di VPC.
  • I cluster devono avere Workload Identity Federation for GKE abilitato.

Ingress multi-cluster presenta le seguenti limitazioni:

  • Supportato 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 sono gestiti da Ingress multi-cluster, altrimenti verranno eliminati. Google Cloud utilizza il prefisso mci-[6 char hash] per gestire le risorse Compute Engine di cui viene eseguito il deployment da Ingress multi-cluster.
  • La configurazione di HTTPS richiede un indirizzo IP statico preallocato. Il protocollo HTTPS non è supportato con gli indirizzi IP temporanei.

Panoramica

In questo esercizio, svolgi i seguenti passaggi:

  1. Seleziona i prezzi che vuoi utilizzare.
  2. Esegui il deployment dei cluster.
  3. Configura le credenziali del cluster.
  4. Registra i cluster in un parco risorse.
  5. Specifica un cluster di configurazione. Questo cluster può essere un piano di controllo dedicato o può eseguire altri carichi di lavoro.

Il seguente diagramma mostra l'aspetto del tuo ambiente al termine dell'esercizio:

La topologia del cluster mostra le relazioni tra regioni, parco risorse e progetto.

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 ti consente di raggruppare e normalizzare logicamente i cluster GKE, semplificando l'amministrazione dell'infrastruttura e consentendo l'utilizzo di funzionalità multi-cluster come Ingress multi-cluster. Per scoprire di più sui vantaggi dei parchi risorse e su come crearli, consulta la documentazione sulla gestione dei parchi risorse.

Seleziona i prezzi

Se utilizzi Ingress multi-cluster come unica funzionalità di GKE Enterprise, ti consigliamo di utilizzare i prezzi autonomi. Se il tuo progetto utilizza altri componenti o funzionalità di GKE Enterprise su Google Cloud, devi attivare l'intera piattaforma GKE Enterprise. In questo modo puoi utilizzare tutte le funzionalità di GKE Enterprise con un unico addebito per vCPU.

Le API che devi abilitare dipendono dai prezzi di Ingress multi-cluster che utilizzi.

  • Se l'API GKE Enterprise (anthos.googleapis.com) è abilitata, la fatturazione del progetto avviene in base al numero di vCPU del cluster e ai prezzi di GKE Enterprise.
  • Se l'API GKE Enterprise è disabilitata, la fatturazione del progetto avviene in base al numero di pod di backend Ingress multi-cluster nel progetto.

Puoi modificare il modello di fatturazione di Ingress multi-cluster da autonomo a GKE Enterprise o da GKE Enterprise ad autonomo in qualsiasi momento senza influire sulle risorse o sul traffico di Ingress multi-cluster.

Prezzi autonomi

Per attivare i prezzi autonomi, svolgi i seguenti passaggi:

  1. Verifica che l'API GKE Enterprise sia disattivata nel progetto:

    gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
    

    Sostituisci PROJECT_ID con l'ID progetto in cui sono in esecuzione i tuoi cluster GKE.

    Se l'output è una risposta vuota, l'API GKE Enterprise è disabilitata nel tuo progetto e le eventuali risorse Ingress multi-cluster vengono fatturate utilizzando i prezzi autonomi.

  2. Abilita le API richieste nel progetto:

    gcloud services enable \
        multiclusteringress.googleapis.com \
        gkehub.googleapis.com \
        container.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project=PROJECT_ID
    

Prezzi di GKE Enterprise

Per attivare i prezzi di GKE Enterprise, abilita le API richieste nel progetto:

gcloud services enable \
    anthos.googleapis.com \
    multiclusteringress.googleapis.com \
    gkehub.googleapis.com \
    container.googleapis.com \
    multiclusterservicediscovery.googleapis.com \
    --project=PROJECT_ID

Dopo aver attivato anthos.googleapis.com nel progetto, tutti i cluster registrati a 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

  1. Crea il cluster gke-us nella regione us-central1:

    gcloud container clusters create-auto gke-us \
        --region=us-central1 \
        --release-channel=stable \
        --project=PROJECT_ID
    

    Sostituisci PROJECT_ID con il tuo ID progetto Google Cloud.

  2. Crea il cluster gke-eu nella regione europe-west1:

    gcloud container clusters create-auto gke-eu \
        --region=europe-west1 \
        --release-channel=stable \
        --project=PROJECT_ID
    

Standard

Crea i due cluster con Workload Identity Federation for GKE abilitato.

  1. Crea il cluster gke-us nella regione us-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 il tuo ID progetto Google Cloud.

  2. Crea il cluster gke-eu nella regione europe-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 tuoi cluster e rinomina i relativi contesti per semplificare il passaggio da un cluster all'altro durante il deployment delle risorse.

  1. 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 memorizzate localmente in modo da poter utilizzare il client kubectl per accedere ai server API del cluster. Per impostazione predefinita, viene creato un nome generato automaticamente per le credenziali.

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

  1. Registra i 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
    
  2. 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 gke-mcs-importer pod nel cluster.

Scopri di più sulla registrazione dei cluster in Registrare un cluster GKE nel tuo 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 Configurare il design 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 può richiedere fino a 15 minuti. L'output corretto è 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 la sezione Risoluzione dei problemi e operazioni.

Impatto sui cluster attivi

Puoi attivare in sicurezza Ingress multi-cluster utilizzando gcloud container fleet ingress enable su un cluster attivo, in quanto non comporta tempi di inattività o impatto sul traffico sul cluster.

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 l'utilizzo dello stesso VIP Cloud Load Balancing in cluster GKE di progetti diversi.

Nelle reti VPC non condivise, il controller di Ingress multi-cluster gestisce le regole firewall per consentire il passaggio dei controlli di integrità dal bilanciatore del carico ai carichi di lavoro dei contenitori.

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 di Ingress multi-cluster.

Il seguente comando 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 utilizzati dal bilanciatore del carico per inviare traffico ai backend. Questa regola deve esistere per tutta la durata operativa di una risorsa MultiClusterIngress.

Se i cluster si trovano in una rete VPC condiviso, 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 scelto.
  • HOST_PROJECT: l'ID del progetto host VPC condiviso.
  • SHARED_VPC: il nome della rete VPC condiviso.

Problemi noti

Questa sezione descrive i problemi noti relativi a 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 le versioni 346.0.0 e 347.0.0 dell'interfaccia alla gcloud CLI con Ingress multi-cluster.

Valore non valido per il campo "resource"

Google Cloud Armor non può comunicare con i cluster di configurazione di Ingress multi-cluster in esecuzione sulle seguenti versioni di 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 seguente comando per aggiornare il valore CustomResourceDefinition di BackendConfig:

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"}}]'

Passaggi successivi