Questo tutorial descrive come accedere a un cluster Google Kubernetes Engine (GKE) privato utilizzando i pool privati di Cloud Build. Questo accesso ti consente di utilizzare Cloud Build per eseguire il deployment della tua applicazione in un cluster GKE privato. Questo tutorial è destinato agli amministratori di rete ed è applicabile a tutte le situazioni in cui i pool privati di Cloud Build devono comunicare con servizi in esecuzione in una rete Virtual Private Cloud (VPC) in peering. Ad esempio, i worker del pool privato potrebbero comunicare con i seguenti servizi:
- Cluster GKE privato
- Database Cloud SQL
- Istanza di Memorystore
- Un'istanza Compute Engine è in esecuzione su una rete VPC diversa da quella in peering
I pool privati di Cloud Build e i piani di controllo dei cluster GKE vengono eseguiti in reti VPC di proprietà di Google. Queste reti VPC sono connesse in peering con la tua rete VPC su Google Cloud. Tuttavia, il peering di rete VPC non supporta il peering transitivo, che può essere una limitazione quando si utilizzano i pool privati di Cloud Build. Questo tutorial illustra una soluzione che utilizza Cloud VPN per consentire ai worker in un pool privato di Cloud Build di accedere al piano di controllo di un cluster GKE privato.
Questo tutorial presuppone che tu abbia familiarità con Google Kubernetes Engine,
Cloud Build, il comando gcloud
, il peering di rete VPC e
Cloud VPN.
Panoramica dell'architettura
Quando crei un cluster GKE privato senza accesso client all'endpoint pubblico, i client possono accedere al piano di controllo del cluster GKE solo tramite il proprio indirizzo IP privato.
I client come kubectl
possono comunicare con il piano di controllo solo se vengono eseguiti su un'istanza che ha accesso alla rete VPC e si trova in una rete autorizzata.
Se vuoi utilizzare Cloud Build per il deployment della tua applicazione su questo cluster GKE privato, devi utilizzare i pool privati di Cloud Build per accedere ai cluster GKE. I pool privati sono un insieme di istanze worker in esecuzione in un progetto Google Cloud di proprietà di Google e che sono connesse in peering con la tua rete VPC utilizzando una connessione di peering di rete VPC. In questa configurazione, le istanze worker possono comunicare con l'indirizzo IP privato del piano di controllo del cluster GKE.
Tuttavia, il piano di controllo del cluster GKE viene eseguito anche in un progetto di proprietà di Google ed è connesso in peering alla tua rete VPC utilizzando una connessione in peering. Il peering di rete VPC non supporta il peering transitivo, quindi non è possibile instradare i pacchetti direttamente tra il pool privato di Cloud Build e il piano di controllo del cluster GKE.
Per consentire alle istanze worker di Cloud Build di accedere al piano di controllo del cluster GKE, puoi eseguire il peering del pool privato e del piano di controllo del cluster GKE con due reti VPC di tua proprietà, quindi connettere queste due reti VPC tramite Cloud VPN. Questo peering e connessione consente a ogni lato del tunnel VPC di pubblicizzare le reti del pool privato e del cluster GKE, completando così la route.
Il seguente diagramma dell'architettura mostra le risorse utilizzate in questo tutorial:
Ti consigliamo di creare tutte le risorse utilizzate in questo tutorial nella stessa regione Google Cloud per una bassa latenza. Il tunnel VPN può attraversare due regioni diverse se è necessaria questa comunicazione tra regioni per la tua implementazione. Anche le due reti VPC di tua proprietà possono appartenere a progetti diversi.
Obiettivi
- Creare un cluster GKE privato.
- Configurare un pool privato di Cloud Build.
- Crea una connessione VPN ad alta disponibilità tra due reti VPC.
- Abilita il routing dei pacchetti tra due peering di rete VPC e una connessione VPC.
Costi
In questo documento, utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Build, Google Kubernetes Engine, and Service Networking.
-
Nella console Google Cloud, attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.
Creazione di due reti VPC nel tuo progetto
In questa sezione creerai due reti VPC e una subnet per i nodi dei cluster GKE.
In Cloud Shell, crea la prima rete VPC (denominata "Rete VPC di peering di pool privati" nel diagramma precedente). Non è necessario creare subnet in questa rete.
gcloud compute networks create PRIVATE_POOL_PEERING_VPC_NAME \ --subnet-mode=CUSTOM
Sostituisci PRIVATE_POOL_PEERING_VPC_NAME con il nome della tua rete VPC per il peering con la rete del pool privato di Cloud Build.
Crea la seconda rete VPC (chiamata "Rete VPC di peering GKE" nel diagramma precedente):
gcloud compute networks create GKE_PEERING_VPC_NAME \ --subnet-mode=CUSTOM
Sostituisci GKE_PEERING_VPC_NAME con il nome della tua rete VPC per eseguire il peering con il piano di controllo del cluster GKE.
Crea una subnet per i nodi del cluster GKE:
gcloud compute networks subnets create GKE_SUBNET_NAME \ --network=GKE_PEERING_VPC_NAME \ --range=GKE_SUBNET_RANGE \ --region=REGION
Sostituisci quanto segue:
- GKE_SUBNET_NAME: il nome della subnet destinata a ospitare i nodi del cluster GKE.
- GKE_PEERING_VPC_NAME: il nome della rete VPC per il peering con il piano di controllo del cluster GKE.
- GKE_SUBNET_RANGE: l'intervallo di indirizzi IP di
GKE_SUBNET_NAME. Per questo tutorial, puoi utilizzare
10.244.252.0/22
. - REGION: la regione Google Cloud che ospita
il cluster GKE. Per questo tutorial, puoi utilizzare
us-central1
.
Ora hai configurato due reti VPC nel tuo progetto e sono pronte per il peering con altri servizi.
Creazione di un cluster GKE privato
In questa sezione creerai il cluster GKE privato.
In Cloud Shell, crea un cluster GKE senza accesso client all'endpoint pubblico del piano di controllo.
gcloud container clusters create PRIVATE_CLUSTER_NAME \ --region=REGION \ --enable-master-authorized-networks \ --network=GKE_PEERING_VPC_NAME \ --subnetwork=GKE_SUBNET_NAME \ --enable-private-nodes \ --enable-private-endpoint \ --enable-ip-alias \ --master-ipv4-cidr=CLUSTER_CONTROL_PLANE_CIDR
Sostituisci quanto segue:
- PRIVATE_CLUSTER_NAME: il nome del cluster GKE privato.
- REGION: la regione per il cluster GKE. In questo tutorial, utilizza
us-central1
per la regione, la stessa che hai utilizzato per le reti VPC. - GKE_PEERING_VPC_NAME: il nome della rete VPC per il peering con il piano di controllo del cluster GKE.
- GKE_SUBNET_RANGE: l'intervallo di indirizzi IP di
GKE_SUBNET_NAME. Per questo tutorial, puoi utilizzare
10.244.252.0/22
. CLUSTER_CONTROL_PLANE_CIDR: l'intervallo di indirizzi IP del piano di controllo del cluster GKE. Deve avere un prefisso
/28
. Per questo tutorial, utilizza172.16.0.32/28
.
Ora hai creato un cluster GKE privato connesso in peering con la rete VPC del tuo progetto.
Recupera il nome del peering di rete VPC del cluster GKE. Questo peering di rete VPC è stato creato automaticamente al momento della creazione del cluster GKE.
export GKE_PEERING_NAME=$(gcloud container clusters describe PRIVATE_CLUSTER_NAME \ --region=REGION \ --format='value(privateClusterConfig.peeringName)')
Sostituisci quanto segue:
- PRIVATE_CLUSTER_NAME: il nome del cluster GKE privato.
- REGION: la regione per il cluster GKE. In questo tutorial, utilizza
us-central1
per la regione, la stessa che hai utilizzato per le reti VPC.
Abilita l'esportazione di route personalizzate per pubblicizzare la rete del pool privato sul piano di controllo del cluster GKE:
gcloud compute networks peerings update $GKE_PEERING_NAME \ --network=GKE_PEERING_VPC_NAME \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip
Sostituisci GKE_PEERING_VPC_NAME con il nome della tua rete VPC per eseguire il peering con il piano di controllo del cluster GKE.
Per saperne di più sulle route personalizzate, consulta Importazione ed esportazione delle route personalizzate.
Creazione di un pool privato di Cloud Build
In questa sezione devi creare il pool privato di Cloud Build.
In Cloud Shell, alloca un intervallo di indirizzi IP denominato nella rete VPC PRIVATE_POOL_PEERING_VPC_NAME per il pool privato di Cloud Build:
gcloud compute addresses create RESERVED_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --addresses=PRIVATE_POOL_NETWORK \ --prefix-length=PRIVATE_POOL_PREFIX \ --network=PRIVATE_POOL_PEERING_VPC_NAME
Sostituisci quanto segue:
- RESERVED_RANGE_NAME: il nome dell'intervallo di indirizzi IP privati che ospita il pool privato di Cloud Build.
- PRIVATE_POOL_NETWORK: il primo indirizzo IP di
RESERVED_RANGE_NAME. Per questo tutorial, puoi utilizzare
192.168.0.0
. - PRIVATE_POOL_PREFIX: il prefisso di
RESERVED_RANGE_NAME. Ogni pool privato creato utilizzerà
/24
di questo intervallo. Per questo tutorial, puoi usare20
, che consente di creare fino a sedici pool. - PRIVATE_POOL_PEERING_VPC_NAME: il nome della rete VPC da collegare in peering con la rete del pool privato di Cloud Build.
- L'intervallo IP è
global
perché quando--purpose
èVPC_PEERING
l'intervallo di indirizzi IP denominato deve essereglobal
.
Crea una connessione privata tra la rete VPC che contiene il pool privato di Cloud Build e PRIVATE_POOL_PEERING_VPC_NAME:
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=RESERVED_RANGE_NAME \ --network=PRIVATE_POOL_PEERING_VPC_NAME
Sostituisci quanto segue:
- RESERVED_RANGE_NAME: il nome dell'intervallo di indirizzi IP privati che ospita il pool privato di Cloud Build.
- PRIVATE_POOL_PEERING_VPC_NAME: il nome della rete VPC da collegare in peering con la rete del pool privato di Cloud Build.
Abilita l'esportazione di route personalizzate per pubblicizzare la rete del piano di controllo del cluster GKE al pool privato:
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=PRIVATE_POOL_PEERING_VPC_NAME \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip
Sostituisci PRIVATE_POOL_PEERING_VPC_NAME con il nome della tua rete VPC per il peering con la rete del pool privato di Cloud Build.
Crea un pool privato di Cloud Build in peering con PRIVATE_POOL_PEERING_VPC_NAME:
gcloud builds worker-pools create PRIVATE_POOL_NAME \ --region=REGION \ --peered-network=projects/$GOOGLE_CLOUD_PROJECT/global/networks/PRIVATE_POOL_PEERING_VPC_NAME
Sostituisci quanto segue:
- PRIVATE_POOL_NAME: il nome del pool privato di Cloud Build.
- REGION: la regione per il cluster GKE. In questo tutorial, utilizza
us-central1
per la regione, la stessa che hai utilizzato per le reti VPC.
A questo punto hai creato un pool privato di Cloud Build e ne hai eseguito il peering con la rete VPC nel tuo progetto.
Creazione di una connessione Cloud VPN tra le due reti VPC
Nel tuo progetto, ora hai una rete VPC in peering con il pool privato di Cloud Build e una seconda rete VPC in peering con il cluster GKE privato.
In questa sezione creerai una connessione Cloud VPN tra le due reti VPC del tuo progetto. Questa connessione completa la route e consente ai pool privati di Cloud Build di accedere al cluster GKE.
In Cloud Shell, crea due gateway VPN ad alta disponibilità che si connettono tra loro. Per creare questi gateway, segui le istruzioni riportate in Creazione di due gateway VPN ad alta disponibilità completamente configurati che si connettono tra loro. La configurazione è completa dopo aver creato le sessioni BGP. Segui queste istruzioni e utilizza i seguenti valori:
- PRIVATE_POOL_PEERING_VPC_NAME per
NETWORK_1
- GKE_PEERING_VPC_NAME per
NETWORK_2
- REGION per
REGION_1
eREGION_2
- PRIVATE_POOL_PEERING_VPC_NAME per
Configura ciascuna delle quattro sessioni BGP create per pubblicizzare le route alla rete VPC del pool privato e alla rete VPC del piano di controllo del cluster GKE:
gcloud compute routers update-bgp-peer ROUTER_NAME_1 \ --peer-name=PEER_NAME_GW1_IF0 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX gcloud compute routers update-bgp-peer ROUTER_NAME_1 \ --peer-name=PEER_NAME_GW1_IF1 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX gcloud compute routers update-bgp-peer ROUTER_NAME_2 \ --peer-name=PEER_NAME_GW2_IF0 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR gcloud compute routers update-bgp-peer ROUTER_NAME_2 \ --peer-name=PEER_NAME_GW2_IF1 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR
Dove i seguenti valori sono gli stessi nomi che hai utilizzato quando hai creato i due gateway VPN ad alta disponibilità:
- ROUTER_NAME_1
- PEER_NAME_GW1_IF0
- PEER_NAME_GW1_IF1
- ROUTER_NAME_2
- PEER_NAME_GW2_IF0
- PEER_NAME_GW2_IF1
Abilitazione dell'accesso di Cloud Build al piano di controllo del cluster GKE
Ora che hai una connessione VPN tra le due reti VPC nel tuo progetto, abilita l'accesso di Cloud Build al piano di controllo del cluster GKE.
In Cloud Shell, aggiungi l'intervallo di rete del pool privato alle reti autorizzate del piano di controllo in GKE:
gcloud container clusters update PRIVATE_CLUSTER_NAME \ --enable-master-authorized-networks \ --region=REGION \ --master-authorized-networks=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
Sostituisci quanto segue:
- PRIVATE_CLUSTER_NAME: il nome del cluster GKE privato.
- REGION: la regione per il cluster GKE. In questo tutorial, utilizza
us-central1
per la regione, la stessa che hai utilizzato per le reti VPC. - PRIVATE_POOL_NETWORK: il primo indirizzo IP di
RESERVED_RANGE_NAME. Per questo tutorial, puoi utilizzare
192.168.0.0
. - PRIVATE_POOL_PREFIX: il prefisso di
RESERVED_RANGE_NAME. Ogni pool privato creato utilizzerà
/24
di questo intervallo. Per questo tutorial, puoi usare20
, che consente di creare fino a sedici pool.
Consenti all'account di servizio che stai utilizzando per la build di accedere al piano di controllo del cluster GKE:
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format 'value(projectNumber)') gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member=serviceAccount:SERVICE_ACCOUNT \ --role=roles/container.developer
I pool privati di Cloud Build ora possono accedere al piano di controllo del cluster GKE.
Verifica della soluzione in corso...
In questa sezione, verificherai che la soluzione funzioni eseguendo il comando kubectl get nodes
in un passaggio di build in esecuzione nel pool privato.
In Cloud Shell, crea una cartella temporanea con un file di configurazione di Cloud Build che esegue il comando
kubectl get nodes
:mkdir private-pool-test && cd private-pool-test cat > cloudbuild.yaml <<EOF steps: - name: "gcr.io/cloud-builders/kubectl" args: ['get', 'nodes'] env: - 'CLOUDSDK_COMPUTE_REGION=REGION' - 'CLOUDSDK_CONTAINER_CLUSTER=PRIVATE_CLUSTER_NAME' options: workerPool: 'projects/$GOOGLE_CLOUD_PROJECT/locations/REGION/workerPools/PRIVATE_POOL_NAME' EOF
Sostituisci quanto segue:
- REGION: la regione per il cluster GKE. In questo tutorial, utilizza
us-central1
per la regione, la stessa che hai utilizzato per le reti VPC. - PRIVATE_CLUSTER_NAME: il nome del cluster GKE privato.
- PRIVATE_POOL_NAME: il nome del pool privato di Cloud Build.
- REGION: la regione per il cluster GKE. In questo tutorial, utilizza
Avvia il job di creazione:
gcloud builds submit --config=cloudbuild.yaml
Verifica che l'output sia l'elenco dei nodi nel cluster GKE. Il log di build visualizzato nella console include una tabella simile a questa:
NAME STATUS ROLES AGE VERSION gke-private-default-pool-3ec34262-7lq9 Ready <none> 9d v1.19.9-gke.1900 gke-private-default-pool-4c517758-zfqt Ready <none> 9d v1.19.9-gke.1900 gke-private-default-pool-d1a885ae-4s9c Ready <none> 9d v1.19.9-gke.1900
Hai verificato che i worker del pool privato possono accedere al cluster GKE. Questo accesso ti consente di utilizzare Cloud Build per eseguire il deployment dell'applicazione su questo cluster GKE privato.
Risoluzione dei problemi
Se riscontri problemi con questo tutorial, consulta i seguenti documenti:
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina le singole risorse
In Cloud Shell, elimina il cluster GKE:
gcloud container clusters delete PRIVATE_CLUSTER_NAME \ --region=REGION \ --async
Quando esegui questo comando, il peering di rete VPC viene automaticamente eliminato.
Elimina il pool privato di Cloud Build:
gcloud builds worker-pools delete PRIVATE_POOL_NAME \ --region=REGION
Elimina la connessione privata tra la rete VPC del producer di servizi e PRIVATE_POOL_PEERING_VPC_NAME:
gcloud services vpc-peerings delete \ --network=PRIVATE_POOL_PEERING_VPC_NAME \ --async
Elimina l'intervallo di indirizzi IP denominato utilizzato per il pool privato:
gcloud compute addresses delete RESERVED_RANGE_NAME \ --global
Elimina i quattro tunnel VPN. Utilizza gli stessi nomi specificati in Crea tunnel VPN.
gcloud compute vpn-tunnels delete \ TUNNEL_NAME_GW1_IF0 \ TUNNEL_NAME_GW1_IF1 \ TUNNEL_NAME_GW2_IF0 \ TUNNEL_NAME_GW2_IF1 \ --region=REGION
Elimina i due router Cloud. Utilizza gli stessi nomi specificati in Crea router Cloud.
gcloud compute routers delete \ ROUTER_NAME_1 \ ROUTER_NAME_2 \ --region=REGION
Elimina i due gateway VPN. Utilizza gli stessi nomi specificati in Crea i gateway VPN ad alta disponibilità.
gcloud compute vpn-gateways delete \ GW_NAME_1 \ GW_NAME_2 \ --region=REGION
Elimina GKE_SUBNET_NAME, ovvero la subnet che ospita i nodi del cluster GKE:
gcloud compute networks subnets delete GKE_SUBNET_NAME \ --region=REGION
Elimina le due reti VPC PRIVATE_POOL_PEERING_VPC_NAME e GKE_PEERING_VPC_NAME:
gcloud compute networks delete \ PRIVATE_POOL_PEERING_VPC_NAME \ GKE_PEERING_VPC_NAME
Passaggi successivi
- Scopri come eseguire build in un pool privato.
- Esegui un proxy all'interno del cluster GKE privato che ha accesso al piano di controllo.
- Scopri come eseguire il deployment in GKE da Cloud Build.
- Prova le altre funzionalità di Google Cloud. Dai un'occhiata ai nostri tutorial.