Questa guida mostra come creare due cluster Google Kubernetes Engine (GKE) in progetti separati che utilizzano un VPC condiviso. Per informazioni generali sul networking GKE, consulta la panoramica della rete.
Gli esempi in questa guida configurano l'infrastruttura per un'applicazione web a due livelli, come descritto in Panoramica del VPC condiviso.
Perché utilizzare il VPC condiviso con GKE
Con il VPC condiviso, designi un progetto come progetto host e puoi collegare altri progetti, chiamati progetti di servizio, al progetto host. Crea reti, subnet, intervalli di indirizzi secondari, regole firewall e altre risorse di rete nel progetto host. Poi 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 zonali e regionali.
I cluster standard che utilizzano il VPC condiviso non possono utilizzare reti legacy e devono avere il routing del traffico VPC nativo abilitato. I cluster Autopilot abilitano 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 al 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 collegati a un progetto host. Per maggiori dettagli, consulta Quote e limiti.
Prima di iniziare
Prima di iniziare a configurare un cluster con VPC condiviso:
- Assicurati di avere un'organizzazioneGoogle Cloud .
- Assicurati che la tua organizzazione abbia tre Google Cloud progetti.
- Assicurati di conoscere i concetti di VPC condiviso, inclusi i vari ruoli Identity and Access Management (IAM) utilizzati da VPC condiviso. Le attività descritte in questa guida devono essere eseguite da un amministratore VPC condiviso.
- Assicurati di conoscere eventuali vincoli dei criteri dell'organizzazione applicabili alla tua organizzazione, cartella o ai tuoi progetti. Un amministratore dei criteri dell'organizzazione potrebbe aver definito vincoli che limitano i progetti che possono essere progetti host con VPC condiviso o che limitano le subnet che possono essere condivise. Per saperne di più, consulta la pagina relativa ai vincoli delle policy dell'organizzazione.
Prima di eseguire gli esercizi di questa guida:
- Scegli uno dei tuoi progetti da utilizzare come progetto host.
- Scegli due dei tuoi progetti da utilizzare 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 ID progetto |
Segnaposto per il numero di progetto |
---|---|---|
Il tuo progetto host | HOST_PROJECT_ID |
HOST_PROJECT_NUM |
Il tuo primo service project | 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 dei progetti
Puoi trovare l'ID e i numeri del progetto utilizzando gcloud CLI o la console Google Cloud .
Console
Vai alla pagina Home della Google Cloud console.
Nel selettore dei progetti, seleziona il progetto che hai scelto come progetto host.
In Informazioni sul progetto, puoi visualizzare il nome, l'ID e il numero del progetto. Prendi nota dell'ID e del numero per un utilizzo futuro.
Fai lo stesso 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 tuoi progetti. Prendi nota dell'ID e del numero per un utilizzo futuro:
PROJECT_ID NAME PROJECT_NUMBER
host-123 host 1027xxxxxxxx
srv-1-456 srv-1 4964xxxxxxxx
srv-2-789 srv-2 4559xxxxxxxx
Abilita l'API GKE nei tuoi progetti
Prima di continuare con gli esercizi di questa guida, assicurati che l'API GKE sia abilitata in tutti e tre i progetti. L'attivazione dell'API in un progetto crea unaccount di serviziot GKE per il progetto. Per eseguire le attività rimanenti di questa guida, ogni progetto deve avere un account di serviziot GKE.
Puoi abilitare l'API GKE utilizzando la Google Cloud console o Google Cloud CLI.
Console
Vai alla pagina API e servizi nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto che hai scelto come progetto host.
Se
Kubernetes Engine API
è presente nell'elenco delle API, è già abilitata e non devi fare nulla. Se non è presente nell'elenco, fai clic su Abilita API e servizi. CercaKubernetes Engine API
. Fai clic sulla scheda API Kubernetes Engine e poi su Attiva.Ripeti questi passaggi per ogni progetto che hai scelto come progetto di servizio. Il completamento di ogni operazione potrebbe richiedere del tempo.
gcloud
Abilita l'API GKE per i tre progetti. Il completamento di ogni operazione potrebbe 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
Crea una rete e due subnet
In questa sezione, svolgerai le seguenti attività:
- Nel progetto host, crea una rete denominata
shared-net
. - Crea due subnet denominate
tier-1
etier-2
. - Per ogni subnet, crea due intervalli di indirizzi secondari: uno per i servizi e uno per i pod.
Console
Vai alla pagina Reti VPC nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto host.
Fai clic su add_box Crea rete VPC.
In Nome, inserisci
shared-net
.In Modalità di creazione subnet, seleziona Personalizzata.
Nella casella Nuova subnet, in Nome, inserisci
tier-1
.In Regione, seleziona una regione.
Nella sezione Tipo di stack IP, seleziona IPv4 (stack singolo).
In Intervallo IPv4, inserisci
10.0.4.0/22
.Fai clic su Crea intervallo IPv4 secondario. In Nome intervallo di subnet, inserisci
tier-1-services
e in Intervallo IPv4 secondario, inserisci10.0.32.0/20
.Fai clic su Aggiungi intervallo IP. In Nome intervallo di subnet, inserisci
tier-1-pods
e in Intervallo IPv4 secondario, inserisci10.4.0.0/14
.Fai clic su Aggiungi subnet.
In Nome, inserisci
tier-2
.Per Regione, seleziona la stessa regione che hai selezionato per la subnet precedente.
In Intervallo IPv4, inserisci
172.16.4.0/22
.Fai clic su Crea intervallo IPv4 secondario. In Nome intervallo di subnet, inserisci
tier-2-services
e in Intervallo IPv4 secondario, inserisci172.16.16.0/20
.Fai clic su Aggiungi intervallo IP. In Nome intervallo di subnet, inserisci
tier-2-pods
e in Intervallo IPv4 secondario, inserisci172.20.0.0/14
.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 dei service account nei progetti di servizio
Hai due progetti di servizio, ognuno dei quali ha diversi service account. Questa sezione riguarda i tuoi service account GKE e i tuoi service account API di Google. Avrai bisogno dei nomi di questi service account per la sezione successiva.
La seguente tabella elenca i nomi dei service account GKE e Google API nei due progetti di servizio:
Tipo di service account | 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 |
Attiva la rete VPC condivisa e concedi ruoli
Per eseguire le attività in questa sezione, assicurati che la tua organizzazione abbia definito un ruolo Amministratore VPC condiviso.
In questa sezione, svolgerai le seguenti attività:
- Nel progetto host, abilita il VPC condiviso.
- Collega i due progetti di servizio al progetto host.
- Concedi i ruoli IAM appropriati agli account di servizio che
appartengono ai tuoi progetti di servizio:
- Nel primo service project, concedi a due service account il ruolo
Compute Network User
nella subnettier-1
del progetto host. - Nel secondo progetto di servizio, concedi a due service account il ruolo
Compute Network User
nella subnettier-2
del progetto host.
- Nel primo service project, concedi a due service account il ruolo
Console
Per abilitare la VPC condiviso, collegare i progetti di servizio e concedere i ruoli, segui questi passaggi:
Vai alla pagina VPC condiviso nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto host.
Fai clic su Configura VPC condiviso. Viene visualizzata la schermata Abilita progetto host.
Fai clic su Salva e continua. Viene visualizzata la pagina Seleziona subnet.
In Modalità di condivisione, seleziona Singole subnet.
In Subnet da condividere, seleziona livello-1 e livello-2. Deseleziona tutte le altre caselle di controllo.
Fai clic su Continua. Viene visualizzata la pagina Concedi autorizzazioni.
In Associa i progetti di servizio, seleziona il primo e il secondo progetto di servizio. Deseleziona tutte le altre caselle di controllo in Associa i progetti di servizio.
In Accesso a Kubernetes Engine, seleziona Abilitato.
Fai clic su Salva. Viene visualizzata una nuova pagina.
In Autorizzazioni per singole subnet, seleziona livello 1.
Nel riquadro a destra, elimina tutti i service account che appartengono al tuo secondo progetto di servizio. ovvero elimina tutti i service account che contengono
SERVICE_PROJECT_2_NUM
.Nel riquadro a destra, cerca i nomi degli account di servizio GKE e Google API appartenenti al tuo primo progetto di servizio. Vuoi visualizzare entrambi i nomi dei account di servizio nell'elenco. Se uno dei due non è presente nell'elenco, inserisci il nome dell'account di servizio in Aggiungi membri e fai clic su Aggiungi.
Nel riquadro centrale, in Autorizzazioni per singole subnet, seleziona tier-2 e deseleziona tier-1.
Nel riquadro a destra, elimina tutti i service account che appartengono al tuo primo progetto di servizio. ovvero elimina tutti i service account che contengono
SERVICE_PROJECT_1_NUM
.Nel riquadro a destra, cerca i nomi degli account di servizio GKE e Google API che appartengono al tuo secondo progetto di servizio. Vuoi visualizzare entrambi i nomi dei account di servizio nell'elenco. Se uno dei due non è presente nell'elenco, inserisci il nome dell'account di servizio in Aggiungi membri e fai clic su Aggiungi.
gcloud
Abilita la rete VPC condivisa nel progetto host. Il comando che utilizzi dipende dal ruolo amministrativo richiesto che hai.
Se disponi del ruolo Amministratore del VPC condiviso a livello di organizzazione:
gcloud compute shared-vpc enable HOST_PROJECT_ID
Se disponi del ruolo di amministratore del VPC condiviso a livello di cartella:
gcloud beta compute shared-vpc enable HOST_PROJECT_ID
Collega 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
Collega il secondo progetto di servizio al progetto host:
gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_2_ID \ --host-project HOST_PROJECT_ID
Recupera 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 dietag
.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 valoreetag
che hai annotato in precedenza.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
Recupera 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 dietag
.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 valoreetag
che hai annotato in precedenza.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
Gestire le risorse firewall
Se vuoi che un cluster GKE in un progetto di servizio crei e gestisca le risorse firewall nel tuo progetto host, al service account 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
nel progetto host.
Console
Nella console Google Cloud vai alla pagina IAM.
Seleziona il progetto host.
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
.Seleziona il ruolo
Compute Security Admin
dall'elenco a discesa.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
: l'ID progetto host VPC condivisoSERVICE_PROJECT_NUM
: l'ID del progetto di servizio che contiene 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
ecompute.firewalls.delete
. Concedi al service account GKE del progetto di servizio questo ruolo personalizzato al progetto host.
Console
Crea un ruolo personalizzato all'interno del progetto host contenente le autorizzazioni IAM menzionate in precedenza:
Nella console Google Cloud , vai alla pagina Ruoli.
Utilizzando l'elenco a discesa nella parte superiore della pagina, seleziona il progetto host.
Fai clic su Crea ruolo.
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.
Fai clic su Aggiungi autorizzazioni.
Filtra per
compute.networks
e seleziona le autorizzazioni IAM menzionate in precedenza.Una volta selezionate tutte le autorizzazioni richieste, fai clic su Aggiungi.
Fai clic su Crea.
Concedi al service account GKE del progetto di servizio il ruolo personalizzato appena creato all'interno del progetto host:
Nella console Google Cloud vai alla pagina IAM.
Seleziona il progetto host.
Fai clic su
Concedi accesso, poi inserisci il principal dell'account di servizio GKE del progetto di servizio,service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com
.Filtra in base al Titolo del ruolo personalizzato appena creato e selezionalo.
Fai clic su Salva.
gcloud
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
Concedi al service account 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 esempiogkeFirewallAdmin
ROLE_TITLE
: un titolo descrittivo per il ruolo, ad esempioGKE Firewall Admin
ROLE_DESCRIPTION
: una breve descrizione del ruolo, ad esempioGKE service account FW permissions
LAUNCH_STAGE
: la fase di lancio del ruolo nel suo ciclo di vita, ad esempioALPHA
,BETA
oGA
HOST_PROJECT_ID
: l'ID progetto host VPC condivisoSERVICE_PROJECT_NUM
: l'ID del progetto di servizio che contiene l'account di servizio GKE
Se hai cluster in più di un progetto di servizio, devi scegliere una delle strategie e ripeterla per ogni service account GKE del progetto di servizio.
Riepilogo dei ruoli concessi sulle subnet
Ecco un riepilogo dei ruoli concessi nelle subnet:
Service account | Ruolo | Subnet |
---|---|---|
service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com | Compute Network User | tier-1 |
SERVICE_PROJECT_1_NUM@cloudservices.gserviceaccount.com | Compute Network User | tier-1 |
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com | Compute Network User | tier-2 |
SERVICE_PROJECT_2_NUM@cloudservices.gserviceaccount.com | Compute Network User | tier-2 |
Verifica l'accesso a GKE
Quando colleghi un progetto di servizio, l'attivazione dell'accesso a GKE concede all'account di servizio GKE del progetto di servizio le autorizzazioni per eseguire operazioni di gestione della rete nel progetto host.
GKE assegna automaticamente il seguente ruolo nel progetto host quando viene abilitato l'accesso GKE:
Membro | Ruolo | Risorsa |
---|---|---|
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Utente agente di servizio host | Account di servizio GKE nel progetto host |
Tuttavia, devi aggiungere manualmente l'autorizzazione IAM Compute Network User
al account di servizio GKE del progetto di servizio per accedere alla rete host.
Membro | Ruolo | Risorsa |
---|---|---|
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Compute Network User | Subnet specifica o intero progetto host |
Se un progetto di servizio è stato collegato senza abilitare l'accesso a GKE, supponendo che l'API GKE sia già stata abilitata sia nel progetto host che in quello di servizio, puoi assegnare manualmente le autorizzazioni al service account GKE del progetto di servizio aggiungendo i seguenti binding dei ruoli IAM nel progetto host:
Membro | Ruolo | Risorsa |
---|---|---|
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Compute Network User | Subnet specifica o intero progetto host |
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com | Utente agente di servizio host | Agente di servizio GKE nel progetto host |
Concedi il ruolo Utente agente di servizio host
L'agente di servizio GKE di ogni progetto di servizio deve avere un binding per il ruolo Host Service Agent User (roles/container.hostServiceAgentUser
) nel progetto host. L'agente di servizio GKE ha il seguente formato:
service-SERVICE_PROJECT_NUM@container-engine-robot.iam.gserviceaccount.com
dove SERVICE_PROJECT_NUM
è il numero di progetto del tuo progetto di servizio.
Questo binding consente all'agente di servizio GKE del progetto di servizio di eseguire operazioni di gestione della rete nel progetto host, come se fosse l'agente di servizio GKE del progetto host. Questo ruolo può essere concesso solo all'agente di servizio GKE di un progetto di servizio.
Console
Se hai utilizzato la console Google Cloud , non devi 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
Per il primo progetto, concedi il ruolo Host Service Agent User all'agente di servizio GKE del progetto. Questo ruolo viene concesso sul tuo 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
Per il secondo progetto, concedi il ruolo Host Service Agent User all'agente di servizio GKE del progetto. Questo ruolo viene concesso sul tuo 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 le subnet utilizzabili e gli 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. Che tu stia 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 non utilizzato oppure un intervallo condiviso con i pod degli 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 progetto del progetto di servizio.
Se ometti l'opzione --project
o --network-project
, il comando gcloud CLI utilizza il progetto predefinito della configurazione attiva. Poiché il progetto host e il progetto di rete sono distinti, devi specificare uno o entrambi i valori di --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 il service account GKE del progetto di servizio non dispone del ruolo Host Service Agent User per il progetto host.
- Quando il account di servizio GKE nel progetto host non esiste (ad esempio, se l'hai eliminato per errore).
- Quando l'API GKE non è abilitata nel progetto host, il che implica che il account di servizio GKE nel progetto host non è presente.
Per maggiori informazioni, consulta la sezione Risoluzione dei problemi.
Limiti dell'intervallo di indirizzi IP secondari
Puoi creare 30 intervalli secondari in una determinata subnet. Per ogni cluster, hai bisogno di due intervalli secondari: uno per i pod e uno per i servizi.
Crea un cluster nel tuo primo progetto di servizio
Per creare un cluster nel tuo primo progetto di servizio, esegui i seguenti passaggi utilizzando gcloud CLI o la console Google Cloud .
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Nel selettore di progetti, seleziona il tuo primo service project.
Fai clic su add_box Crea.
Nella sezione Autopilot o Standard, fai clic su Configura.
In Nome, inserisci
tier-1-cluster
.Nell'elenco a discesa Regione, seleziona la stessa regione che hai utilizzato per le subnet.
Nel riquadro di navigazione, fai clic su Networking.
In Networking per il cluster, seleziona shared-net.
Per Subnet nodo, seleziona tier-1.
Nella sezione Opzioni di networking avanzate, per Intervallo di indirizzi dei pod predefiniti del cluster, seleziona tier-1-pods.
Per Intervallo di indirizzi dei servizi, seleziona tier-1-services.
Fai clic su Crea.
Al termine della creazione, fai clic su tier-1-cluster nell'elenco dei cluster.
Nella pagina Dettagli cluster, fai clic sulla scheda Nodi.
Nella sezione Pool di nodi, fai clic sul nome del pool di nodi che vuoi esaminare.
In Gruppi di istanze, fai clic sul nome del gruppo di istanze che vuoi esaminare. Ad esempio, gke-tier-1-cluster-default-pool-5c5add1f-grp.
Nell'elenco delle istanze, verifica che gli indirizzi IP interni dei tuoi 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=CONTROL_PLANE_LOCATION \
--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
Sostituisci CONTROL_PLANE_LOCATION
con la regione di Compute Engine del piano di controllo del cluster.
Al termine della creazione, verifica che i nodi del cluster si trovino
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
Crea 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
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Nel selettore del progetto, seleziona il secondo progetto di servizio.
Fai clic su add_box Crea.
Nella sezione Standard o Autopilot, fai clic su Configura.
In Nome, inserisci
tier-2-cluster
.Nell'elenco a discesa Regione, seleziona la stessa regione che hai utilizzato per le subnet.
Nel riquadro di navigazione, fai clic su Networking.
In Rete, seleziona shared-net.
Per Subnet nodo, seleziona tier-2.
Per Intervallo di indirizzi dei pod predefiniti del cluster, seleziona tier-2-pods.
Per Intervallo di indirizzi dei servizi, seleziona tier-2-services.
Fai clic su Crea.
Al termine della creazione, nell'elenco dei cluster, fai clic su tier-2-cluster.
Nella pagina Dettagli cluster, fai clic sulla scheda Nodi.
Nella sezione Pool di nodi, fai clic sul nome del pool di nodi che vuoi esaminare.
In Gruppi di istanze, fai clic sul nome del gruppo di istanze che vuoi esaminare. Ad esempio,
gke-tier-2-cluster-default-pool-5c5add1f-grp
.Nell'elenco delle istanze, verifica che gli indirizzi IP interni dei tuoi nodi rientrino nell'intervallo principale della subnet di livello 2:
172.16.4.0/22
.
gcloud
Crea un cluster denominato tier-2-cluster
nel secondo progetto di servizio:
gcloud container clusters create-auto tier-2-cluster \
--project=SERVICE_PROJECT_2_ID \
--location=CONTROL_PLANE_LOCATION \
--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 si trovino
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
Crea regole firewall
Per consentire il traffico nella rete e tra i cluster all'interno della rete, devi creare firewall. Le sezioni seguenti mostrano come creare e aggiornare le regole firewall:
- Creazione di una regola firewall per abilitare la connessione SSH a un nodo: mostra come creare una regola firewall che abilita il traffico proveniente dall'esterno dei cluster utilizzando SSH.
Aggiornamento della regola firewall per il ping tra i nodi: Mostra come aggiornare la regola firewall per consentire il traffico ICMP tra i cluster.
SSH e ICMP vengono utilizzati come esempi, devi creare regole firewall che abilitino i requisiti di rete specifici della tua applicazione.
Crea una regola firewall per abilitare la connessione SSH a un nodo
Nel progetto host, crea una regola firewall per la rete shared-net
.
Consenti l'ingresso del traffico sulla porta TCP 22
, che ti consente di connetterti ai nodi del cluster utilizzando SSH.
Console
Vai alla pagina Firewall nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto host.
Nel menu Networking VPC, fai clic su Crea regola firewall.
In Nome, inserisci
my-shared-net-rule
.In Rete, seleziona shared-net.
Per Direzione del traffico, seleziona In entrata.
Per Azione in caso di corrispondenza, seleziona Consenti.
In Destinazioni, seleziona Tutte le istanze nella rete.
In Filtro di origine, seleziona Intervalli IP.
In Intervalli IP di origine, inserisci
0.0.0.0/0
.In Protocolli e porte, seleziona Protocolli e porte specificati. Nella casella, inserisci
tcp:22
.Fai clic su Crea.
gcloud
Crea una regola firewall per la rete condivisa:
gcloud compute firewall-rules create my-shared-net-rule \
--project HOST_PROJECT_ID \
--network shared-net \
--direction INGRESS \
--allow tcp:22
Connettiti a un nodo utilizzando SSH
Dopo aver creato il firewall che consente il traffico in entrata sulla porta TCP 22
,
connettiti al nodo utilizzando SSH.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Nel selettore di progetti, seleziona il tuo primo service project.
Fai clic su tier-1-cluster.
Nella pagina Dettagli cluster, fai clic sulla scheda Nodi.
Nella sezione Pool di nodi, fai clic sul nome del tuo pool di nodi.
In Gruppi di istanze, fai clic sul nome del gruppo di istanze. Ad esempio, gke-tier-1-cluster-default-pool-faf87d48-grp.
Nell'elenco delle istanze, prendi nota degli indirizzi IP interni dei nodi. Questi indirizzi rientrano nell'intervallo
10.0.4.0/22
.Per uno dei tuoi nodi, fai clic su SSH. L'operazione ha esito positivo perché SSH utilizza la porta TCP
22
, che è 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 del 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 utilizzando 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 Compute Engine all'interno della regione.
Aggiorna la regola firewall per consentire il traffico tra i nodi
Nella finestra della riga di comando SSH, avvia CoreOS Toolbox:
/usr/bin/toolbox
Nella shell della casella degli strumenti, esegui il ping di 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 si trovano entrambi nell'intervallo10.0.4.0/22
.Ora prova a eseguire il ping di uno dei nodi del 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 Internet Control Message Protocol (ICMP).In un normale prompt dei comandi, non nella shell della casella degli strumenti, aggiorna la regola firewall per consentire ICMP:
gcloud compute firewall-rules update my-shared-net-rule \ --project HOST_PROJECT_ID \ --allow tcp:22,icmp
Nella shell della cassetta degli attrezzi, esegui di nuovo il ping del nodo. Ad esempio:
ping 172.16.4.3
Questa volta il comando
ping
ha esito positivo.
Crea regole firewall aggiuntive
Puoi creare regole firewall aggiuntive per consentire la comunicazione tra nodi, pod e servizi nei 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 l'ingresso del traffico 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 firewall a causa di un problema di autorizzazione, viene generato un evento Kubernetes per guidarti su come 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 riesce a modificare le regole firewall a causa di
un'autorizzazione insufficiente, viene generato un evento firewallXPNError
ogni
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 di ingresso. Puoi sempre rimuovere questa annotazione per riattivare l'audio.
Crea un cluster basato sul peering di rete VPC in un VPC condiviso
Puoi utilizzare VPC condiviso con cluster basati sul peering di rete VPC.
Per farlo, devi concedere le seguenti autorizzazioni nel progetto host all'account utente o al account di servizio utilizzato per creare il cluster:
compute.networks.get
compute.networks.updatePeering
Devi anche assicurarti che l'intervallo di indirizzi IP del control plane non si sovrapponga ad altri intervalli riservati nella rete condivisa.
In questa sezione, crea un cluster nativo di VPC denominato
cluster-vpc
in una rete VPC condivisa predefinita.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic su add_box Crea.
Nella sezione Autopilot o Standard, fai clic su Configura.
In Nome, inserisci
cluster-vpc
.Nel riquadro di navigazione, fai clic su Networking.
Seleziona Cluster privato.
(Facoltativo per Autopilot): imposta Intervallo IP control plane su
172.16.0.16/28
.Nell'elenco a discesa Rete, seleziona la rete VPC che hai creato in precedenza.
Nell'elenco a discesa Subnet nodo, seleziona la subnet condivisa che hai creato in precedenza.
Configura il cluster in base alle esigenze.
Fai clic su Crea.
gcloud
Esegui questo comando per creare un cluster denominato cluster-vpc
in
un VPC condiviso predefinito:
gcloud container clusters create-auto private-cluster-vpc \
--project=PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--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
Prenota gli indirizzi IP
Puoi prenotare indirizzi IP interni ed esterni per i tuoi cluster VPC condiviso. Assicurati che gli indirizzi IP siano riservati nel progetto di servizio.
Per gli indirizzi IP interni, devi fornire la subnet a cui appartiene l'indirizzo IP. Per riservare un indirizzo IP tra progetti, utilizza l'URL completo della risorsa per identificare la subnet.
Puoi utilizzare il seguente comando in Google Cloud CLI per riservare 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 disporre dell'autorizzazione compute.subnetworks.use
aggiunta 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 di questa guida, esegui le seguenti operazioni per rimuovere le risorse ed evitare addebiti indesiderati sul tuo account:
Elimina i cluster
Elimina i due cluster che hai creato.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Nel selettore di progetti, seleziona il tuo primo service project.
Seleziona tier-1-cluster e fai clic su Elimina.
Nel selettore del progetto, seleziona il secondo progetto di servizio.
Seleziona tier-2-cluster e fai clic su Elimina.
gcloud
gcloud container clusters delete tier-1-cluster \
--project SERVICE_PROJECT_1_ID \
--location CONTROL_PLANE_LOCATION
gcloud container clusters delete tier-2-cluster \
--project SERVICE_PROJECT_2_ID \
--location CONTROL_PLANE_LOCATION
Disabilita rete VPC condivisa
Disattiva il VPC condiviso nel progetto host.
Console
Vai alla pagina VPC condiviso nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto host.
Fai clic su Disabilita rete VPC condivisa.
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
Elimina le regole firewall
Rimuovi le regole firewall che hai creato.
Console
Vai alla pagina Firewall nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto host.
Nell'elenco delle regole, seleziona my-shared-net-rule, my-shared-net-rule-2 e my-shared-net-rule-3.
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
Eliminare la rete condivisa
Elimina la rete condivisa che hai creato.
Console
Vai alla pagina Reti VPC nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto host.
Nell'elenco delle reti, seleziona shared-net.
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
Rimuovere il ruolo Utente agente di servizio host
Rimuovi i ruoli Host Service Agent User dai due progetti di servizio.
Console
Vai alla pagina IAM nella console Google Cloud .
Nel selettore di progetti, seleziona il progetto host.
Nell'elenco dei membri, seleziona la riga che mostra
service-SERVICE_PROJECT_1_NUM@container-engine-robot.iam.gserviceaccount.com
a cui è concesso il ruolo Utente agente di servizio host Kubernetes Engine.Seleziona la riga che mostra
service-SERVICE_PROJECT_2_NUM@container-engine-robot.iam.gserviceaccount.com
a cui viene concesso il ruolo Utente agente di servizio host Kubernetes Engine.Fai clic su Rimuovi accesso.
gcloud
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
Rimuovi il ruolo Host Service Agent User dal 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
Le sezioni seguenti ti aiutano a risolvere i problemi comuni relativi ai cluster VPC condiviso.
Errore: impossibile recuperare i metadati dal progetto di rete
Il seguente messaggio è un errore comune quando si lavora con i cluster VPC condiviso:
Failed to get metadata from network project. GCE_PERMISSION_DENIED: Google
Compute Engine: Required 'compute.projects.get' permission for
'projects/HOST_PROJECT_ID
Questo errore può verificarsi per i seguenti motivi:
L'API GKE non è stata abilitata nel progetto host.
Il account di servizio GKE del progetto host non esiste. Ad esempio, potrebbe essere stato eliminato.
Il account di servizio GKE del progetto host non dispone del ruolo Agente di servizio Kubernetes Engine (
container.serviceAgent
) nel progetto host. Il collegamento potrebbe essere stato rimosso per errore.Il service account GKE del progetto di servizio non dispone del ruolo Utente agente di servizio host nel progetto host.
Per risolvere il problema, determina se esiste il account di servizio GKE del progetto host.
Se il account di servizio non esiste, procedi nel seguente modo:
Se l'API GKE non è abilitata nel progetto host, abilitala. Vengono creati il account di servizio GKE del progetto host e gli viene concesso il ruolo Service Agent Kubernetes Engine (
container.serviceAgent
) nel progetto host.Se l'API GKE è abilitata nel progetto host, significa che l'account di servizio GKE del progetto host è stato eliminato o non dispone del ruolo Agente di servizio Kubernetes Engine (
container.serviceAgent
) nel progetto host. Per ripristinare il account di servizio GKE o l'associazione di ruolo, devi disattivare e poi riattivare l'API GKE. Per maggiori informazioni, vedi Errore 400/403: autorizzazioni di modifica mancanti nell'account.
Problema: connettività
Se riscontri problemi di connettività tra le VM di Compute Engine che si trovano nella stessa rete Virtual Private Cloud (VPC) o in due reti VPC connesse con il peering di rete VPC, consulta Risoluzione dei problemi di connettività tra istanze di macchine virtuali (VM) con indirizzi IP interni nella documentazione di Virtual Private Cloud (VPC).
Problema: perdita di pacchetti
Se riscontri problemi di perdita di pacchetti durante l'invio di traffico da un cluster a un indirizzo IP esterno utilizzando Cloud NAT, cluster nativi VPC o agente di mascheramento IP, consulta Risoluzione dei problemi di perdita di pacchetti Cloud NAT da un cluster.
Passaggi successivi
- Leggi la panoramica del VPC condiviso.
- Scopri di più sul provisioning di un VPC condiviso.
- Leggi la panoramica della rete GKE.
- Scopri di più sulle regole firewall create automaticamente.
- Scopri come risolvere i problemi di connettività tra le istanze di macchine virtuali (VM) con indirizzi IP interni.