Container Registry mit Google Cloud verwenden

Compute-Ressourcen von Google Cloud sind in Container Registry eingebunden, um den Zugriff zu erleichtern. In diesem Dokument werden die erforderlichen Zugriffseinstellungen zum Hoch- und Herunterladen von Images in Google Cloud beschrieben.

Anforderungen

Für VMs, die zum Hoch- und Herunterladen von Images verwendet werden, müssen die richtigen Berechtigungen und Zugriffsbereiche konfiguriert werden.

IAM-Berechtigungen

IAM-Berechtigungen müssen für das Dienstkonto konfiguriert werden, das auf den Container Registry-Storage-Bucket zugreift.

  • Zum Herunterladen privater Docker-Images muss das von VM-Instanzen verwendete Dienstkonto die read-Berechtigung für den Storage-Bucket des Images haben.
  • Zum Hochladen privater Docker-Images muss das von VM-Instanzen verwendete Dienstkonto read-write- oder full-control-Berechtigungen für den Storage-Bucket des Images haben.

Weitere Informationen zu den erforderlichen Berechtigungen finden Sie unter Nutzern und anderen Projekten Zugriff auf eine Registry gewähren.

Zugriffsbereiche

Zugriffsbereiche definieren die standardmäßigen OAuth-Bereiche, die in Anfragen vom gcloud-Tool verwendet werden. Damit eine erfolgreiche Arbeit mit Container Registry möglich ist, muss für VM-Instanzen, die Images übertragen oder abrufen, der richtige Speicherzugriffsbereich konfiguriert sein.

Wenn Sie nur Images herunterladen möchten, legen Sie die read-only-Berechtigung für Ihre Storage-Buckets fest. Wenn Sie Images hoch- und herunterladen möchten, legen Sie die read-write-Berechtigung für Ihre Storage-Buckets fest.

Bereiche auf einer VM-Instanz festlegen

Verwenden Sie die Option --scope, um eine neue VM-Instanz zu erstellen und den Bereich anzugeben.

  • Für eine Instanz mit schreibgeschützten Berechtigungen führen Sie den folgenden Befehl aus:

    gcloud compute instances create INSTANCE \
        --scopes https://www.googleapis.com/auth/devstorage.read_only
        
  • Für eine Instanz mit Lese- und Schreibberechtigungen führen Sie den folgenden Befehl aus:

    gcloud compute instances create INSTANCE \
        --scopes https://www.googleapis.com/auth/devstorage.read_write
        

Um das Dienstkonto und die Zugriffsbereiche einer Instanz zu ändern, muss die Instanz vorübergehend gestoppt werden. Um Ihre Instanz zu beenden, lesen Sie die Dokumentation zum Beenden einer Instanz. Nachdem Sie das Dienstkonto oder die Zugriffsbereiche geändert haben, denken Sie an den Neustart der Instanz. Verwenden Sie einen der folgenden Befehle, um das Dienstkonto oder die Zugriffsbereiche der angehaltenen Instanz zu ändern.

  • Um schreibgeschützte Berechtigungen festzulegen, führen Sie den folgenden Befehl aus:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
        
  • Um Schreib- und Leseberechtigungen festzulegen, führen Sie den folgenden Befehl aus:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
        

Bereiche in einem Google Kubernetes Engine-Cluster festlegen

Neue Google Kubernetes Engine-Cluster werden standardmäßig mit schreibgeschützten Berechtigungen für Storage-Buckets erstellt. Wenn Sie beim Erstellen eines Google Kubernetes Engine-Clusters den read-write-Speicherbereich festlegen möchten, verwenden Sie die Option --scopes. Der folgende Befehl erstellt beispielsweise einen Cluster mit den Bereichen bigquery,

`storage-rw`, and `compute-ro`:

        gcloud container clusters create example-cluster \
      --scopes=bigquery,storage-rw,compute-ro
    

Weitere Informationen zu Bereichen, die Sie beim Erstellen eines neuen Clusters festlegen können, finden Sie in der Dokumentation zum Befehl gcloud container clusters create.

Compute Engine

Wenn sich die VM-Instanz zum Hoch- und Herunterladen von Images und der Container Registry-Storage-Bucket im selben Google Cloud-Projekt befinden, wird das Compute Engine-Standarddienstkonto mit entsprechenden Berechtigungen zum Hoch- und Herunterladen von Images konfiguriert. Befindet sich die VM-Instanz in einem anderen Projekt oder verwendet die Instanz ein anderes Dienstkonto, müssen Sie den Zugriff auf den vom Repository verwendeten Storage-Bucket konfigurieren.

Bei einer Compute Engine-VM ist standardmäßig der read-only-Zugriffsbereich für Storage-Buckets konfiguriert. Zum Hochladen von privaten Docker-Images muss für Ihre Instanz der read-write-Speicherzugriffsbereich wie unter Zugriffsbereiche beschrieben konfiguriert sein.

Container-optimierte Compute Engine-Instanzen

Informationen darüber, wie Sie eine Container-optimierte Compute Engine-Instanz mithilfe eines Images aus Ihrer Registry starten, finden Sie unter Docker-Container mit cloud-config starten.

Weitere Informationen finden Sie unter Instanzen erstellen und konfigurieren.

Google Kubernetes Engine

Google Kubernetes Engine verwendet das auf den VM-Instanzen von Clusterknoten konfigurierte Dienstkonto, um Images zu übertragen und abzurufen.

Wenn sich der Google Kubernetes Engine-Cluster und der Container Registry-Storage-Bucket im selben Google Cloud-Projekt befinden, wird das Compute Engine-Standarddienstkonto mit den entsprechenden Berechtigungen zum Hoch- und Herunterladen von Images konfiguriert. Befindet sich der Cluster in einem anderen Projekt oder verwenden die VMs im Cluster ein anderes Dienstkonto, müssen Sie den Zugriff auf den vom Repository verwendeten Storage-Bucket konfigurieren.

Bei einer Compute Engine-VM ist standardmäßig der read-only-Zugriffsbereich für Storage-Buckets konfiguriert. Zum Hochladen von privaten Docker-Images muss für Ihre Instanz der read-write-Speicherzugriffsbereich wie unter Zugriffsbereiche beschrieben konfiguriert sein.

Image ausführen

Mit dem folgenden Befehl führen Sie ein Container Registry-Image in einem Google Kubernetes Engine-Cluster aus:

kubectl run [NAME] --image=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
    

wobei

  • [NAME] ist der Name der Ressource.
  • [HOSTNAME] wird in der Konsole unter Location aufgeführt. Dies kann gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io sein.
  • [PROJECT-ID] ist Ihre Projekt-ID der Google Cloud Console. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.
  • [IMAGE] ist der Image-Name in Container Registry.
  • [TAG] ist das Tag, das die Version des Images in der Container Registry identifiziert. Wenn Sie kein Tag angeben, sucht Container Registry nach dem Standard-Tag latest.

Weitere Informationen zu Kubernetes-Befehlen finden Sie in der Übersicht zu kubectl. Wenn sich Ihre Images in einem anderen Projekt befinden, müssen Sie ausdrücklich Lesezugriff auf das Dienstkonto gewähren, das vom Google Kubernetes Engine-Cluster in dem Storage-Bucket verwendet wird, in dem die Images gespeichert sind.

Flexible App Engine-Umgebung

Mithilfe der flexiblen App Engine-Umgebung können Sie eine vorhandene Laufzeit (z. B. Java 8) anpassen oder Ihre eigene Laufzeit angeben. Dazu stellen Sie ein benutzerdefiniertes Docker-Image oder Dockerfile bereit.

Ihre Container-Images werden in der flexiblen Umgebung mithilfe von Cloud Build automatisch erstellt und in Container Registry gespeichert.

Wenn sich die VM-Instanz zum Hoch- und Herunterladen von Images und der Container Registry-Storage-Bucket im selben Google Cloud-Projekt befinden, wird das Compute Engine-Standarddienstkonto mit den entsprechenden Berechtigungen zum Hoch- und Herunterladen von Images konfiguriert. Befinden sich die VMs in einem anderen Projekt oder verwenden die VMs ein anderes Dienstkonto, müssen Sie den Zugriff auf den vom Repository verwendeten Storage-Bucket konfigurieren.

Bei einer Compute Engine-VM ist standardmäßig der read-only-Zugriffsbereich für Storage-Buckets konfiguriert. Zum Hochladen von privaten Docker-Images muss für Ihre Instanz der read-write-Speicherzugriffsbereich wie unter Zugriffsbereiche beschrieben konfiguriert sein.

In App Engine bereitstellen

Ein Image, das von Container Registry gehostet wird, kann mit dem gcloud-Befehlszeilentool in App Engine bereitgestellt werden.

Durch Ausführen des Befehls gcloud beta app gen-config im Stammverzeichnis Ihres Images lässt sich die app.yaml-Datei, die für die Bereitstellung in App Engine benötigt wird, automatisch erstellen. Sie können sie aber auch selbst anlegen.

Sobald Sie die App Engine-Konfigurationsdatei sowie Ihr Docker-Image erstellt und das Image in Container Registry hochgeladen haben, können Sie es mit folgendem Befehl in App Engine bereitstellen:

gcloud app deploy --image-url=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
    

wobei

  • [HOSTNAME] wird in der Konsole unter Location aufgeführt. Dies kann gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io sein.
  • [PROJECT-ID] ist Ihre Projekt-ID der Google Cloud Console. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.
  • [IMAGE] ist der Image-Name in Container Registry.
  • [TAG] ist das Tag, das die Version des Images in der Container Registry identifiziert. Wenn Sie kein Tag angeben, sucht Container Registry nach dem Standard-Tag latest.