Configurazione di Ingress multi-cluster


Questa pagina mostra come indirizzare il traffico su più di cluster Google Kubernetes Engine (GKE) in diverse regioni 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 autonomi) NEG), consulta Scegliere l'API di bilanciamento del carico multi-cluster per GKE.

Per saperne 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 di GKE.

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 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 le i seguenti requisiti. I cluster Autopilot soddisfano già questi requisiti i tuoi requisiti.

  • Nei cluster deve essere abilitato il componente aggiuntivo HttpLoadBalancing. Questo componente aggiuntivo è è abilitato per impostazione predefinita, non è necessario disabilitarlo.
  • I cluster devono essere Nativo VPC.
  • I cluster devono avere Federazione delle identità dei carichi di lavoro per GKE in un bucket con il controllo delle versioni attivo.

L'impostazione Ingress multi-cluster ha le seguenti limitazioni:

  • Supportata solo con un bilanciatore del carico delle applicazioni esterno.
  • Non creare bilanciatori del carico di Compute Engine nello stesso progetto con il prefisso mci- che non sono gestiti da Ingress multi-cluster o saranno eliminati. Google Cloud utilizza il prefisso mci-[6 char hash] per gestire Risorse Compute Engine di cui Ingress multi-cluster esegue il deployment.
  • La configurazione di HTTPS richiede un indirizzo IP statico preallocato. HTTPS è non supportati con gli indirizzi IP temporanei.

Panoramica

In questo esercizio devi eseguire questi passaggi:

  1. Seleziona i prezzi che vuoi utilizzare.
  2. Eseguire 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 come sarà il tuo ambiente dopo completa l'esercizio:

Topologia dei cluster che 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 vengono registrato in un parco risorse in modo che il controller Ingress multi-cluster possa riconoscere che li rappresentano. 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 usare i prezzi autonomi. Se il progetto utilizza altri GKE Enterprise su Google Cloud componenti o funzionalità, 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 Prezzi di Ingress multi-cluster che utilizzi.

  • Se l'API GKE Enterprise (anthos.googleapis.com) è abilitata: i costi del progetto vengono addebitati in base al numero di vCPU del cluster Prezzi di GKE Enterprise.
  • Se l'API GKE Enterprise è disabilitata, il tuo 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, o da GKE Enterprise all'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:

  1. 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 I cluster GKE sono in esecuzione.

    Se l'output è una risposta vuota, l'API GKE Enterprise è disabilitata in il progetto e qualsiasi risorsa Ingress multi-cluster vengono fatturati utilizzando la modalità pricing.

  2. 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 aver abilitato anthos.googleapis.com nel progetto, tutti i cluster registrati in Connect vengono fatturati in base Prezzi di GKE Enterprise.

Esegui il deployment dei cluster

Crea due cluster GKE denominati gke-us e gke-eu nel europe-west1e us-central1 regioni.

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 Google Cloud dell'ID progetto.

  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 la Federazione delle identità per i carichi di lavoro per GKE abilitata.

  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 Google Cloud dell'ID progetto.

  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 cluster e rinomina i contesti per creare 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 sono archiviate localmente in modo che tu possa utilizzare il tuo client kubectl per accedere ai server API del cluster. Per impostazione predefinita, il nome generato automaticamente creato 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 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
    
  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 dell'gke-mcs-importer un pod al 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 di rappresentare punto di controllo per l'accesso in entrata nei cluster membri. Questo cluster deve è già registrato nel parco risorse. Per ulteriori informazioni, vedi Progettazione del cluster di configurazione.

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. Operazione riuscita è 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 di Ingress multi-cluster, vedi Risoluzione dei problemi e operazioni.

VPC condiviso

Puoi eseguire il deployment di una risorsa MultiClusterIngress per i cluster in un Rete VPC condiviso, ma tutti i backend GKE partecipanti devono trovarsi nello stesso progetto. Disporre di cluster GKE progetti diversi che usano lo stesso VIP di Cloud Load Balancing non sono supportati.

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

In una rete VPC condiviso, l'amministratore del progetto host deve le regole firewall per il traffico del bilanciatore del carico per conto Controller Ingress multi-cluster.

Il comando seguente mostra la regola firewall che devi creare se il tuo cluster si trovano su una rete VPC condiviso. Gli intervalli di origine sono gli intervalli usato dal bilanciatore del carico per inviare 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 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 che scegli.
  • HOST_PROJECT: l'ID dell'host del VPC condiviso progetto.
  • SHARED_VPC: il nome del VPC condiviso in ogni rete.

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. Non è consigliabile 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 config cluster in esecuzione sulle 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 configurare un criterio di sicurezza di Google Cloud Armor; appare 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 usa 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"}}]'

Passaggi successivi