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'istanza di JFrog Artifactory in Compute Engine ospitata in una rete VPC privata, quindi configurerai una build in esecuzione in un pool privato per accedere ai dati da Artifactory. Jfrog Artifactory è un gestore di repository binari open source.
Obiettivi
- Configurare un'istanza di Jfrog Artifactory su Compute Engine
- Caricare un file in Artifactory
- Creare un pool privato
- Eseguire il peering della rete del producer di servizi che ospita il pool privato alla rete Virtual Private Cloud di Artifactory
- Scrivere un file di configurazione di compilazione per accedere ai dati in Artifactory
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 Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per eseguire, testare ed eseguire il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine, Cloud Build, Service Networking APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine, Cloud Build, Service Networking APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
Opzione A: utilizzare Cloud Shell
Puoi seguire questo tutorial utilizzando Cloud Shell, dove è già installato Google Cloud CLI utilizzato in questo tutorial. Se utilizzi Cloud Shell, non è necessario installare questi strumenti a riga di comando sulla tua workstation.
Per utilizzare Cloud Shell:
Vai alla Google Cloud console.
Fai clic sul pulsante Attiva Cloud Shell
nella parte superiore della Google Cloud finestra della console.All'interno di un nuovo frame nella parte inferiore della Google Cloud console si apre una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando.
Opzione B: utilizzare gli strumenti a riga di comando in locale
Se preferisci seguire questo tutorial sulla tua workstation, segui questi passaggi per installare gli strumenti necessari.
Creare l'istanza privata di Artifactory
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-aAccedi all'istanza tramite SSH. L'inizializzazione del container potrebbe richiedere alcuni minuti.
gcloud compute ssh --zone us-central1-a jfrogVerifica la connessione eseguendo il seguente comando. Quando il container è pronto, risponderà con un codice HTTP
200, seguito da una pagina HTML.curl -i http://localhost:8081Per creare un repository in Artifactory, 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/acceptVerrà 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
Caricare un file in Artifactory
Crea un file txt da caricare in Artifactory:
echo "Hello world" >> helloworld.txtJFrog include un repository di esempio predefinito. Carica nel repository utilizzando le credenziali predefinite:
curl -u admin:password -X PUT \ "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" \ -T helloworld.txtDovrebbe 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 Artifactory sia accessibile solo da origini interne private.
gcloud compute instances delete-access-config --zone us-central1-a jfrog
Provare ad accedere ai dati da Artifactory
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 al account di servizio che utilizzi per la build per poter visualizzare l'indirizzo IP interno della tua istanza JFrog:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT \ --role=roles/compute.viewerDove SERVICE_ACCOUNT è l'indirizzo email del account di servizio.
Crea un file denominato
cloudbuild.yamlcontenente il seguente codice per leggere da Artifactory. Questo è il file di configurazione di compilazione.Il primo passaggio recupera l'indirizzo IP interno da Artifactory che hai creato. Il secondo passaggio invia una richiesta a questo indirizzo per leggere il file
helloworld.txtche hai creato. I passaggi sono separati per semplificare l'isolamento delle autorizzazioni e degli errori di rete. Se il primo passaggio non riesce, è dovuto a un errore di autorizzazione e dovrai assicurarti che il account di servizio di build abbia accesso alle risorse Compute Engine, come mostrato nel passaggio precedente. Se il secondo passaggio non riesce, è dovuto a un errore di rete. Il resto di questo tutorial riguarda le configurazioni di rete.Avvia una build utilizzando il file di configurazione di build.
Per impostazione predefinita, quando esegui una build su Cloud Build, la build viene eseguita in un ambiente ospitato sicuro con accesso a internet pubblico. Ogni build viene eseguita sul proprio worker ed è isolata da altri carichi di lavoro. Il pool predefinito ha limiti alla quantità di personalizzazione dell'ambiente, in particolare per quanto riguarda l'accesso alla rete privata. In questo esempio, stai tentando di accedere a una rete privata da un worker pubblico.
Esegui
cloudbuild.yamlcon il seguente comando. L'operazione dovrebbe non riuscire.gcloud builds submit --no-sourceL'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: 7Puoi vedere dal timeout della connessione 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.
Creare una connessione privata tra la rete VPC di Artifactory e la rete del producer di servizi
Innanzitutto, assicurati che la rete VPC consenta l'ingresso. Crea una regola firewall per consentire il traffico interno in entrata alla rete con l'istanza
jfrog. L'intervallo10.0.0.0/16si trova in uno spazio di indirizzi privati, 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/16Crea un intervallo riservato che il pool privato di Cloud Build utilizzerà per i worker. L'intervallo riservato deve trovarsi nella rete in cui si trova Artifactory. In questo caso, si tratta della rete di calcolo
default.Hai due opzioni quando imposti gli intervalli riservati. Puoi specificare l'intervallo in modo esplicito fornendo
--addressese--prefix-lengthoppure puoi consentire Google Cloud di eseguire il provisioning di un intervallo disponibile in base a unprefix-lengthfornito.Nell'esempio seguente, imposti in modo esplicito gli indirizzi in modo che corrispondano alla regola firewall che hai creato. Il pool privato utilizzerà questo spazio di 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=defaultEsegui il peering della rete VPC con l'API Service Networking.
I pool privati di Cloud Build eseguono i worker utilizzando l'API Service Networking. In questo modo puoi offrire i tuoi servizi gestiti su indirizzi IP interni. Questo risultato si ottiene eseguendo 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
Creare il pool privato
La rete VPC
defaultè ora pronta per l'uso 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/defaultPer eseguire la build con il nuovo pool privato, puoi passare il flag
--worker-poolcon il comandogcloudo aggiornare la configurazionecloudbuild.yamlper assicurarti che utilizzi sempre il pool privato. Per questo tutorial, aggiornacloudbuild.yamlaggiungendo la seguente opzione:Il file completo sarà simile al seguente:
Avvia la build:
gcloud builds submit --no-sourceLa build utilizzerà il nuovo pool privato, con peering con la rete VPC, che gli consentirà di accedere all'indirizzo IP interno di Artifactory. L'output avrà esito positivo e
Step #1dovrebbe stampare "Hello world".
Libera spazio
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, eliminalo. 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 creato per il tutorial.
Per eliminare il progetto:
- Nella Google Cloud console, 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 progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina le risorse del tutorial
Elimina il servizio Compute Engine di cui hai eseguito il deployment in questo tutorial:
gcloud compute instances delete jfrogElimina la regola firewall:
gcloud compute firewall-rules delete allow-private-pools --network=defaultRimuovi l'intervallo riservato:
gcloud compute addresses delete jfrog-ranges --globalElimina il pool privato di Cloud Build:
gcloud builds worker-pools delete jfrog-pool
Passaggi successivi
- Scopri come configurare le configurazioni di rete privata di uso comune con i pool privati
- Scopri come utilizzare i Controlli di servizio VPC con i pool privati