Questa pagina spiega come configurare i pool privati per accedere alle risorse esterne tramite un IP esterno statico.
Per seguire le indicazioni dettagliate per questa attività direttamente nella Google Cloud console, fai clic su Procedura guidata:
Prima di iniziare
Abilita le API Cloud Build, Compute Engine e Service Networking.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.
Per ottenere le autorizzazioni necessarie per configurare una connessione privata, chiedi all'amministratore di concederti il ruolo IAM Amministratore rete Compute Engine (
roles/compute.networkAdmin) nel progetto Cloud in cui risiede la rete VPC. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso.Per utilizzare i comandi
gcloudin questa pagina, installa Google Cloud CLI.
Crea una rete VPC
Console
Per creare una rete VPC utilizzando la Google Cloud console, completa i seguenti passaggi:
Apri la pagina Reti VPC nella Google Cloud console.
Fai clic su Crea rete VPC per creare una nuova rete.
Viene visualizzata la pagina Crea una rete VPC.
Inserisci un Nome per la rete.
In Modalità creazione subnet, seleziona Automatica.
Se vuoi personalizzare ulteriormente altri campi, consulta Crea e gestisci le reti VPC. In caso contrario, lascia tutti i campi così come sono.
Fai clic su Crea per creare la rete VPC.
Dopo aver fatto clic su Crea, vedrai la nuova rete VPC nella pagina Reti VPC.
gcloud
Per creare una rete VPC utilizzando lo strumento a riga di comando gcloud,
inserisci il seguente comando nel terminale, dove NETWORK_NAME
è il nome della rete VPC:
gcloud compute networks create NETWORK_NAME \
--subnet-mode=auto
Dopo aver fatto clic su Crea, vedrai la nuova rete VPC nella pagina Reti VPC.
Per saperne di più sulla creazione e sulla gestione delle reti VPC, consulta Crea e gestisci le reti VPC.
Crea una connessione privata
Console
Per creare una connessione privata tra la rete VPC e la rete del producer di servizi, completa i seguenti passaggi:
Apri la pagina Reti VPC nella Google Cloud console.
Fai clic sul nome della rete.
Viene visualizzata la pagina Dettagli rete VPC.
Fai clic sulla scheda Private Service Connect.
Seleziona la scheda Intervalli IP allocati per i servizi.
Fai clic su Alloca intervallo IP.
Viene visualizzata la finestra popup Alloca un intervallo IP interno.
Inserisci un Nome per l'intervallo IP.
In Intervallo IP, seleziona Automatico.
Nel campo Lunghezza prefisso, inserisci la lunghezza del prefisso per la rete.
Fai clic su Alloca per allocare l'intervallo IP.
Seleziona la scheda Connessioni private ai servizi.
Fai clic su Crea connessione.
Viene visualizzata la finestra popup Crea una connessione privata.
In Allocazione assegnata, seleziona l'intervallo IP.
Fai clic su Connetti.
Ora vedrai la connessione nella tabella nella scheda Connessioni private ai servizi.
Fai clic su Attiva (Esporta route personalizzata) per assicurarti che le route per il VPC vengano applicate alla rete in cui sono in esecuzione le istanze del pool privato.
A questo punto, hai configurato la rete.
gcloud
Per creare una connessione privata tra la rete VPC e la rete del producer di servizi, completa i seguenti passaggi:
Inserisci il seguente comando nel terminale per allocare un intervallo IP per il servizio:
gcloud compute addresses create ALLOCATED_RANGE_NAME \ --global \ --prefix-length=PREFIX_LENGTH \ --network=VPC_NETWORK \ --project=PROJECT_IDDove:
- ALLOCATED_RANGE_NAME è il nome dell'intervallo allocato.
Ad esempio,
my-allocated-range. - PREFIX_LENGTH è la lunghezza del prefisso per la rete. La lunghezza del prefisso deve essere
/24o inferiore, ad esempio/22,/21e così via. - VPC_NETWORK è il nome della rete VPC, ad esempio
my-vpc-network. - PROJECT_ID è l'ID del progetto che contiene la rete VPC.
- ALLOCATED_RANGE_NAME è il nome dell'intervallo allocato.
Ad esempio,
Inserisci il seguente comando nel terminale per creare una connessione privata:
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=ALLOCATED_RANGE_NAME \ --network=VPC_NETWORK \ --project=PROJECT_IDDove:
- ALLOCATED_RANGE_NAME è il nome dell'intervallo allocato che hai creato nel passaggio precedente.
- VPC_NETWORK è il nome della rete VPC, ad esempio
my-vpc-network. - PROJECT_ID è l'ID del progetto che contiene la rete VPC.
Inserisci il seguente comando nel terminale per assicurarti che le route per il VPC vengano applicate alla rete in cui sono in esecuzione le istanze del pool privato:
gcloud compute networks peerings update servicenetworking-googleapis-com \ --export-custom-routes \ --network=VPC_NETWORK \ --project=PROJECT_IDDove:
- VPC_NETWORK è il nome della rete VPC, ad esempio
my-vpc-network. - PROJECT_ID è l'ID del progetto che contiene la rete VPC.
- VPC_NETWORK è il nome della rete VPC, ad esempio
A questo punto, hai configurato la rete.
Per saperne di più sulla configurazione di una rete, consulta Configurare una connessione privata tra la rete VPC e la rete del producer di servizi.
Crea un pool privato
Console
Per creare un pool privato utilizzando la Google Cloud console, completa i seguenti passaggi:
Apri la pagina Pool di worker nella Google Cloud console:
Seleziona il progetto in cui vuoi creare il pool privato.
Nella pagina Pool di worker, fai clic su Crea.
Viene visualizzato il riquadro Crea pool privato.
Nel riquadro laterale Crea pool privato, inserisci le seguenti informazioni:
Inserisci un Nome per il pool privato.
Seleziona una Regione dal menu a discesa.
In Rete, inserisci le seguenti informazioni:
- Progetto: inserisci l'ID o il numero del progetto.
- Rete: inserisci il nome della rete VPC.
- (Facoltativo) Deseleziona la casella Assegna IP esterni per la configurazione di rete più restrittiva.
A questo punto, hai creato un pool privato.
gcloud
Per creare un pool privato utilizzando lo strumento a riga di comando gcloud, inserisci il seguente comando nel terminale:
gcloud builds worker-pools create PRIVATEPOOL_ID \
--project=PRIVATEPOOL_PROJECT_ID \
--region=REGION \
--peered-network=PEERED_NETWORK \
--no-public-egress
Dove:
- PRIVATEPOOL_ID è l'identificatore univoco del pool privato.
- PRIVATEPOOL_PROJECT_ID è l'ID del Google Cloud progetto in cui vuoi creare il pool privato.
- REGION è una delle regioni supportate.
- PEERED_NETWORK è l'URL della risorsa di rete
--no-public-egress: se questo flag è impostato, il pool privato viene creato senza un indirizzo IP esterno.
A questo punto, hai creato un pool privato.
Per saperne di più su come creare e gestire i pool privati, consulta Creare e gestire i pool privati.
Accedi alle risorse esterne in una rete privata
Per impostazione predefinita, gli indirizzi IP esterni associati ai pool privati di Cloud Build non sono statici o configurabili. Vengono assegnati da Google Cloud. Se vuoi configurare i pool privati per accedere alle risorse esterne dalla rete privata con un IP esterno statico, devi configurare una macchina virtuale (VM) nel progetto in modo che funga da gateway NAT autogestito per il proxy delle richieste alla rete internet pubblica. Dopodiché, devi configurare route personalizzate per inoltrare queste richieste alla VM per assicurarti che le route vengano scambiate con il progetto di rete di servizi.
Questa sezione descrive come configurare i pool privati per accedere alle risorse esterne tramite un IP esterno statico completando i seguenti passaggi:
Crea uno script di avvio per configurare la VM in modo da eseguire il proxy di tutto il traffico instradato alla VM e mascherare il traffico come se provenisse dal suo indirizzo IP:
#! /bin/bash set -e sysctl -w net.ipv4.ip_forward=1 IFACE=$(ip -brief link | tail -1 | awk {'print $1'}) iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADEConfigura una VM nello stesso VPC del pool privato con una regola per consentire il proxy delle richieste tramite il VPC:
gcloud compute instances create VM_NAME \ --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \ --network=NETWORK_NAME \ --private-network-ip=INTERNAL_IP --can-ip-forward \ --zone=ZONE \ --subnet=SUBNETWORK \ --tags=NAT_TAG \ --metadata-from-file=startup-script=STARTUP_SCRIPTDove:
- VM_NAME è il nome che vuoi fornire per la VM.
- NETWORK_NAME è il nome della rete creata nella sezione precedente.
- INTERNAL_IP è un indirizzo IP interno valido nell'
intervallo della subnet della regione della VM. Ad esempio,
10.128.0.2. - ZONE è la zona associata alla rete, ad esempio
us-central1-a. - (Facoltativo) SUBNETWORK è il nome della subnet. Il nome della subnet è disponibile nel REST equivalente per la subnet nel seguente formato:
projects/project-id/regions/region/subnetworks/subnetwork-name. Se hai selezionato Automatica in Modalità di connessione subnet durante la creazione di una rete VPC, non devi specificare questo campo. - NAT_TAG è il nome del tag del gateway NAT che ti consente di instradare le richieste in modo condizionale, a seconda che abbiano o meno un tag da questa VM. Puoi specificare qualsiasi nome per il tag.
- STARTUP_SCRIPT è il nome dello script di avvio
creato nel passaggio precedente. Ad esempio,
startup-script-example.sh. In questo esempio, il flag--metadata-from-fileviene utilizzato per passare i contenuti dello script di avvio specificato a una chiave denominatastartup-script.
Dopo aver eseguito questo comando, vedrai un output che contiene il valore dell'IP esterno. Prendi nota del valore dell'IP esterno. Tutto il traffico dal pool privato alla risorsa esterna passa attraverso questo indirizzo. Puoi scegliere di utilizzare questo indirizzo per ulteriori configurazioni, ad esempio la configurazione delle regole firewall nella rete esterna.
Configura una route per indirizzare tutte le richieste alla risorsa esterna all'istanza creata nel passaggio precedente, consentendo l'inoltro delle richieste alle istanze del pool privato:
gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \ --destination-range=DESTINATION_RANGE \ --next-hop-address=INTERNAL_IP \ --network=NETWORK_NAME \ --priority=POOL_ROUTE_PRIORITYDove:
- PRIVATE_POOL_ROUTE_NAME è il nome che vuoi assegnare alla route.
- DESTINATION_RANGE è un intervallo di indirizzi CIDR valido
contenente la destinazione a cui vuoi instradare. Ad esempio, un'istanza di GitHub Enterprise Edition. Ad esempio,
8.8.8.0/24. - INTERNAL_IP è il valore dell'IP interno ottenuto nel passaggio precedente. Ad esempio,
10.128.0.2. - NETWORK_NAME è il nome della rete creata nella sezione precedente.
- POOL_ROUTE_PRIORITY è il numero di priorità che vuoi specificare per la route.
Questo comando garantisce che tutto il traffico da una build all'interno di un'istanza del pool privato venga instradato alla VM proxy creata, non direttamente alla rete internet pubblica.
Configura una route per inoltrare le richieste dal proxy dalle istanze con tag all'intervallo IP di destinazione esterno. Il seguente comando crea una route per inoltrare le richieste alla rete internet pubblica associata alle istanze del pool privato.
gcloud compute routes create NAT_EGRESS_ROUTE_NAME \ --destination-range=DESTINATION_RANGE \ --next-hop-gateway=default-internet-gateway \ --network=NETWORK_NAME \ --priority=NAT_ROUTE_PRIORITY \ --tags=NAT_TAGDove:
- NAT_EGRESS_ROUTE_NAME è il nome che vuoi assegnare alla route del gateway NAT.
- DESTINATION_RANGE è l'indirizzo della destinazione a cui vuoi instradare. Ad esempio, un'istanza di GitHub Enterprise Edition. Ad esempio,
8.8.8.0/24. - NETWORK_NAME è il nome della rete creata nella sezione precedente.
- NAT_TAG è il nome del tag del gateway NAT che ti consente di instradare le richieste in modo condizionale, a seconda che abbiano o meno un tag da questa VM. Puoi specificare qualsiasi nome per il tag.
NAT_ROUTE_PRIORITY è il numero di priorità che vuoi specificare per la route.
Questo comando garantisce che tutto il traffico dalla VM proxy possa essere indirizzato alla rete internet pubblica.
Aggiungi una regola firewall per consentire il traffico dal pool privato alla VM del gateway NAT:
gcloud compute firewall-rules create RULE_NAME \ --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \ --network=NETWORK_NAME \ --source-ranges=ALLOCATED_RANGE \ --target-tags=NAT_TAGDove:
- RULE_NAME è il nome che vuoi assegnare alla regola firewall.
- FIREWALL_PRIORITY è il numero di priorità che vuoi specificare per la regola firewall.
- NETWORK_NAME è il nome della rete creata nella sezione precedente.
- ALLOCATED_RANGE è l'intervallo CIDR che hai allocato durante la creazione di Private Service Connect.
- NAT_TAG è il nome del tag del gateway NAT che ti consente di instradare le richieste in modo condizionale, a seconda che abbiano o meno un tag da questa VM. Puoi specificare qualsiasi nome per il tag.
Ora puoi accedere alle risorse esterne dall'indirizzo IP statico del gateway NAT autogestito nel VPC.
Passaggi successivi
- Scopri di più sui pool privati.
- Scopri come configurare l'ambiente per creare pool privati.
- Scopri come accedere alle risorse in un JFrog Artifactory privato con pool privati.