ZETA Guard Provisioning OCI-Image erstellen und in die Artifact Registry hochladen

Dieser Leitfaden beschreibt den schrittweisen Prozess, um aus einem lokalen Verzeichnis ein OCI-konformes Container-Image zu erstellen, es zu konfigurieren und anschließend in eine private Google Cloud Artifact Registry hochzuladen.

Voraussetzungen

  • buildah ist auf Ihrem System installiert.
  • Die gcloud CLI ist installiert und für Ihr Projekt konfiguriert.
  • Sie befinden sich im Arbeitsverzeichnis (~/dev/zeta/examples), das ein Unterverzeichnis mit den zu verpackenden Daten (./zeta-guard-provisioning) enthält.

Schritt 1: Authentifizierung bei der Google Cloud

Bevor Sie mit der Google Cloud interagieren können, müssen Sie sich authentifizieren. Dieser Schritt öffnet einen Browser zur Anmeldung.

gcloud auth login

Navigieren Sie anschließend in Ihr Arbeitsverzeichnis.

cd dev/zeta/examples/

Schritt 2: OCI-Container-Image erstellen

In diesem Schritt wird das Image von Grund auf mit buildah erstellt.

2.1. Arbeitscontainer aus einem Basis-Image erstellen**

Wir verwenden busybox:stable als minimales Basis-Image, das grundlegende Shell-Werkzeuge enthält. Der Name des temporären Arbeitscontainers wird in einer Variable gespeichert.

new_container=$(buildah from busybox:stable)

Sie können den Namen des Arbeitscontainers überprüfen:

echo $new_container
# Beispiel-Ausgabe: working-container-1

2.2. Daten in den Container kopieren

Kopieren Sie den Inhalt des lokalen Verzeichnisses ./zeta-guard-provisioning in ein gleichnamiges Verzeichnis innerhalb des Containers.

buildah copy $new_container ./zeta-guard-provisioning ./zeta-guard-provisioning

2.3. Image-Metadaten konfigurieren

Legen Sie Metadaten für das Image fest, wie den Standardbefehl und den Autor. Der Befehl /bin/true sorgt dafür, dass der Container bei einem direkten Start sofort erfolgreich beendet wird, was für reine Datencontainer sinnvoll ist.

# Setzt den Standardbefehl, der beim Start ausgeführt wird
buildah config --cmd "/bin/true" $new_container

# Setzt den Autor des Images
buildah config --author "gematik" $new_container

2.4. Arbeitscontainer als Image finalisieren (Commit)

Speichern Sie die Änderungen aus dem Arbeitscontainer als neues, lokales OCI-Image.

buildah commit --format oci $new_container zeta-guard-provisioning:test-latest
  • --format oci: Stellt sicher, dass das Image im OCI-Format erstellt wird.
  • zeta-guard-provisioning:test-latest: Der Name und das Tag des neuen lokalen Images.

Schritt 3: Lokales Image überprüfen

Listen Sie die lokal verfügbaren Buildah-Images auf, um zu bestätigen, dass die Erstellung erfolgreich war.

buildah images

Beispiel-Ausgabe:

REPOSITORY                          TAG           IMAGE ID       CREATED          SIZE
localhost/zeta-guard-provisioning   test-latest   be1f1014e66a   15 seconds ago   3.15 MB

Schritt 4: Image für die Artifact Registry taggen

Um das Image in eine bestimmte Registry hochladen zu können, muss es mit dem vollständigen Pfad dieser Registry getaggt werden.

buildah tag zeta-guard-provisioning:test-latest europe-west3-docker.pkg.dev/gematik-pt-zeta-test/zeta-dcr/zeta-guard-provisioning:test-latest
  • Quelle: zeta-guard-provisioning:test-latest (das gerade erstellte lokale Image)
  • Ziel: europe-west3-docker.pkg.dev/gematik-pt-zeta-test/zeta-dcr/zeta-guard-provisioning:test-latest (der vollständige Name in Ihrer Artifact Registry)

Eine erneute Überprüfung mit buildah images zeigt nun beide Tags für dieselbe Image-ID an.

Schritt 5: Image in die Google Artifact Registry hochladen (Push)

Laden Sie das getaggte Image in Ihre private Registry hoch. Buildah verwendet die zuvor durch gcloud eingerichtete Authentifizierung.

Hinweis: Falls der Push fehlschlägt, stellen Sie sicher, dass Sie Docker für die Authentifizierung bei Ihrer Registry konfiguriert haben mit: gcloud auth configure-docker europe-west3-docker.pkg.dev

buildah push europe-west3-docker.pkg.dev/gematik-pt-zeta-test/zeta-dcr/zeta-guard-provisioning:test-latest

Die Ausgabe zeigt den Fortschritt des Uploads der einzelnen Layer und des Manifests an.

Beispiel-Ausgabe bei Erfolg:

Getting image source signatures
Copying blob 759f409aed7b done   |
Copying config ee38604b00 done   |
Writing manifest to image destination

Ergebnis: Das Image mit Ihren Provisionierungsdaten ist nun sicher in Ihrer Google Cloud Artifact Registry gespeichert und kann von Diensten wie Kubernetes abgerufen werden.

Schritt 6: Image-Inhalt anzeigen

Um den Inhalt des erstellten OCI-Images anzuzeigen, können Sie den folgenden Befehl verwenden:

buildah run zeta-guard-provisioning:test-latest -- ls -lR /zeta-guard-provisioning

Dies listet alle Dateien und Verzeichnisse im /zeta-guard-provisioning-Verzeichnis des Images auf.

Beispiel-Ausgabe:

/zeta-guard-provisioning:
total 3088
-rwxr-xr-x    1 root     root        573768 Nov 12 09:28 ECC-RSA_TSL-test.xml
-rwxr-xr-x    1 root     root       2535847 Nov 12 09:28 TrustedTpm.cab
-rw-r--r--    1 root     root           349 Nov 13 07:35 federation-master.yaml
drwxr-xr-x    2 root     root          4096 Nov 13 13:18 policy-engine-bundle-keys
-rwxr-xr-x    1 root     root         34340 Nov 12 09:28 roots.json

/zeta-guard-provisioning/policy-engine-bundle-keys:
total 12
-r--------    1 root     root          1081 Nov 13 13:17 GEM.KOMP-CA61-TEST-ONLY.pem
-r--------    1 root     root          1028 Nov 13 13:17 GEM.RCA7-TEST-ONLY.pem
-r--------    1 root     root          1069 Nov 13 13:17 zeta_artifact_reg_nist.pem