Questa pagina mostra come utilizzare i pool privati di Cloud Build per accedere alle risorse da una rete Virtual Private Cloud privata.
In questo tutorial, creerai un'ArtiFabbrica di JFrog in Compute Engine ospitata in una rete VPC privata, quindi configurerai una build in esecuzione in un pool privato per accedere ai dati da questo Artifact. Jfrog Artifact è un gestore di repository binario open source.
Obiettivi
- Configura Jfrog Artifact su Compute Engine
- Carica un file su ArtiFaib
- Crea un pool privato
- Esegui il peering della rete del producer di servizi che ospita il pool privato alla rete Virtual Private Cloud di Artifat
- Scrivi un file di configurazione di compilazione per accedere ai dati in Artifat
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud Build
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Compute Engine, Cloud Build, Service Networking.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Compute Engine, Cloud Build, Service Networking.
Opzione A: utilizza Cloud Shell
Puoi seguire questo tutorial utilizzando Cloud Shell, in cui è preinstallata Google Cloud CLI utilizzata in questo tutorial. Se utilizzi Cloud Shell, non è necessario installare questi strumenti a riga di comando sulla workstation.
Per utilizzare Cloud Shell:
Vai alla console Google Cloud.
Fai clic sul pulsante Attiva Cloud Shell nella parte superiore della finestra della console Google Cloud.
All'interno di un nuovo frame nella parte inferiore della console Google Cloud si apre una sessione di Cloud Shell che mostra un prompt della riga di comando.
Opzione B: utilizza gli strumenti a riga di comando localmente
Se preferisci seguire questo tutorial sulla tua workstation, segui questi passaggi per installare gli strumenti necessari.
Crea l'Artificio privato
Crea un'istanza Compute Engine da un container:
gcloud compute instances create-with-container jfrog \ --container-image docker.bintray.io/jfrog/artifactory-jcr:latest \ --zone us-central1-a
SSH all'istanza. L'inizializzazione del container potrebbe richiedere un paio di minuti.
gcloud compute ssh --zone us-central1-a jfrog
Testa la connessione eseguendo questo comando. Quando il contenitore è pronto, risponde con un codice HTTP
200
, seguito da una pagina HTML.curl -i http://localhost:8081
Per creare un repository in Artifact, devi firmare il Contratto di licenza con l'utente finale (EULA) di JFrog:
curl -XPOST -vu admin:password http://localhost:8081/artifactory/ui/jcr/eula/accept
Verrà visualizzato un output simile al seguente:
* Trying 127.0.0.1:8081... * Connected to localhost (127.0.0.1) port 8081 (#0) * Server auth using Basic with user 'admin' > POST /artifactory/ui/jcr/eula/accept HTTP/1.1 > Host: localhost:8081 > Authorization: Basic …. > User-Agent: curl/7.74.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < X-JFrog-Version: Artifactory/7.19.9 71909900 < X-Artifactory-Id: …. < X-Artifactory-Node-Id: jfrog2 < SessionValid: false < Content-Length: 0 < Date: Fri, 25 Jun 2021 19:08:10 GMT * Connection #0 to host localhost left intact
Carica un file su ArtiFaib
Crea un file txt da caricare su Artifact:
echo "Hello world" >> helloworld.txt
JFrog include un repository di esempio predefinito. Esegui il caricamento nel repository utilizzando le credenziali predefinite:
curl -u admin:password -X PUT \ "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" \ -T helloworld.txt
Dovrebbe essere restituito:
{ "repo" : "example-repo-local", "path" : "/helloworld.txt", "created" : "2021-06-25T19:08:24.176Z", "createdBy" : "admin", "downloadUri" : "http://localhost:8081/artifactory/example-repo-local/helloworld.txt", "mimeType" : "text/plain", "size" : "12", "checksums" : { "sha1" : "...", "md5" : "...", "sha256" : "..." }, "originalChecksums" : { "sha256" : "..." }, "uri" : "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" }
Termina la sessione SSH digitando
exit
.Rimuovi l'indirizzo IP esterno, in modo che Artifact sia accessibile solo da fonti interne private.
gcloud compute instances delete-access-config --zone us-central1-a jfrog
Prova ad accedere ai dati da Artifact
Imposta le variabili di ambiente per archiviare l'ID e il numero del progetto:
PROJECT_ID=$(gcloud config list --format='value(core.project)') PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Concedi il ruolo Visualizzatore Compute Engine all'account di servizio Cloud Build per poter visualizzare l'indirizzo IP interno dell'istanza JFrog:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role=roles/compute.viewer
Crea un file denominato
cloudbuild.yaml
contenente il seguente codice da leggere da Artifat. Questo è il file di configurazione di compilazione.Il primo passaggio recupera l'indirizzo IP interno dall'articolo di produzione che hai creato. Il secondo passaggio invia a quell'indirizzo una richiesta di lettura del file .txt che hai creato. I passaggi sono separati per semplificare l'isolamento delle autorizzazioni e degli errori di networking. Se il primo passaggio non va a buon fine, è dovuto a un errore delle autorizzazioni e dovrai assicurarti che l'account di servizio Cloud Build abbia accesso alle risorse Compute Engine, come mostrato sopra. Se il secondo passaggio non va a buon fine, la causa è un errore di rete. Il resto di questo tutorial riguarda le configurazioni di rete.
Avvia una build utilizzando il file di configurazione della build.
Per impostazione predefinita, quando esegui una build su Cloud Build, questa viene eseguita in un ambiente sicuro e ospitato con accesso alla rete internet pubblica. Ogni build viene eseguita sul proprio worker ed è isolata dagli altri carichi di lavoro. Il pool predefinito prevede dei limiti riguardo al livello di personalizzazione dell'ambiente, in particolare per l'accesso alla rete privata. In questo esempio, stai tentando di accedere a una rete privata da un worker pubblico.
Esegui
cloudbuild.yaml
con il comando seguente. Non dovrebbe andare a buon fine.gcloud builds submit --no-source
L'output sarà simile al seguente:
BUILD Starting Step #0 - "Get Private Artifactory Address" Step #0 - "Get Private Artifactory Address": Already have image (with digest): gcr.io/cloud-builders/gcloud Finished Step #0 - "Get Private Artifactory Address" Starting Step #1 - "Pull from Private Artifactory" Step #1 - "Pull from Private Artifactory": Already have image (with digest): gcr.io/cloud-builders/curl Step #1 - "Pull from Private Artifactory": % Total % Received % Xferd Average Speed Time Time Time Current Step #1 - "Pull from Private Artifactory": Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:02:09 --:--:-- 0curl: (7) Failed to connect to 10.128.0.2 port 8081: Connection timed out Finished Step #1 - "Pull from Private Artifactory" ERROR ERROR: build step 1 "gcr.io/cloud-builders/curl" failed: step exited with non-zero status: 7
Dal timeout della connessione puoi vedere che Cloud Build non è in grado di raggiungere l'indirizzo IP interno. Per accedere a questa risorsa privata, devi utilizzare i pool privati di Cloud Build.
Crea una connessione privata tra la rete VPC di Artifact e la rete del producer di servizi
Innanzitutto, assicurati che la tua rete VPC consenta il traffico in entrata. Crea una regola firewall per consentire il traffico interno in entrata alla rete con l'istanza
jfrog
. L'intervallo10.0.0.0/16
si trova in uno spazio indirizzi privato, che utilizzerai per i pool privati di Cloud Build nei passaggi seguenti.gcloud compute firewall-rules create allow-private-pools --direction=INGRESS \ --priority=1000 --network=default --action=ALLOW --rules=all --source-ranges=10.0.0.0/16
Crea un intervallo riservato per il pool privato di Cloud Build da utilizzare per i worker. L'intervallo riservato deve trovarsi nella rete in cui si trova Artifact. In questo caso, si tratta della rete di computing
default
.Quando imposti gli intervalli riservati, hai due opzioni a disposizione. Puoi specificare esplicitamente l'intervallo fornendo
--addresses
e--prefix-length
oppure consentire a Google Cloud di eseguire il provisioning di un intervallo disponibile in base a unprefix-length
fornito.Nell'esempio seguente, imposti esplicitamente gli indirizzi in modo che corrispondano alla regola firewall che hai creato. Il pool privato utilizzerà questo spazio degli indirizzi e il traffico in entrata non verrà bloccato.
gcloud compute addresses create jfrog-ranges --global --purpose=VPC_PEERING \ --addresses=10.0.0.0 --prefix-length=16 --network=default
Esegui il peering della rete VPC con l'API Service Networking.
I pool privati di Cloud Build eseguono i worker utilizzando l'API Service Networking. Ciò ti permette di offrire i tuoi servizi gestiti su indirizzi IP interni. A tal fine, esegui il peering del VPC gestito da Google che esegue i worker del pool privato di Cloud Build con il tuo VPC. Il completamento dell'operazione potrebbe richiedere alcuni minuti.
gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com \ --ranges=jfrog-ranges --network=default
Crea il pool privato
La rete VPC
default
è ora pronta per essere utilizzata con i pool privati di Cloud Build. Crea il pool privato ed esegui il peering con la rete VPC.gcloud builds worker-pools create jfrog-pool --region us-central1 \ --peered-network=projects/${PROJECT_ID}/global/networks/default
Per eseguire la build con il nuovo pool privato, puoi passare il flag
--worker-pool
con il comandogcloud
o aggiornare la configurazione dicloudbuild.yaml
per assicurarti che utilizzi sempre il pool privato. Per questo tutorial, aggiornacloudbuild.yaml
aggiungendo la seguente opzione:Il file completo sarà simile al seguente:
Avvia la build:
gcloud builds submit --no-source
La build utilizzerà il nuovo pool privato, in peering con la rete VPC, consentendo l'accesso all'indirizzo IP interno di Artifact. L'output sarà corretto e
Step #1
dovrebbe stampare "Hello world".
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.
Se hai creato un nuovo progetto per questo tutorial, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi conservarlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare 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.
Eliminazione delle risorse del tutorial
Elimina il servizio Compute Engine di cui hai eseguito il deployment in questo tutorial:
gcloud compute instances delete jfrog
Elimina la regola firewall:
gcloud compute firewall-rules delete allow-private-pools --network=default
Rimuovi l'intervallo riservato:
gcloud compute addresses delete jfrog-ranges --global
Elimina il pool privato di Cloud Build:
gcloud builds worker-pools delete jfrog-pool
Passaggi successivi
- Scopri come configurare configurazioni di rete private di uso comune con pool privati
- Scopri come utilizzare Controlli di servizio VPC con pool privati