Auf dieser Seite wird gezeigt, wie Sie mit privaten Cloud Build-Pools auf Ressourcen von einem privaten Virtual Private Cloud-Netzwerk aus zugreifen.
In dieser Anleitung erstellen Sie ein JFrog Artifactory in Compute Engine, das in einem privaten VPC-Netzwerk gehostet wird, und konfigurieren dann einen Build, der in einem privaten Pool läuft, um auf Daten aus diesem Artifactory zuzugreifen. Jfog Artifactory ist ein Open-Source-Repository für binäre Repositories.
Ziele
- Jfrog Artifactory in Compute Engine einrichten
- Datei in das Artifactory hochladen
- Privaten Pool erstellen
- Netzwerk des Diensteanbieters, der den privaten Pool hostet, mit dem Virtual Private Cloud-Netzwerk von Artifactory verbinden
- Build-Konfigurationsdatei schreiben, um auf die Daten in Artifactory zuzugreifen
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Compute Engine
- Cloud Build
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
- 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.
Option A: Cloud Shell verwenden
Sie können diese Anleitung mit Cloud Shell ausführen, das mit der in dieser Anleitung verwendeten Google Cloud CLI vorinstalliert wird. Wenn Sie Cloud Shell verwenden, müssen Sie diese Befehlszeilentools nicht auf Ihrer Workstation installieren.
So verwenden Sie Cloud Shell:
Öffnen Sie die Google Cloud Console.
Klicken Sie im oberen Bereich der Google Cloud Console auf Cloud Shell aktivieren .
Im unteren Bereich der Google Cloud Console wird ein neues Feld mit einer Cloud Shell-Sitzung und einer Befehlszeilen-Eingabeaufforderung geöffnet.
Option B: Befehlszeilentools lokal verwenden
Wenn Sie diese Anleitung lieber auf Ihrer Workstation durcharbeiten möchten, folgen Sie für die Installation der erforderlichen Tools diesen Schritten:
Privates Artifactory erstellen
Erstellen Sie eine Compute Engine-Instanz aus einem Container:
gcloud compute instances create-with-container jfrog \ --container-image docker.bintray.io/jfrog/artifactory-jcr:latest \ --zone us-central1-a
SSH-Verbindung mit der Instanz herstellen Es kann einige Minuten dauern, bis der Container initialisiert ist.
gcloud compute ssh --zone us-central1-a jfrog
Testen Sie die Verbindung mit dem folgenden Befehl. Sobald der Container bereit ist, antwortet er mit dem HTTP-Code
200
, gefolgt von einer HTML-Seite.curl -i http://localhost:8081
Damit Sie ein Repository im Artifactory erstellen können, müssen Sie die JFrog-EULA (Endnutzer-Lizenzvereinbarung) signieren:
curl -XPOST -vu admin:password http://localhost:8081/artifactory/ui/jcr/eula/accept
Die Ausgabe sollte in etwa so aussehen:
* 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
Datei in das Artifactory hochladen
Erstellen Sie eine TXT-Datei, die in das Artifactory hochgeladen werden soll:
echo "Hello world" >> helloworld.txt
JFrog umfasst ein Standard-Beispiel-Repository. Laden Sie es mit den Standardanmeldedaten in das Repository hoch:
curl -u admin:password -X PUT \ "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" \ -T helloworld.txt
In diesem Fall sollte Folgendes zurückgegeben werden:
{ "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" }
Beenden Sie die SSH-Sitzung. Geben Sie dazu
exit
ein.Entfernen Sie die externe IP-Adresse, sodass auf das Artefakt nur über private interne Quellen zugegriffen werden kann.
gcloud compute instances delete-access-config --zone us-central1-a jfrog
Auf die Daten aus dem Artifactory zugreifen
Legen Sie Umgebungsvariablen zum Speichern Ihrer Projekt-ID und Projektnummer fest:
PROJECT_ID=$(gcloud config list --format='value(core.project)') PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Weisen Sie dem Dienstkonto, das Sie für den Build verwenden, die Rolle Compute Engine-Betrachter zu, damit die interne IP-Adresse der JFrog-Instanz aufgerufen werden kann:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT \ --role=roles/compute.viewer
Dabei ist SERVICE_ACCOUNT die E-Mail-Adresse des Dienstkontos.
Erstellen Sie eine Datei mit dem Namen
cloudbuild.yaml
, die den folgenden Code enthält, der aus dem Artifactory gelesen wird. Dies ist die Build-Konfigurationsdatei.Im ersten Schritt wird die interne IP-Adresse aus dem von Ihnen erstellten Artifactory abgerufen. Im zweiten Schritt wird eine Anfrage zum Lesen der von Ihnen erstellten Datei
helloworld.txt
an diese Adresse gesendet. Die Schritte sind getrennt, um Berechtigungen und Netzwerkfehler zu isolieren. Wenn der erste Schritt fehlschlägt, liegt dies an einem Berechtigungsfehler. Sie müssen dafür sorgen, dass das Build-Dienstkonto Zugriff auf die Compute Engine-Ressourcen hat, wie im vorherigen Schritt beschrieben. Wenn der zweite Schritt fehlschlägt, liegt ein Netzwerkfehler vor. Im weiteren Verlauf dieser Anleitung werden die Netzwerkkonfigurationen behandelt.Starten Sie mit der Build-Konfigurationsdatei einen Build:
Wenn Sie einen Build auf Cloud Build ausführen, wird er standardmäßig in einer sicheren, gehosteten Umgebung mit Zugriff auf das öffentliche Internet ausgeführt. Jeder Build wird auf einem eigenen Worker ausgeführt und von anderen Arbeitslasten isoliert. Der Standardpool bietet nur begrenzte Möglichkeiten zur Anpassung der Umgebung, insbesondere im Hinblick auf den privaten Netzwerkzugriff. In diesem Beispiel versuchen Sie, von einem öffentlichen Worker aus auf ein privates Netzwerk zuzugreifen.
Führen Sie die
cloudbuild.yaml
mit dem folgenden Befehl aus. Es sollte fehlschlagen.gcloud builds submit --no-source
Die Ausgabe sieht etwa so aus:
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
Sie sehen am Zeitlimit der Verbindung, dass Cloud Build die interne IP-Adresse nicht erreichen kann. Für den Zugriff auf diese private Ressource müssen Sie private Cloud Build-Pools verwenden.
Private Verbindung zwischen dem VPC-Netzwerk von Artifactory und dem Diensterstellernetzwerk erstellen
Prüfen Sie zuerst, ob Ihr VPC-Netzwerk eingehenden Traffic zulässt. Erstellen Sie eine Firewallregel, um eingehenden internen Traffic zum Netzwerk mit der Instanz
jfrog
zuzulassen. Der Bereich10.0.0.0/16
befindet sich in einem privaten Adressbereich, den Sie in den folgenden Schritten für private Cloud Build-Pools verwenden.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
Erstellen Sie einen reservierten Bereich für den privaten Cloud Build-Pool, um ihn für die Worker zu verwenden. Der reservierte Bereich muss sich in dem Netzwerk befinden, in dem sich Ihr Artefakt befindet. In diesem Fall ist es das Compute-Netzwerk
default
.Beim Festlegen Ihrer reservierten Bereiche haben Sie zwei Möglichkeiten. Sie können den Bereich entweder explizit angeben. Geben Sie dazu
--addresses
und--prefix-length
an. Oder erlauben Sie Google Cloud, einen verfügbaren Bereich basierend auf einem bereitgestelltenprefix-length
bereitzustellen.Im folgenden Beispiel legen Sie die Adressen explizit so fest, dass sie der von Ihnen erstellten Firewallregel entsprechen. Der private Pool verwendet diesen Adressbereich und der eingehende Traffic wird nicht blockiert.
gcloud compute addresses create jfrog-ranges --global --purpose=VPC_PEERING \ --addresses=10.0.0.0 --prefix-length=16 --network=default
Verbinden Sie durch Peering das VPC-Netzwerk mit der Service Networking API.
Private Cloud Build-Pools führen Worker mithilfe der Service Networking API aus. Dadurch können Sie Ihre verwalteten Dienste über interne IP-Adressen anbieten. Dies wird durch Peering der von Google verwalteten VPC erreicht, auf der die privaten Cloud Build-Pool-Worker mit Ihrer eigenen VPC ausgeführt werden. Dies kann einige Minuten dauern.
gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com \ --ranges=jfrog-ranges --network=default
Privaten Pool erstellen
Das VPC-Netzwerk
default
kann jetzt mit privaten Cloud Build-Pools verwendet werden. Erstellen Sie den privaten Pool und verbinden Sie ihn mit dem VPC-Netzwerk.gcloud builds worker-pools create jfrog-pool --region us-central1 \ --peered-network=projects/${PROJECT_ID}/global/networks/default
Um Ihren Build mit dem neuen privaten Pool auszuführen, können Sie entweder das Flag
--worker-pool
mit demgcloud
-Befehl übergeben oder Ihrecloudbuild.yaml
-Konfiguration aktualisieren, damit sie immer den privaten Pool verwendet. Aktualisieren Sie für diese Anleitungcloudbuild.yaml
. Fügen Sie dazu die folgende Option hinzu:Die vollständige Datei sieht so aus:
Build starten:
gcloud builds submit --no-source
Der Build verwendet den neuen privaten Pool, der mit dem VPC-Netzwerk verbunden ist, sodass er auf die interne IP-Adresse des Artifactory zugreifen kann. Die Ausgabe ist erfolgreich und
Step #1
sollte "Hello world" ausgeben.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- 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.
Anleitungsressourcen löschen
Löschen Sie den Compute Engine-Dienst, den Sie in dieser Anleitung bereitgestellt haben:
gcloud compute instances delete jfrog
Löschen Sie die Firewallregel:
gcloud compute firewall-rules delete allow-private-pools --network=default
Entfernen Sie den reservierten Bereich:
gcloud compute addresses delete jfrog-ranges --global
Löschen Sie den privaten Cloud Build-Pool:
gcloud builds worker-pools delete jfrog-pool