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.
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-aEstablecer una conexión SSH a la instancia La inicialización del contenedor puede tardar unos minutos.
gcloud compute ssh --zone us-central1-a jfrogEjecuta 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:8081Para 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/acceptVerá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.txtJFrog 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.txtSe 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 la compilación y, así, poder ver la dirección IP interna de tu instancia de JFrog:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT \ --role=roles/compute.viewerAquí, SERVICE_ACCOUNT es el correo electrónico de la cuenta de servicio.
Crea un archivo llamado
cloudbuild.yamlque 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.txtque 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.yamlcon el siguiente comando. Debe fallar.gcloud builds submit --no-sourceEl 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: 7Puedes 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/16se 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/16Crea 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
--addressesy--prefix-length, o puedes permitir que Google Cloud aprovisione un rango disponible en función de unprefix-lengthproporcionado.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=defaultRealiza 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 entre la VPC administrada por Google que ejecuta los trabajadores del grupo privado de Cloud Build y 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
defaultahora 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/defaultPara ejecutar tu compilación con el nuevo grupo privado, puedes pasar la marca
--worker-poolcon el comandogcloudo actualizar tu configuración decloudbuild.yamla 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-sourceLa 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 #1debe imprimir “Hello world”.