Configurazione di cluster con VPC condiviso


Questa guida mostra come creare due cluster Google Kubernetes Engine (GKE) che utilizzano un VPC condiviso in progetti separati. Per informazioni generali sul networking GKE, consulta la panoramica della rete.

Panoramica

Con VPC condiviso, indichi un progetto come progetto host e puoi collegare altri progetti, denominati progetti di servizio, al progetto host. Puoi creare reti, subnet, intervalli di indirizzi secondari, regole firewall e altre risorse di rete nel progetto host. Successivamente, condividi le subnet selezionate, inclusi gli intervalli secondari, con i progetti di servizio. I componenti in esecuzione in un progetto di servizio possono utilizzare il VPC condiviso per comunicare con i componenti in esecuzione negli altri progetti di servizio.

Puoi utilizzare il VPC condiviso con i cluster Autopilot e con i cluster Standard a livello di zona e a livello di regione.

I cluster standard che utilizzano il VPC condiviso non possono utilizzare reti legacy e devono avere abilitato il routing del traffico nativo VPC. I cluster Autopilot consentono sempre il routing del traffico VPC nativo.

Puoi configurare il VPC condiviso quando crei un nuovo cluster. GKE non supporta la conversione dei cluster esistenti nel modello VPC condiviso.

Con il VPC condiviso, si applicano determinate quote e limiti. Ad esempio, esiste una quota per il numero di reti in un progetto e un limite al numero di progetti di servizio che possono essere associati a un progetto host. Per maggiori dettagli, consulta Quote e limiti.

Informazioni sugli esempi

Gli esempi in questa guida configurano l'infrastruttura per un'applicazione web a due livelli, come descritto nella Panoramica del VPC condiviso.

Prima di iniziare

Prima di iniziare a configurare un cluster con VPC condiviso:

Prima di eseguire gli esercizi di questa guida:

  • Scegli uno dei tuoi progetti come progetto host.
  • Scegli due dei tuoi progetti come progetti di servizio.

Ogni progetto ha un nome, un ID e un numero. In alcuni casi, il nome e l'ID sono uguali. Questa guida utilizza i seguenti nomi descrittivi e segnaposto per fare riferimento ai tuoi progetti:

Nome descrittivo Segnaposto dell'ID progetto
Segnaposto del progetto numero
Il tuo progetto host HOST_PROJECT_ID HOST_PROJECT_NUM
Il tuo primo progetto di servizio SERVICE_PROJECT_1_ID SERVICE_PROJECT_1_NUM
Il tuo secondo progetto di servizio SERVICE_PROJECT_2_ID SERVICE_PROJECT_2_NUM

Trovare gli ID e i numeri di progetto

Puoi trovare l'ID e i numeri del progetto utilizzando gcloud CLI o la console Google Cloud.

Console

  1. Vai alla home page della console Google Cloud.

    Vai alla home page

  2. Nel selettore del progetto, scegli quello che hai scelto come progetto host.

  3. In Informazioni sul progetto, puoi visualizzare il nome, l'ID e il numero del progetto. Prendi nota dell'ID e del numero per utilizzarli in seguito.

  4. Esegui la stessa operazione per ciascuno dei progetti che hai scelto come progetti di servizio.

gcloud

Elenca i tuoi progetti con il comando seguente:

gcloud projects list

L'output mostra i nomi, gli ID e i numeri dei progetti. Prendi nota dell'ID e del numero per un secondo momento:

PROJECT_ID        NAME        PROJECT_NUMBER
host-123          host        1027xxxxxxxx
srv-1-456         srv-1       4964xxxxxxxx
srv-2-789         srv-2       4559xxxxxxxx

Abilitazione dell'API GKE nei tuoi progetti

Prima di continuare con gli esercizi in questa guida, assicurati che l'API GKE sia abilitata in tutti e tre i tuoi progetti. L'abilitazione dell'API in un progetto crea un account di servizio GKE per il progetto. Per eseguire le attività rimanenti in questa guida, ogni progetto deve avere un account di servizio GKE.

Puoi abilitare l'API GKE utilizzando la console Google Cloud o Google Cloud CLI.

Console

  1. Vai alla pagina API e servizi nella console Google Cloud.

    Vai ad API e servizi

  2. Nel selettore del progetto, scegli quello che hai scelto come progetto host.

  3. Se l'API Kubernetes Engine è nell'elenco delle API, significa che è già abilitata e non devi fare nulla. Se non è nell'elenco, fai clic su Abilita API e servizi. Cerca Kubernetes Engine API. Fai clic sulla scheda API Kubernetes Engine e poi su Abilita.

  4. Ripeti questi passaggi per ciascun progetto che hai scelto come progetto di servizio. Ogni operazione potrebbe richiedere del tempo.

gcloud

Abilita l'API GKE per i tuoi tre progetti. Il completamento di ogni operazione può richiedere del tempo:

gcloud services enable container.googleapis.com --project HOST_PROJECT_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_1_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_2_ID

Creazione di una rete e di due subnet

In questa sezione dovrai eseguire le seguenti attività:

  1. Nel progetto host, crea una rete denominata shared-net.
  2. Crea due subnet denominate tier-1 e tier-2.
  3. Per ogni subnet, crea due intervalli di indirizzi secondari: uno per i servizi e uno per i pod.

Console

  1. Vai alla pagina Reti VPC nella console Google Cloud.

    Vai a Reti VPC

  2. Nel selettore del progetto, scegli il progetto host.

  3. Fai clic su Crea rete VPC.

  4. In Nome, inserisci shared-net.

  5. In Modalità di creazione subnet, seleziona Personalizzata.

  6. Nella casella Nuova subnet, in Nome, inserisci tier-1.

  7. In Regione, seleziona una regione.

  8. In Tipo di stack IP, seleziona IPv4 (stack singolo).

  9. In Intervallo IPv4, inserisci 10.0.4.0/22.

  10. Fai clic su Crea intervallo IPv4 secondario. In Nome intervallo di subnet, inserisci tier-1-services e per Intervallo IPv4 secondario, inserisci 10.0.32.0/20.

  11. Fai clic su Aggiungi intervallo IP. In Nome intervallo di subnet, inserisci tier-1-pods e per Intervallo IPv4 secondario, inserisci 10.4.0.0/14.

  12. Fai clic su Aggiungi subnet.

  13. In Nome, inserisci tier-2.

  14. In Regione, seleziona la stessa regione che hai selezionato per la subnet precedente.

  15. In Intervallo IPv4, inserisci 172.16.4.0/22.

  16. Fai clic su Crea intervallo IPv4 secondario. In Nome intervallo di subnet, inserisci tier-2-services e per Intervallo IPv4 secondario, inserisci 172.16.16.0/20.

  17. Fai clic su Aggiungi intervallo IP. In Nome intervallo di subnet, inserisci tier-2-pods e per Intervallo IPv4 secondario, inserisci 172.20.0.0/14.

  18. Fai clic su Crea.

gcloud

Nel progetto host, crea una rete denominata shared-net:

gcloud compute networks create shared-net \
    --subnet-mode custom \
    --project HOST_PROJECT_ID

Nella nuova rete, crea una subnet denominata tier-1:

gcloud compute networks subnets create tier-1 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --range 10.0.4.0/22 \
    --region COMPUTE_REGION \
    --secondary-range tier-1-services=10.0.32.0/20,tier-1-pods=10.4.0.0/14

Crea un'altra subnet denominata tier-2:

gcloud compute networks subnets create tier-2 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --range 172.16.4.0/22 \
    --region COMPUTE_REGION \
    --secondary-range tier-2-services=172.16.16.0/20,tier-2-pods=172.20.0.0/14

Sostituisci COMPUTE_REGION con una regione di Compute Engine.

Determinare i nomi degli account di servizio nei progetti di servizio

Hai due progetti di servizio, ognuno dei quali ha diversi account di servizio. Questa sezione riguarda i tuoi account di servizio GKE e i tuoi account di servizio delle API di Google. I nomi di questi account di servizio ti servono per la prossima sezione.

Nella tabella seguente sono elencati i nomi degli account di servizio delle API GKE e Google nei due progetti di servizio:

Tipo di account di servizio Nome account di servizio
GKE service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com
API di Google SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com
SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com

Abilitazione del VPC condiviso e concessione dei ruoli

Per eseguire le attività in questa sezione, assicurati che la tua organizzazione abbia definito un ruolo di Amministratore VPC condiviso.

In questa sezione dovrai eseguire le seguenti attività:

  1. Nel progetto host, abilita il VPC condiviso.
  2. Associa i due progetti di servizio al progetto host.
  3. Concedi i ruoli IAM appropriati agli account di servizio appartenenti ai tuoi progetti di servizio:
    • Nel tuo primo progetto di servizio, concedi a due account di servizio il ruolo Compute Network User nella subnet tier-1 del progetto host.
    • Nel secondo progetto di servizio, concedi a due account di servizio il ruolo Compute Network User nella subnet tier-2 del progetto host.

Console

Esegui i seguenti passaggi per abilitare il VPC condiviso, collegare i progetti di servizio e concedere i ruoli:

  1. Vai alla pagina VPC condiviso nella console Google Cloud.

    Vai a VPC condiviso

  2. Nel selettore del progetto, scegli il progetto host.

  3. Fai clic su Configura un VPC condiviso. Viene visualizzata la schermata Abilita progetto host.

  4. Fai clic su Salva e continua. Viene visualizzata la pagina Seleziona subnet.

  5. In Modalità di condivisione, seleziona Singole subnet.

  6. In Subnet da condividere, seleziona tier-1 e tier-2. Deseleziona tutte le altre caselle di controllo.

  7. Fai clic su Continua. Viene visualizzata la pagina Concedi autorizzazioni.

  8. In Collega progetti di servizio, controlla il tuo primo progetto di servizio e il secondo progetto di servizio. Deseleziona tutte le altre caselle di controllo in Associa progetti di servizio.

  9. In Accesso a Kubernetes Engine, seleziona Abilitato.

  10. Fai clic su Salva. Viene visualizzata una nuova pagina.

  11. In Autorizzazioni per singole subnet, seleziona livello 1.

  12. Nel riquadro a destra, elimina tutti gli account di servizio appartenenti al secondo progetto di servizio. Ciò significa che elimina tutti gli account di servizio che contengono SERVICE_PROJECT_2_NUM.

  13. Nel riquadro a destra, cerca i nomi degli account di servizio Kubernetes Engine e API di Google appartenenti al tuo primo progetto di servizio. Vuoi vedere entrambi i nomi degli account di servizio nell'elenco. Se uno di questi non è presente nell'elenco, inserisci il nome dell'account di servizio in Aggiungi membri e fai clic su Aggiungi.

  14. Nel riquadro centrale, in Autorizzazioni di singole subnet, seleziona tier-2 e deseleziona tier-1.

  15. Nel riquadro a destra, elimina tutti gli account di servizio appartenenti al tuo primo progetto di servizio. Ciò significa che elimina tutti gli account di servizio che contengono SERVICE_PROJECT_1_NUM.

  16. Nel riquadro a destra, cerca i nomi degli account di servizio Kubernetes Engine e API di Google appartenenti al tuo secondo progetto di servizio. Vuoi vedere entrambi i nomi degli account di servizio nell'elenco. Se uno di questi non è presente nell'elenco, inserisci il nome dell'account di servizio in Aggiungi membri e fai clic su Aggiungi.

gcloud

  1. Abilita il VPC condiviso nel progetto host. Il comando che utilizzi dipende dal ruolo amministrativo richiesto.

    Se hai il ruolo Amministratore VPC condiviso a livello di organizzazione:

    gcloud compute shared-vpc enable HOST_PROJECT_ID
    

    Se hai il ruolo Amministratore VPC condiviso a livello di cartella:

    gcloud beta compute shared-vpc enable HOST_PROJECT_ID
    
  2. Associa il tuo primo progetto di servizio al progetto host:

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_1_ID \
        --host-project HOST_PROJECT_ID
    
  3. Associa il secondo progetto di servizio al progetto host:

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_2_ID \
        --host-project HOST_PROJECT_ID
    
  4. Ottieni il criterio IAM per la subnet tier-1:

    gcloud compute networks subnets get-iam-policy tier-1 \
       --project HOST_PROJECT_ID \
       --region COMPUTE_REGION
    

    L'output contiene un campo etag. Prendi nota del valore etag.

  5. Crea un file denominato tier-1-policy.yaml con i seguenti contenuti:

    bindings:
    - members:
      - serviceAccount:SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com
      - serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com
      role: roles/compute.networkUser
    etag: ETAG_STRING
    

    Sostituisci ETAG_STRING con il valore etag che hai annotato in precedenza.

  6. Imposta il criterio IAM per la subnet tier-1:

    gcloud compute networks subnets set-iam-policy tier-1 \
        tier-1-policy.yaml \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    
  7. Ottieni il criterio IAM per la subnet tier-2:

    gcloud compute networks subnets get-iam-policy tier-2 \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    

    L'output contiene un campo etag. Prendi nota del valore etag.

  8. Crea un file denominato tier-2-policy.yaml con i seguenti contenuti:

    bindings:
    - members:
      - serviceAccount:SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com
      - serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com
      role: roles/compute.networkUser
    etag: ETAG_STRING
    

    Sostituisci ETAG_STRING con il valore etag che hai annotato in precedenza.

  9. Imposta il criterio IAM per la subnet tier-2:

    gcloud compute networks subnets set-iam-policy tier-2 \
        tier-2-policy.yaml \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    

Gestione delle risorse firewall

Se vuoi che un cluster GKE in un progetto di servizio crei e gestisca le risorse firewall nel progetto host, all'account di servizio GKE del progetto di servizio devono essere concesse le autorizzazioni IAM appropriate utilizzando una delle seguenti strategie:

  • Concedi all'account di servizio GKE del progetto di servizio il ruolo Compute Security Admin al progetto host.

Console

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Seleziona il progetto host.

  3. Fai clic su Concedi l'accesso, poi inserisci l'entità dell'account di servizio GKE del progetto di servizio, service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com.

  4. Seleziona il ruolo Compute Security Admin dall'elenco a discesa.

  5. Fai clic su Salva.

gcloud

Concedi all'account di servizio GKE del progetto di servizio il ruolo Compute Security Admin all'interno del progetto host:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com \
    --role=roles/compute.securityAdmin

Sostituisci quanto segue:

  • HOST_PROJECT_ID: ID progetto host VPC condiviso
  • SERVICE_PROJECT_NUM: l'ID del progetto di servizio contenente l'account di servizio GKE
  • Per un approccio più granulare, crea un ruolo IAM personalizzato che includa solo le seguenti autorizzazioni: compute.networks.updatePolicy, compute.firewalls.list, compute.firewalls.get, compute.firewalls.create, compute.firewalls.update e compute.firewalls.delete. Concedi all'account di servizio GKE del progetto di servizio quel ruolo personalizzato al progetto host.

Console

Crea un ruolo personalizzato all'interno del progetto host contenente le autorizzazioni IAM menzionate in precedenza:

  1. Nella console Google Cloud, vai alla pagina Ruoli.

    Vai alla pagina Ruoli

  2. Utilizzando l'elenco a discesa nella parte superiore della pagina, seleziona il progetto host.

  3. Fai clic su Crea ruolo.

  4. Inserisci un Titolo, una Descrizione, un ID e una Fase di lancio del ruolo per il ruolo. Il nome del ruolo non può essere modificato dopo la creazione del ruolo.

  5. Fai clic su Aggiungi autorizzazioni.

  6. Filtra per compute.networks e seleziona le autorizzazioni IAM menzionate in precedenza.

  7. Dopo aver selezionato tutte le autorizzazioni richieste, fai clic su Aggiungi.

  8. Fai clic su Crea.

Concedi all'account di servizio GKE del progetto di servizio il ruolo personalizzato appena creato all'interno del progetto host:

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Seleziona il progetto host.

  3. Fai clic su Concedi accesso, poi inserisci l'entità dell'account di servizio GKE del progetto di servizio, service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com.

  4. Filtra in base al Titolo del ruolo personalizzato appena creato e selezionalo.

  5. Fai clic su Salva.

gcloud

  1. Crea un ruolo personalizzato all'interno del progetto host contenente le autorizzazioni IAM menzionate in precedenza:

    gcloud iam roles create ROLE_ID \
        --title="ROLE_TITLE" \
        --description="ROLE_DESCRIPTION" \
        --stage=LAUNCH_STAGE \
        --permissions=compute.networks.updatePolicy,compute.firewalls.list,compute.firewalls.get,compute.firewalls.create,compute.firewalls.update,compute.firewalls.delete \
        --project=HOST_PROJECT_ID
    
  2. Concedi all'account di servizio GKE del progetto di servizio il ruolo personalizzato appena creato all'interno del progetto host:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role=projects/HOST_PROJECT_ID/roles/ROLE_ID
    

    Sostituisci quanto segue:

    • ROLE_ID: il nome del ruolo, ad esempio gkeFirewallAdmin
    • ROLE_TITLE: un titolo descrittivo per il ruolo, ad esempio GKE Firewall Admin
    • ROLE_DESCRIPTION: una breve descrizione del ruolo, ad esempio GKE service account FW permissions
    • LAUNCH_STAGE: la fase di lancio del ruolo nel suo ciclo di vita, ad esempio ALPHA, BETA o GA
    • HOST_PROJECT_ID: ID progetto host VPC condiviso
    • SERVICE_PROJECT_NUM: l'ID del progetto di servizio contenente l'account di servizio GKE

Se hai cluster in più progetti di servizio, devi scegliere una delle strategie e ripeterla per l'account di servizio GKE di ogni progetto di servizio.

Riepilogo dei ruoli concessi nelle subnet

Ecco un riepilogo dei ruoli concessi nelle subnet:

Account di servizio Ruolo Subnet
service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com Utente di rete Compute tier-1
SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com Utente di rete Compute tier-1
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com Utente di rete Compute tier-2
SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com Utente di rete Compute tier-2

Accesso a Kubernetes Engine

Quando colleghi un progetto di servizio, l'abilitazione dell'accesso a Kubernetes Engine concede all'account di servizio GKE del progetto di servizio le autorizzazioni per eseguire operazioni di gestione della rete nel progetto host.

Se un progetto di servizio è stato collegato senza abilitare l'accesso a Kubernetes Engine, supponendo che l'API Kubernetes Engine sia già stata abilitata sia nel progetto host che nel progetto di servizio, puoi assegnare manualmente le autorizzazioni all'account di servizio GKE del progetto di servizio aggiungendo le seguenti associazioni di ruoli IAM nel progetto host:

Membro Ruolo Risorsa
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com Utente di rete Compute Una subnet specifica o l'intero progetto host
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com Utente agente di servizio host Account di servizio GKE nel progetto host

Concessione del ruolo Utente Agente di servizio host

L'account di servizio GKE di ogni progetto di servizio deve avere un'associazione per il ruolo Utente agente di servizio host nel progetto host. L'account di servizio GKE ha la forma seguente:

service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com

Dove SERVICE_PROJECT_NUM è il numero del progetto di servizio.

Questa associazione consente all'account di servizio GKE del progetto di servizio di eseguire operazioni di gestione della rete nel progetto host, come se fosse l'account di servizio GKE del progetto host. Questo ruolo può essere concesso solo all'account di servizio GKE di un progetto di servizio.

Console

Se utilizzi la console Google Cloud, non è necessario concedere esplicitamente il ruolo Utente agente di servizio host. Questa operazione è stata eseguita automaticamente quando hai utilizzato la console Google Cloud per collegare i progetti di servizio al progetto host.

gcloud

  1. Per il tuo primo progetto, concedi il ruolo Utente agente di servizio host all'account di servizio GKE del progetto. Questo ruolo viene concesso nel progetto host:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    
  2. Per il secondo progetto, concedi il ruolo Utente agente di servizio host all'account di servizio GKE del progetto. Questo ruolo viene concesso nel progetto host:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    

Verifica delle subnet utilizzabili e degli intervalli di indirizzi IP secondari

Quando crei un cluster, devi specificare una subnet e gli intervalli di indirizzi IP secondari da utilizzare per i pod e i servizi del cluster. Esistono diversi motivi per cui un intervallo di indirizzi IP potrebbe non essere disponibile per l'uso. Se stai creando il cluster con la console Google Cloud o gcloud CLI, devi specificare intervalli di indirizzi IP utilizzabili.

Un intervallo di indirizzi IP è utilizzabile per i servizi del nuovo cluster se l'intervallo non è già in uso. L'intervallo di indirizzi IP specificato per i pod del nuovo cluster può essere un intervallo inutilizzato o un intervallo condiviso con i pod negli altri cluster. Gli intervalli di indirizzi IP creati e gestiti da GKE non possono essere utilizzati dal tuo cluster.

Puoi elencare le subnet utilizzabili e gli intervalli di indirizzi IP secondari di un progetto utilizzando gcloud CLI.

gcloud

gcloud container subnets list-usable \
    --project SERVICE_PROJECT_ID \
    --network-project HOST_PROJECT_ID

Sostituisci SERVICE_PROJECT_ID con l'ID del progetto di servizio.

Se ometti l'opzione --project o --network-project, il comando gcloud CLI utilizza il progetto predefinito della tua configurazione attiva. Poiché il progetto host e il progetto di rete sono distinti, devi specificare uno o entrambi gli attributi --project e --network-project.

L'output è simile al seguente:

PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-2
RANGE: 172.16.4.0/22

SECONDARY_RANGE_NAME: tier-2-services
IP_CIDR_RANGE: 172.20.0.0/14
STATUS: usable for pods or services

SECONDARY_RANGE_NAME: tier-2-pods
IP_CIDR_RANGE: 172.16.16.0/20
STATUS: usable for pods or services

PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-1
RANGE: 10.0.4.0/22

SECONDARY_RANGE_NAME: tier-1-services
IP_CIDR_RANGE: 10.0.32.0/20
STATUS: usable for pods or services

SECONDARY_RANGE_NAME: tier-1-pods
IP_CIDR_RANGE: 10.4.0.0/14
STATUS: usable for pods or services

Il comando list-usable restituisce un elenco vuoto nelle seguenti situazioni:

  • Quando l'account di servizio Kubernetes Engine del progetto di servizio non dispone del ruolo Utente agente di servizio host per il progetto host.
  • Quando l'account di servizio Kubernetes Engine nel progetto host non esiste (ad esempio, se lo hai eliminato per errore).
  • Se l'API Kubernetes Engine non è abilitata nel progetto host, significa che manca l'account di servizio Kubernetes Engine nel progetto host.

Per ulteriori informazioni, consulta la sezione relativa alla risoluzione dei problemi.

Note sugli intervalli secondari

Puoi creare 30 intervalli secondari in una determinata subnet. Per ogni cluster, sono necessari due intervalli secondari: uno per i pod e uno per i servizi.

Creazione di un cluster nel primo progetto di servizio

Per creare un cluster nel tuo primo progetto di servizio, esegui questi passaggi utilizzando gcloud CLI o la console Google Cloud.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel selettore dei progetti, scegli il tuo primo progetto di servizio.

  3. Fai clic su Crea.

  4. Nella sezione Autopilot o Standard, fai clic su Configura.

  5. In Nome, inserisci tier-1-cluster.

  6. Nell'elenco a discesa Regione, seleziona la stessa regione che hai utilizzato per le subnet.

  7. Nel riquadro di navigazione, fai clic su Networking.

  8. Seleziona Reti condivise con me (dal progetto host).

  9. In corrispondenza di Rete, seleziona shared-net.

  10. In Subnet nodo, seleziona livello 1.

  11. Per Intervallo CIDR secondario pod, seleziona tier-1-pods.

  12. Per Intervallo CIDR secondario dei servizi, seleziona servizi-di livello 1.

  13. Fai clic su Crea.

  14. Al termine della creazione, fai clic su tier-1-cluster nell'elenco dei cluster.

  15. Nella pagina Dettagli del cluster, fai clic sulla scheda Nodi

  16. In Pool di nodi, fai clic sul nome del pool di nodi che vuoi ispezionare.

  17. In Gruppi di istanze, fai clic sul nome del gruppo di istanze che vuoi controllare. Ad esempio, gke-tier-1-cluster-default-pool-5c5add1f-grp.

  18. Nell'elenco delle istanze, verifica che gli indirizzi IP interni dei nodi rientrino nell'intervallo principale della subnet di livello 1: 10.0.4.0/22.

gcloud

Crea un cluster denominato tier-1-cluster nel tuo primo progetto di servizio:

gcloud container clusters create-auto tier-1-cluster \
    --project=SERVICE_PROJECT_1_ID \
    --location=COMPUTE_REGION \
    --network=projects/HOST_PROJECT_ID/global/networks/shared-net \
    --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-1 \
    --cluster-secondary-range-name=tier-1-pods \
    --services-secondary-range-name=tier-1-services

Al termine della creazione, verifica che i nodi del cluster rientrino nell'intervallo principale della subnet di livello 1: 10.0.4.0/22.

gcloud compute instances list --project SERVICE_PROJECT_1_ID

L'output mostra gli indirizzi IP interni dei nodi:

NAME                    ZONE           ... INTERNAL_IP
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.2
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.3
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.4

Creazione di un cluster nel secondo progetto di servizio

Per creare un cluster nel secondo progetto di servizio, esegui questi passaggi utilizzando gcloud CLI o la console Google Cloud.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel selettore dei progetti, scegli il secondo progetto di servizio.

  3. Fai clic su Crea.

  4. Nella sezione Standard o Autopilot, fai clic su Configura.

  5. In Nome, inserisci tier-2-cluster.

  6. Nell'elenco a discesa Regione, seleziona la stessa regione che hai utilizzato per le subnet.

  7. Nel riquadro di navigazione, fai clic su Networking.

  8. In corrispondenza di Rete, seleziona shared-net.

  9. In Subnet del nodo, seleziona il livello 2.

  10. Per Intervallo CIDR secondario pod, seleziona tier-2-pods.

  11. In Intervallo CIDR secondario dei servizi, seleziona servizi-di livello 2.

  12. Fai clic su Crea.

  13. Al termine della creazione, fai clic su cluster-2-cluster nell'elenco dei cluster.

  14. Nella pagina Dettagli del cluster, fai clic sulla scheda Nodi

  15. In Pool di nodi, fai clic sul nome del pool di nodi che vuoi ispezionare.

  16. In Gruppi di istanze, fai clic sul nome del gruppo di istanze che vuoi controllare. Ad esempio, gke-tier-2-cluster-default-pool-5c5add1f-grp.

  17. Nell'elenco delle istanze, verifica che gli indirizzi IP interni dei nodi rientrino nell'intervallo principale della subnet di livello 2: 172.16.4.0/22.

gcloud

Crea un cluster denominato tier-2-cluster nel tuo secondo progetto di servizio:

gcloud container clusters create-auto tier-2-cluster \
    --project=SERVICE_PROJECT_2_ID \
    --location=COMPUTE_REGION \
    --network=projects/HOST_PROJECT_ID/global/networks/shared-net \
    --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-2 \
    --cluster-secondary-range-name=tier-2-pods \
    --services-secondary-range-name=tier-2-services

Al termine della creazione, verifica che i nodi del cluster rientrino nell'intervallo principale della subnet di livello 2: 172.16.4.0/22.

gcloud compute instances list --project SERVICE_PROJECT_2_ID

L'output mostra gli indirizzi IP interni dei nodi:

NAME                    ZONE           ... INTERNAL_IP
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.2
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.3
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.4

Creazione delle regole firewall

Per consentire il traffico nella rete e tra i cluster all'interno della rete, devi creare firewall. Le seguenti sezioni mostrano come creare e aggiornare le regole firewall:

Creazione di una regola firewall per abilitare la connessione SSH a un nodo

Nel progetto host, crea una regola firewall per la rete shared-net. Consenti al traffico di entrare sulla porta TCP 22, in modo da connetterti ai nodi del cluster tramite SSH.

Console

  1. Vai alla pagina Firewall nella console Google Cloud.

    Vai a Firewall

  2. Nel selettore del progetto, scegli il progetto host.

  3. Dal menu Networking VPC, fai clic su Crea regola firewall.

  4. In Nome, inserisci my-shared-net-rule.

  5. In corrispondenza di Rete, seleziona shared-net.

  6. Per Direzione del traffico, seleziona In entrata.

  7. Per Azione in corrispondenza della corrispondenza, seleziona Consenti.

  8. In Destinazioni, seleziona Tutte le istanze nella rete.

  9. In Filtro di origine, seleziona Intervalli IP.

  10. In Intervalli IP di origine, inserisci 0.0.0.0/0.

  11. In Protocolli e porte, seleziona Protocolli e porte specificati. Inserisci tcp:22 nella casella.

  12. Fai clic su Crea.

gcloud

Crea una regola firewall per la tua rete condivisa:

gcloud compute firewall-rules create my-shared-net-rule \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --direction INGRESS \
    --allow tcp:22

Connessione a un nodo tramite SSH

Dopo aver creato il firewall che consente il traffico in entrata sulla porta TCP 22, connettiti al nodo tramite SSH.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel selettore dei progetti, scegli il tuo primo progetto di servizio.

  3. Fai clic su cluster-1-cluster.

  4. Nella pagina Dettagli cluster, fai clic sulla scheda Nodi.

  5. In Pool di nodi, fai clic sul nome del tuo pool di nodi.

  6. In Gruppi di istanze, fai clic sul nome del gruppo di istanze. Ad esempio, gke-tier-1-cluster-default-pool-faf87d48-grp.

  7. Nell'elenco delle istanze, prendi nota degli indirizzi IP interni dei nodi. Questi indirizzi sono compresi nell'intervallo 10.0.4.0/22.

  8. Per uno dei tuoi nodi, fai clic su SSH. L'operazione riesce perché SSH utilizza la porta TCP 22, consentita dalla regola firewall.

gcloud

Elenca i nodi nel tuo primo progetto di servizio:

gcloud compute instances list --project SERVICE_PROJECT_1_ID

L'output include i nomi dei nodi nel cluster:

NAME                                           ...
gke-tier-1-cluster-default-pool-faf87d48-3mf8  ...
gke-tier-1-cluster-default-pool-faf87d48-q17k  ...
gke-tier-1-cluster-default-pool-faf87d48-x9rk  ...

Connettiti a uno dei tuoi nodi tramite SSH:

gcloud compute ssh NODE_NAME \
    --project SERVICE_PROJECT_1_ID \
    --zone COMPUTE_ZONE

Sostituisci quanto segue:

  • NODE_NAME: il nome di uno dei tuoi nodi.
  • COMPUTE_ZONE: il nome di una zona di Compute Engine all'interno della regione.

Aggiornamento della regola firewall per eseguire il ping tra i nodi

  1. Nella finestra della riga di comando di SSH, avvia gli strumenti CoreOS:

    /usr/bin/toolbox
    
  2. Nella shell della casella degli strumenti, invia un ping a uno degli altri nodi nello stesso cluster. Ad esempio:

    ping 10.0.4.4
    

    Il comando ping ha esito positivo, perché il tuo nodo e l'altro nodo sono entrambi compresi nell'intervallo 10.0.4.0/22.

  3. Ora prova a inviare un ping a uno dei nodi nel cluster nell'altro progetto di servizio. Ad esempio:

    ping 172.16.4.3
    

    Questa volta il comando ping non riesce perché la regola firewall non consente il traffico ICMP (Internet Control Message Protocol).

  4. Aggiorna la regola firewall per consentire l'ICMP nel normale prompt dei comandi, non nella shell degli strumenti:

    gcloud compute firewall-rules update my-shared-net-rule \
        --project HOST_PROJECT_ID \
        --allow tcp:22,icmp
    
  5. Nella shell della casella degli strumenti, esegui di nuovo il ping del nodo. Ad esempio:

    ping 172.16.4.3
    

    Questa volta il comando ping ha esito positivo.

Creazione di regole firewall aggiuntive

Puoi creare regole firewall aggiuntive per consentire la comunicazione tra nodi, pod e servizi nei tuoi cluster.

Ad esempio, la seguente regola consente al traffico di entrare da qualsiasi nodo, pod o servizio in tier-1-cluster su qualsiasi porta TCP o UDP:

gcloud compute firewall-rules create my-shared-net-rule-2 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --allow tcp,udp \
    --direction INGRESS \
    --source-ranges 10.0.4.0/22,10.4.0.0/14,10.0.32.0/20

La seguente regola consente al traffico di entrare da qualsiasi nodo, pod o servizio in tier-2-cluster su qualsiasi porta TCP o UDP:

gcloud compute firewall-rules create my-shared-net-rule-3 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --allow tcp,udp \
    --direction INGRESS \
    --source-ranges 172.16.4.0/22,172.20.0.0/14,172.16.16.0/20

Kubernetes tenterà anche di creare e gestire le risorse firewall quando necessario, ad esempio quando crei un servizio di bilanciamento del carico. Se Kubernetes non riesce a modificare le regole del firewall a causa di un problema di autorizzazione, verrà generato un evento Kubernetes che ti aiuterà ad apportare le modifiche.

Se vuoi concedere a Kubernetes l'autorizzazione per modificare le regole firewall, consulta Gestione delle risorse firewall.

Per i bilanciatori del carico Ingress, se Kubernetes non può modificare le regole firewall a causa di autorizzazioni insufficienti, viene emesso un evento firewallXPNError a intervalli di qualche minuto. In GLBC 1.4 e versioni successive, puoi disattivare l'evento firewallXPNError aggiungendo l'annotazione networking.gke.io/suppress-firewall-xpn-error: "true" alla risorsa in entrata. Puoi sempre rimuovere questa annotazione per riattivarla.

Creazione di un cluster privato in un VPC condiviso

Puoi utilizzare un VPC condiviso con cluster privati.

Devi concedere le seguenti autorizzazioni nel progetto host, all'account utente o all'account di servizio, utilizzato per creare il cluster:

  • compute.networks.get

  • compute.networks.updatePeering

Devi inoltre assicurarti che l'intervallo di indirizzi IP del piano di controllo non si sovrapponga ad altri intervalli riservati nella rete condivisa.

Per i cluster privati creati prima del 15 gennaio 2020, il numero massimo di cluster GKE privati che puoi avere per ogni rete VPC è limitato al numero di connessioni in peering da una singola rete VPC. I nuovi cluster privati riutilizzano le connessioni di peering di rete VPC, eliminando così questa limitazione. Per abilitare il riutilizzo del peering di rete VPC su cluster privati meno recenti, puoi eliminare un cluster e ricrearlo. L'upgrade di un cluster non comporta il riutilizzo di una connessione di peering di rete VPC esistente.

In questa sezione creerai un cluster nativo di VPC denominato private-cluster-vpc in una rete VPC condivisa predefinita.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Nella sezione Autopilot o Standard, fai clic su Configura.

  4. In Nome, inserisci private-cluster-vpc.

  5. Nel riquadro di navigazione, fai clic su Networking.

  6. Seleziona Cluster privato.

  7. (Facoltativo per Autopilot): imposta Intervallo IP del piano di controllo su 172.16.0.16/28.

  8. Nell'elenco a discesa Rete, seleziona la rete VPC che hai creato in precedenza.

  9. Nell'elenco a discesa Subnet nodo, seleziona la subnet condivisa che hai creato in precedenza.

  10. Configura il cluster in base alle tue esigenze.

  11. Fai clic su Crea.

gcloud

Esegui questo comando per creare un cluster denominato private-cluster-vpc in un VPC condiviso predefinito:

gcloud container clusters create-auto private-cluster-vpc \
    --project=PROJECT_ID \
    --location=COMPUTE_REGION \
    --network=projects/HOST_PROJECT/global/networks/shared-net \
    --subnetwork=SHARED_SUBNETWORK \
    --cluster-secondary-range-name=tier-1-pods \
    --services-secondary-range-name=tier-1-services \
    --enable-private-nodes \
    --master-ipv4-cidr=172.16.0.0/28

Prenotazione degli indirizzi IP

Puoi prenotare indirizzi IP interni ed esterni per i cluster del VPC condiviso. Assicurati che gli indirizzi IP siano prenotati nel progetto di servizio.

Per gli indirizzi IP interni, devi fornire la subnet a cui appartiene l'indirizzo IP. Per prenotare un indirizzo IP tra progetti, utilizza l'URL completo della risorsa per identificare la subnet.

Puoi utilizzare il comando seguente in Google Cloud CLI per prenotare un indirizzo IP interno:

gcloud compute addresses create RESERVED_IP_NAME \
    --region=COMPUTE_REGION \
    --subnet=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNETWORK_NAME \
    --addresses=IP_ADDRESS \
    --project=SERVICE_PROJECT_ID

Per chiamare questo comando, devi aver aggiunto l'autorizzazione compute.subnetworks.use alla subnet. Puoi concedere al chiamante un ruolo compute.networkUser nella subnet oppure concedere al chiamante un ruolo personalizzato con l'autorizzazione compute.subnetworks.use a livello di progetto.

esegui la pulizia

Dopo aver completato gli esercizi riportati in questa guida, esegui le attività seguenti per rimuovere le risorse ed evitare addebiti indesiderati sul tuo account:

Eliminazione dei cluster

Elimina i due cluster che hai creato.

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nel selettore dei progetti, scegli il tuo primo progetto di servizio.

  3. Seleziona il cluster-livello-1 e fai clic su Elimina.

  4. Nel selettore dei progetti, scegli il secondo progetto di servizio.

  5. Seleziona il cluster-livello 2 e fai clic su Elimina.

gcloud

gcloud container clusters delete tier-1-cluster \
    --project SERVICE_PROJECT_1_ID \
    --zone COMPUTE_ZONE

gcloud container clusters delete tier-2-cluster \
    --project SERVICE_PROJECT_2_ID \
    --zone COMPUTE_ZONE

Disattivazione di un VPC condiviso

Disabilita il VPC condiviso nel progetto host.

Console

  1. Vai alla pagina VPC condiviso nella console Google Cloud.

    Vai a VPC condiviso

  2. Nel selettore del progetto, scegli il progetto host.

  3. Fai clic su Disabilita VPC condiviso.

  4. Inserisci HOST_PROJECT_ID nel campo e fai clic su Disattiva.

gcloud

gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_1_ID \
    --host-project HOST_PROJECT_ID

gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_2_ID \
    --host-project HOST_PROJECT_ID

gcloud compute shared-vpc disable HOST_PROJECT_ID

Eliminazione delle regole firewall in corso...

Rimuovi le regole firewall che hai creato.

Console

  1. Vai alla pagina Firewall nella console Google Cloud.

    Vai a Firewall

  2. Nel selettore del progetto, scegli il progetto host.

  3. Nell'elenco delle regole, seleziona my-shared-net-rule, my-shared-net-rule-2 e my-shared-net-rule-3.

  4. Fai clic su Elimina.

gcloud

Elimina le regole firewall:

gcloud compute firewall-rules delete \
    my-shared-net-rule \
    my-shared-net-rule-2 \
    my-shared-net-rule-3 \
    --project HOST_PROJECT_ID

Eliminazione della rete condivisa in corso...

Elimina la rete condivisa che hai creato.

Console

  1. Vai alla pagina Reti VPC nella console Google Cloud.

    Vai a Reti VPC

  2. Nel selettore del progetto, scegli il progetto host.

  3. Nell'elenco delle reti, seleziona shared-net.

  4. Fai clic su Elimina rete VPC.

gcloud

gcloud compute networks subnets delete tier-1 \
    --project HOST_PROJECT_ID \
    --region COMPUTE_REGION

gcloud compute networks subnets delete tier-2 \
    --project HOST_PROJECT_ID \
    --region COMPUTE_REGION

gcloud compute networks delete shared-net --project HOST_PROJECT_ID

Rimozione del ruolo Utente agente di servizio host

Rimuovi i ruoli utente dell'agente di servizio host dai due progetti di servizio.

Console

  1. Vai alla pagina IAM nella console Google Cloud.

    Vai a IAM

  2. Nel selettore del progetto, scegli il progetto host.

  3. Nell'elenco dei membri, seleziona la riga che mostra a service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com cui è stato concesso il ruolo Utente agente di servizio host di Kubernetes Engine.

  4. Seleziona la riga che mostra service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com a cui è stato concesso il ruolo Utente agente di servizio host di Kubernetes Engine.

  5. Fai clic su Rimuovi accesso.

gcloud

  1. Rimuovi il ruolo Utente agente di servizio host dall'account di servizio GKE del tuo primo progetto di servizio:

    gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    
  2. Rimuovi il ruolo Utente agente di servizio host dall'account di servizio GKE del secondo progetto di servizio:

    gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    

Risoluzione dei problemi

Autorizzazione negata

Sintomo:

Failed to get metadata from network project. GCE_PERMISSION_DENIED: Google
Compute Engine: Required 'compute.projects.get' permission for
'projects/HOST_PROJECT_ID
Possibili motivi:

  • L'API Kubernetes Engine non è stata abilitata nel progetto host.

  • L'account di servizio GKE del progetto host non esiste. Ad esempio, potrebbe essere stata eliminata.

  • L'account di servizio GKE del progetto host non dispone del ruolo Agente di servizio Kubernetes Engine (container.serviceAgent) nel progetto host. L'associazione potrebbe essere stata rimossa per errore.

  • L'account di servizio GKE del progetto di servizio non dispone del ruolo Utente agente di servizio host nel progetto host.

Per risolvere il problema: Stabilisci se l'account di servizio GKE del progetto host esiste. In caso contrario:

  • Se l'API Kubernetes Engine non è abilitata nel progetto host, abilitala. Verrà creato l'account di servizio GKE del progetto host e verrà concesso all'account di servizio GKE del progetto host il ruolo Agente di servizio Kubernetes Engine (container.serviceAgent) nel progetto host.

  • Se l'API Kubernetes Engine è abilitata nel progetto host, significa che l'account di servizio GKE del progetto host è stato eliminato oppure non dispone del ruolo Agente di servizio Kubernetes Engine (container.serviceAgent) nel progetto host. Per ripristinare l'account di servizio GKE o l'associazione dei ruoli, devi disabilitare e poi abilitare nuovamente l'API Kubernetes Engine. Per ulteriori informazioni, consulta Risoluzione dei problemi di Google Kubernetes Engine.

Passaggi successivi