Configurazione dei servizi multi-cluster con VPC condiviso


Questa pagina descrive scenari comuni di servizi multi-cluster (MCS). Gli scenari presentati in questa pagina hanno le seguenti caratteristiche:

  • Due cluster GKE: il primo cluster GKE viene registrato nel parco risorse del proprio progetto. Questo è il progetto host del parco risorse. Il secondo cluster GKE è registrato nello stesso parco risorse, anche se, a seconda dello scenario, potrebbe non trovarsi all'interno dello stesso progetto. Entrambi i cluster GKE sono cluster nativi di VPC.
  • Stessa rete VPC: entrambi i cluster GKE utilizzano subnet nella stessa rete VPC condiviso.
  • Federazione delle identità per i carichi di lavoro per GKE è abilitata in entrambi i cluster.

Terminologia

I termini Progetto host VPC condiviso e Progetto host del parco risorse GKE hanno significati diversi.

  • Il progetto host del VPC condiviso è il progetto che contiene la rete VPC condivisa.
  • Il progetto host del parco risorse GKE è il progetto che contiene il parco risorse in cui registri i cluster.

Scenari

La tabella seguente descrive scenari MCS comuni:

Scenario Progetto host del parco risorse (progetto contenente il primo cluster) La località del secondo cluster
Cluster nello stesso progetto di servizio VPC condiviso Un progetto di servizio VPC condiviso Lo stesso progetto di servizio del VPC condiviso del primo cluster
Progetto host del VPC condiviso come progetto host del parco risorse (un cluster nel progetto host del VPC condiviso, un secondo cluster in un progetto di servizio VPC condiviso) Il progetto host del VPC condiviso Un progetto di servizio VPC condiviso
Cluster in progetti di servizio VPC condiviso diversi Un progetto di servizio VPC condiviso Un altro progetto di servizio del VPC condiviso

Prerequisiti

Prima di impostare una configurazione multiprogetto di MCS, completa i seguenti passaggi:

Cluster nello stesso progetto di servizio VPC condiviso

Questa sezione fornisce un esempio di configurazione MCS che coinvolge due cluster GKE esistenti entrambi nello stesso progetto di servizio VPC condiviso:

  • Entrambi i cluster utilizzano la stessa rete VPC condiviso in SHARED_VPC_HOST_PROJ.
  • Il primo cluster GKE VPC nativo FIRST_CLUSTER_NAME, con la federazione di Workload Identity per GKE abilitata, viene creato in FLEET_HOST_PROJ. Il progetto host del parco risorse è un progetto di servizio connesso a SHARED_VPC_HOST_PROJ in questo scenario.
  • Anche il secondo cluster GKE VPC nativo SECOND_CLUSTER_NAME, con la federazione di Workload Identity per GKE abilitata, viene creato in FLEET_HOST_PROJ.

Abilita le API richieste

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

  1. Abilita l'API Cloud DNS:

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

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

  2. Abilita l'API GKE Hub (parco risorse). L'API GKE Hub deve essere abilitata solo nel progetto host del parco risorse.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    L'abilitazione di questa API nel progetto host del parco risorse crea o garantisce che esista il seguente account di servizio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Abilita le API Traffic Director, Resource Manager e Service Discovery multi-cluster nel progetto host del parco risorse:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    

Abilita i servizi multi-cluster nel progetto host del parco risorse

  1. Abilita i servizi multi-cluster nel progetto host del parco risorse:

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

    L'abilitazione di servizi multi-cluster nel progetto host del parco risorse crea o garantisce l'esistenza del seguente account di servizio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crea associazioni IAM

  1. Crea l'associazione IAM in modo da concedere all'account di servizio MCS del progetto host del parco risorse il ruolo Agente di servizio MCS nel progetto host del VPC condiviso:

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  2. Crea l'associazione IAM in modo da concedere all'account di servizio MCS del progetto host del parco risorse il ruolo Utente di rete per il proprio progetto:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Poiché questo scenario utilizza la federazione di Workload Identity per GKE, l'account di servizio GKE del progetto host del parco risorse deve disporre del ruolo Utente di rete per il proprio progetto.

    Sostituisci quanto segue:

    • SHARED_VPC_HOST_PROJ: l'ID del progetto host del VPC condiviso
    • FLEET_HOST_PROJ_NUMBER: il numero del progetto host del parco risorse, che è il progetto di servizio VPC condiviso per questo scenario
    • FLEET_HOST_PROJ: l'ID del progetto del primo cluster.

Registra i cluster nel parco risorse

  1. Registra il primo cluster nel parco risorse. Il flag --gke-cluster può essere utilizzato per questo comando perché il primo cluster si trova nello stesso progetto del parco risorse in cui viene registrato.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME_1: un identificatore univoco per il cluster in questo parco risorse. Ad esempio, puoi utilizzare il nome del primo cluster GKE.
    • FLEET_HOST_PROJ: l'ID progetto per il progetto host del parco risorse, identico al progetto host del VPC condiviso in questo scenario.
    • LOCATION: per i cluster a livello di zona, la zona di Compute Engine contenente il cluster; per i cluster a livello di regione, la regione di Compute Engine contenente il cluster.
    • FIRST_CLUSTER_NAME: il nome del primo cluster.
  2. Registra il secondo cluster nel progetto host del parco risorse. Il flag --gke-cluster può essere utilizzato per questo comando perché il secondo cluster si trova anche nel progetto host del parco risorse.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/SECOND_CLUSTER_NAME
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME_2: un identificatore univoco per il cluster in questo parco risorse. Ad esempio, puoi utilizzare il nome del secondo cluster GKE.
    • FLEET_HOST_PROJ: l'ID progetto per il progetto host del parco risorse, identico al progetto host del VPC condiviso in questo scenario.
    • LOCATION: per i cluster a livello di zona, la zona di Compute Engine contenente il cluster; per i cluster a livello di regione, la regione di Compute Engine contenente il cluster.
    • SECOND_CLUSTER_NAME: il nome del secondo cluster.

Crea uno spazio dei nomi comune per i cluster

  1. Assicurati che ogni cluster disponga di uno spazio dei nomi con cui condividere i servizi. Se necessario, crea uno spazio dei nomi utilizzando il seguente comando in ogni cluster:

    kubectl create ns NAMESPACE
    

    Sostituisci NAMESPACE con un nome per lo spazio dei nomi.

Progetto host VPC condiviso come progetto host del parco risorse

Questa sezione fornisce un esempio di configurazione MCS che coinvolge due cluster GKE esistenti:

  • Il primo cluster GKE VPC nativo FIRST_CLUSTER_NAME, con la federazione delle identità per GKE abilitata, è stato creato in FLEET_HOST_PROJ. In questo scenario, il progetto host del parco risorse è anche il progetto host del VPC condiviso.
  • Il secondo cluster GKE VPC nativo SECOND_CLUSTER_NAME, con la federazione di Workload Identity per GKE abilitata, è stato creato in SECOND_CLUSTER_PROJ.

Abilita le API richieste

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

  1. Abilita l'API Cloud DNS:

    gcloud services enable dns.googleapis.com \
        --project FLEET_HOST_PROJ
    

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

  2. Abilita l'API GKE Hub (parco risorse). L'API GKE Hub deve essere abilitata solo nel progetto host del parco risorse.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    L'abilitazione dell'API GKE Hub nel progetto host del parco risorse crea o garantisce che il seguente account di servizio esista: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Abilita le API Traffic Director, Resource Manager e Service Discovery multi-cluster, nel progetto host del parco risorse e nel progetto del secondo cluster:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Abilita i servizi multi-cluster nel progetto host del parco risorse

  1. Abilita i servizi multi-cluster nel progetto host del parco risorse:

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

    L'abilitazione di servizi multi-cluster nel progetto host del parco risorse crea o garantisce l'esistenza del seguente account di servizio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crea associazioni IAM

  1. Crea l'associazione IAM concedendo all'account di servizio del parco risorse GKE del progetto host del parco risorse il ruolo Agente di servizio GKE per il progetto del secondo cluster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \
        --role roles/gkehub.serviceAgent
    
  2. Crea l'associazione IAM per concedere all'account di servizio MCS del progetto host del parco risorse il ruolo Agente di servizio MCS per il progetto del secondo cluster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Crea l'associazione IAM concedendo all'account di servizio MCS di ogni progetto il ruolo Utente di rete per il proprio progetto:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    
    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Poiché questo scenario utilizza la federazione di Workload Identity per GKE, l'account di servizio GKE per l'importazione MCS di ogni progetto deve avere il ruolo Utente di rete per il proprio progetto.

    Sostituisci quanto segue:

    • SECOND_CLUSTER_PROJ: l'ID del progetto del secondo cluster
    • FLEET_HOST_PROJ: l'ID del progetto del primo cluster.
    • FLEET_HOST_PROJ_NUMBER: il numero del progetto host del parco risorse, che corrisponde al progetto host del VPC condiviso per questo scenario

Registra i cluster nel parco risorse

  1. Registra il primo cluster nel parco risorse. Il flag --gke-cluster può essere utilizzato per questo comando perché il primo cluster si trova nello stesso progetto del parco risorse in cui viene registrato.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME_1: un identificatore univoco per il cluster in questo parco risorse. Ad esempio, puoi utilizzare il nome del primo cluster GKE.
    • FLEET_HOST_PROJ: l'ID progetto per il progetto host del parco risorse, identico al progetto host del VPC condiviso in questo scenario.
    • LOCATION: per i cluster a livello di zona, la zona di Compute Engine contenente il cluster; per i cluster a livello di regione, la regione di Compute Engine contenente il cluster.
    • FIRST_CLUSTER_NAME: il nome del primo cluster.
  2. Registra il secondo cluster nel parco risorse. Per questo comando è necessario utilizzare il flag --gke-uri perché il secondo cluster non si trova nello stesso progetto del parco risorse. Puoi ottenere l'URI completo del cluster eseguendo gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME_2: un identificatore univoco per il cluster in questo parco risorse. Ad esempio, puoi utilizzare il nome del secondo cluster GKE.
    • FLEET_HOST_PROJ: l'ID progetto per il progetto host del parco risorse, identico al progetto host del VPC condiviso in questo scenario.
    • LOCATION: sostituisci LOCATION con:
      • alla zona Compute Engine del cluster se il cluster è un cluster di zona
      • alla regione di Compute Engine del cluster se il cluster è a livello di regione
    • SECOND_CLUSTER_PROJECT: il progetto contenente il secondo cluster.
    • SECOND_CLUSTER_NAME: il nome del secondo cluster.

Crea uno spazio dei nomi comune per i cluster

  1. Assicurati che ogni cluster disponga di uno spazio dei nomi con cui condividere i servizi. Se necessario, crea uno spazio dei nomi utilizzando il seguente comando in ogni cluster:

    kubectl create ns NAMESPACE
    

    Sostituisci NAMESPACE con un nome per lo spazio dei nomi.

Cluster in progetti di servizio VPC condiviso diversi

Questa sezione fornisce un esempio di configurazione MCS che coinvolge due cluster GKE esistenti, ciascuno in un diverso progetto di servizio VPC condiviso.

  • Entrambi i cluster utilizzano la stessa rete VPC condiviso in SHARED_VPC_HOST_PROJ.
  • Il primo cluster GKE VPC nativo FIRST_CLUSTER_NAME, con la federazione delle identità per GKE abilitata, è stato creato in FLEET_HOST_PROJ. Il progetto host del parco risorse è un progetto di servizio connesso a SHARED_VPC_HOST_PROJ in questo scenario.
  • Il secondo cluster GKE VPC nativo SECOND_CLUSTER_NAME, con la federazione delle identità per GKE abilitata, è stato creato in SECOND_CLUSTER_PROJ. In questo scenario, SECOND_CLUSTER_PROJ è anche un progetto di servizio collegato a SHARED_VPC_HOST_PROJ.

Abilita le API richieste

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

  1. Abilita l'API Cloud DNS:

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

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

  2. l'API GKE Hub (parco risorse). L'API GKE Hub deve essere abilitata solo nel progetto host del parco risorse FLEET_HOST_PROJ.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    L'abilitazione di questa API nel progetto host del parco risorse crea o garantisce che esista il seguente account di servizio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com.

  3. Abilita le API Traffic Director, Resource Manager e Service Discovery multi-cluster, nel progetto host del parco risorse e nel progetto del secondo cluster:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project=FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Abilita i servizi multi-cluster nel progetto host del parco risorse

  1. Abilita i servizi multi-cluster nel progetto host del parco risorse:

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

    L'abilitazione di servizi multi-cluster nel progetto host del parco risorse crea o garantisce l'esistenza del seguente account di servizio: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com.

Crea associazioni IAM

  1. Crea l'associazione IAM concedendo all'account di servizio GKE Hub del progetto host del parco risorse il ruolo Agente di servizio GKE per il progetto del secondo cluster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com" \
        --role roles/gkehub.serviceAgent
    
  2. Crea l'associazione IAM per concedere all'account di servizio MCS del progetto host del parco risorse il ruolo Agente di servizio MCS per il progetto del secondo cluster:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Crea l'associazione IAM in modo da concedere all'account di servizio MCS del progetto host del parco risorse il ruolo Agente di servizio MCS nel progetto host del VPC condiviso:

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd.iam.gserviceaccount.com" \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  4. Crea l'associazione IAM concedendo all'account di servizio MCS di ogni progetto il ruolo Utente di rete per il proprio progetto:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJ \
        --member "serviceAccount:FLEET_HOST_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    
    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:SECOND_CLUSTER_PROJ.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role roles/compute.networkViewer
    

    Poiché questo scenario utilizza la federazione di Workload Identity per GKE, l'account di servizio GKE per l'importazione MCS di ogni progetto deve avere il ruolo Utente di rete per il proprio progetto.

    Sostituisci quanto segue in base alle esigenze nei comandi precedenti:

    • SECOND_CLUSTER_PROJ: l'ID del progetto del secondo cluster.
    • SHARED_VPC_HOST_PROJ: l'ID del progetto host del VPC condiviso. In questo esempio, entrambi i cluster utilizzano la stessa rete VPC condivisa, ma nessuno dei due cluster si trova nel progetto host del VPC condiviso.
    • FLEET_HOST_PROJ: l'ID del progetto del primo cluster.
    • FLEET_HOST_PROJ_NUMBER: il numero del progetto host del parco risorse.

Registra i cluster nel parco risorse

  1. Registra il primo cluster nel parco risorse. Il flag --gke-cluster può essere utilizzato per questo comando perché il primo cluster si trova nello stesso progetto del parco risorse in cui viene registrato.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME_1: un identificatore univoco per il cluster in questo parco risorse. Ad esempio, puoi utilizzare il nome del primo cluster GKE.
    • FLEET_HOST_PROJ: l'ID progetto per il progetto host del parco risorse, identico al progetto host del VPC condiviso in questo scenario.
    • LOCATION: per i cluster a livello di zona, la zona di Compute Engine contenente il cluster; per i cluster a livello di regione, la regione di Compute Engine contenente il cluster.
    • FIRST_CLUSTER_NAME: il nome del primo cluster.
  2. Registra il secondo cluster nel parco risorse. Per questo comando è necessario utilizzare il flag --gke-uri perché il secondo cluster non si trova nello stesso progetto del parco risorse. Puoi ottenere l'URI completo del cluster eseguendo gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME_2: un identificatore univoco per il cluster in questo parco risorse. Ad esempio, puoi utilizzare il nome del secondo cluster GKE.
    • FLEET_HOST_PROJ: l'ID progetto per il progetto host del parco risorse, identico al progetto host del VPC condiviso in questo scenario.
    • LOCATION: sostituisci LOCATION con:
      • alla zona Compute Engine del cluster se il cluster è un cluster di zona
      • alla regione di Compute Engine del cluster se il cluster è a livello di regione
    • SECOND_CLUSTER_PROJECT: il progetto contenente il secondo cluster.
    • SECOND_CLUSTER_NAME: il nome del secondo cluster.

Crea uno spazio dei nomi comune per i cluster

  1. Assicurati che ogni cluster disponga di uno spazio dei nomi con cui condividere i servizi. Se necessario, crea uno spazio dei nomi utilizzando il seguente comando in ogni cluster:

    kubectl create ns NAMESPACE
    

    Sostituisci NAMESPACE con un nome per lo spazio dei nomi.

Passaggi successivi