En esta página, se muestra cómo usar grupos privados de Cloud Build para acceder a los recursos desde una red de nube privada virtual privada.
En este instructivo, crearás un JFrog Artifactory en Compute Engine alojado en una red de VPC privada y, luego, configurarás una compilación que se ejecute en un grupo privado para acceder a los datos de ese Artifactory. JFrog Artifactory es un administrador de repositorios binarios de código abierto.
Objetivos
- Configurar JFrog Artifactory en Compute Engine
- Subir un archivo a Artifactory
- Crear un grupo privado
- Realizar un intercambio de tráfico entre la red del productor de servicios que aloja el grupo privado en la red de nube privada virtual de Artifactory
- Escribe un archivo de configuración de compilación para acceder a los datos en Artifactory.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Compute Engine
- Cloud Build
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Cloud Build, Service Networking APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Cloud Build, Service Networking APIs.
Opción A: Usa Cloud Shell
Puedes seguir este instructivo con Cloud Shell, que viene preinstalado con Google Cloud CLI. en este instructivo. Si usas Cloud Shell, no necesitas instalar estas herramientas de línea de comandos en tu estación de trabajo.
Para usar Cloud Shell, sigue estos pasos:
Ve a la consola de Google Cloud.
Haz clic en el botón Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Se abrirá una sesión de Cloud Shell en un marco nuevo en la parte inferior de la consola de Google Cloud, que mostrará una ventana de la línea de comandos.
Opción B: Usa las herramientas de línea de comandos de manera local
Si prefieres seguir este instructivo en tu estación de trabajo, sigue estos pasos para instalar las herramientas necesarias.
Crea el Artifactory privado
Crear una instancia de Compute Engine desde un contenedor:
gcloud compute instances create-with-container jfrog \ --container-image docker.bintray.io/jfrog/artifactory-jcr:latest \ --zone us-central1-a
Establecer una conexión SSH a la instancia La inicialización del contenedor puede tardar unos minutos.
gcloud compute ssh --zone us-central1-a jfrog
Ejecuta el siguiente comando para probar la conexión: Una vez que el contenedor esté listo, responderá con un código HTTP
200
, seguido de una página HTML.curl -i http://localhost:8081
Para crear un repositorio en Artifactory, debes firmar el CLUF (Contrato de licencia para el usuario final) de JFrog:
curl -XPOST -vu admin:password http://localhost:8081/artifactory/ui/jcr/eula/accept
Verás un resultado similar al siguiente:
* 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
Subir un archivo a Artifactory
Crea un archivo txt para subir a Artifactory:
echo "Hello world" >> helloworld.txt
JFrog viene con un repositorio de ejemplo predeterminado. Sube al repositorio con las credenciales predeterminadas:
curl -u admin:password -X PUT \ "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" \ -T helloworld.txt
Se debería mostrar lo siguiente:
{ "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" }
Para finalizar la sesión SSH, escribe
exit
.Quita la dirección IP externa, por lo que solo se podrá acceder a Artifactory desde fuentes internas privadas.
gcloud compute instances delete-access-config --zone us-central1-a jfrog
Intenta acceder a los datos de Artifactory
Configura las variables de entorno para almacenar el ID y el número del proyecto:
PROJECT_ID=$(gcloud config list --format='value(core.project)') PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Otorga el rol Visualizador de Compute Engine a la cuenta de servicio que usas para que la compilación pueda ver la dirección IP interna de tu JFrog instancia:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT \ --role=roles/compute.viewer
Donde SERVICE_ACCOUNT es el correo electrónico de la cuenta de servicio.
Crea un archivo llamado
cloudbuild.yaml
que contenga el siguiente código para leer desde Artifactory. Este es el archivo de configuración de compilación.En el primer paso, se recupera la dirección IP interna de Artifactory que creaste. El segundo paso envía una solicitud a esa dirección para leer el archivo
helloworld.txt
que creaste. Los pasos están separados para facilitar el aislamiento de permisos y errores de red. Si el primer paso falla, se debe a un error de permisos, y deberás asegurarte de que la cuenta de servicio de compilación tenga acceso a los recursos de Compute Engine, como se muestra en el paso anterior. Si el segundo paso falla, se debe a un error de red. En el resto de este instructivo, se abordan las opciones de configuración de red.Usa un comando para comenzar a compilar mediante el archivo de configuración de compilación:
De forma predeterminada, cuando ejecutas una compilación en Cloud Build, la compilación se ejecuta en un entorno alojado y seguro con acceso a la Internet pública. Cada compilación se ejecuta en su propio trabajador y está aislada de otras cargas de trabajo. El grupo predeterminado tiene límites sobre cuánto puedes personalizar el entorno, especialmente en cuanto al acceso a la red privada. En este ejemplo, intentas acceder a una red privada desde un trabajador público.
Ejecuta
cloudbuild.yaml
con el siguiente comando. Debe fallar.gcloud builds submit --no-source
El resultado se verá similar a lo siguiente:
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
Puedes ver por el tiempo de espera de conexión que Cloud Build no puede acceder a la dirección IP interna. Para acceder a este recurso privado, debes usar grupos privados de Cloud Build.
Crea una conexión privada entre la red de VPC de Artifactory y la red del productor de servicios
Primero, asegúrate de que tu red de VPC permita la entrada. Crea una regla de firewall para permitir el tráfico interno entrante a la red con la instancia
jfrog
. El rango10.0.0.0/16
se encuentra en un espacio de direcciones privadas, que usarás para los grupos privados de Cloud Build en los pasos a continuación.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 rango reservado para el grupo privado de Cloud Build a fin de usarlo con los trabajadores. El rango reservado debe estar en la red en la que se encuentra tu Artifactory. En este caso, es la red de procesamiento de
default
.Cuando configuras tus rangos reservados, tienes dos opciones. Puedes especificar el rango de forma explícita si proporcionas
--addresses
y--prefix-length
, o puedes permitir que Google Cloud aprovisione un rango disponible en función de unprefix-length
proporcionado.En el siguiente ejemplo, se configuran explícitamente las direcciones para que coincidan con la regla de firewall que creaste. El grupo privado usará este espacio de direcciones y el tráfico entrante no se bloqueará.
gcloud compute addresses create jfrog-ranges --global --purpose=VPC_PEERING \ --addresses=10.0.0.0 --prefix-length=16 --network=default
Realiza un intercambio de tráfico entre la red de VPC y la API de Herramientas de redes de servicios.
Los grupos privados de Cloud Build ejecutan trabajadores con la API de Service Networking. Esto te permite ofrecer tus servicios administrados en direcciones IP internas. Esto se logra intercambiando tráfico de la VPC administrada por Google que ejecuta los trabajadores del grupo privado de Cloud Build con tu propia VPC. Puede tardar unos minutos en completarse.
gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com \ --ranges=jfrog-ranges --network=default
Crea el grupo privado
La red de VPC
default
ahora está lista para usarse con grupos privados de Cloud Build. Crea el grupo privado y usa el intercambio de tráfico con la red de VPC.gcloud builds worker-pools create jfrog-pool --region us-central1 \ --peered-network=projects/${PROJECT_ID}/global/networks/default
Para ejecutar tu compilación con el nuevo grupo privado, puedes pasar la marca
--worker-pool
con el comandogcloud
o actualizar tu configuración decloudbuild.yaml
a fin de asegurarte de que siempre use el grupo privado. Para este instructivo, agrega la siguiente opción a fin de actualizarcloudbuild.yaml
:El archivo completo se verá de la siguiente manera:
Comienza la compilación:
gcloud builds submit --no-source
La compilación usará el nuevo grupo privado, que intercambia tráfico con la red de VPC, lo que le permitirá acceder a la dirección IP interna de Artifactory. El resultado será correcto y
Step #1
debe imprimir “Hello world”.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra los recursos del instructivo
Usa este comando para borrar el servicio de Compute Engine que implementaste en este instructivo:
gcloud compute instances delete jfrog
Borra la regla de firewall:
gcloud compute firewall-rules delete allow-private-pools --network=default
Quita el rango reservado:
gcloud compute addresses delete jfrog-ranges --global
Borra el grupo privado de Cloud Build:
gcloud builds worker-pools delete jfrog-pool
¿Qué sigue?
- Obtén más información para configurar las opciones de configuración de red privada con grupos privados de uso general.
- Obtén información para usar los controles del servicio de VPC con grupos privados.