Container Registry mit Google Cloud verwenden

Um Ihre Build- und Bereitstellungsworkflows zu vereinfachen, sind einige Google Cloud-Dienstkonten und Laufzeitumgebungen mit Zugriffsberechtigungen auf Container vorkonfiguriert, die im selben Projekt gespeichert sind.

Auf dieser Seite sind die gängigen Integrationen in Google Cloud-Produkte und die zugehörigen Anforderungen für den Zugriff auf Container zusammengefasst.

Allgemeine Zugriffsanforderungen

Standardmäßig werden Dienstkonten für einige gängige Integrationen mit Cloud Storage-Berechtigungen für den Zugriff auf Container Registry innerhalb desselben Projekts konfiguriert.

Für das von Compute Engine-VMs verwendete Dienstkonto, einschließlich VMs in Google Kubernetes Engine-Clustern, basiert der Zugriff sowohl auf IAM-Berechtigungen als auch auf Zugriffsbereichen.

In folgenden Fällen müssen Sie Berechtigungen selbst konfigurieren oder ändern:

  • Sie verwenden ein Dienstkonto in einem Projekt, um in einem anderen Projekt auf Container Registry zuzugreifen.
  • Sie verwenden ein Standarddienstkonto mit Lesezugriff auf den Speicher, möchten jedoch Images sowohl per Pull als auch per Push übertragen.
  • Sie verwenden ein benutzerdefiniertes Dienstkonto für die Interaktion mit Container Registry.

Weitere Informationen finden Sie in den produktspezifischen Abschnitten.

Cloud Build

Das Cloud Build-Dienstkonto ist standardmäßig berechtigt, Images per Pull und Push zu übertragen, wenn sich Container Registry im selben Projekt befindet.

Sie müssen die entsprechenden Berechtigungen in den folgenden Fällen selbst konfigurieren:

  • Cloud Build befindet sich in einem anderen Projekt als die Repositories, auf die die Builds zugreifen sollen.
  • Ihre Builds verwenden ein anderes Dienstkonto als das Cloud Build-Standarddienstkonto. In diesem Fall müssen Sie dem Dienstkonto Berechtigungen zum Zugriff auf Container Registry gewähren.

Compute Engine

Wenn sich die VM-Instanz und Container Registry im selben Google Cloud-Projekt befinden, wird das Compute Engine-Standarddienstkonto mit Berechtigungen zum Abrufen von Images konfiguriert.

Wenn sich die VM-Instanz in einem anderen Projekt befindet oder wenn die VM-Instanz ein anderes Dienstkonto verwendet, müssen Sie dem Dienstkonto die entsprechenden Berechtigungen für den Zugriff auf den von der Container Registry verwendeten Storage Bucket gewähren.

Bei einer Compute Engine-VM ist standardmäßig der read-only-Zugriffsbereich für Storage-Buckets konfiguriert. Zum Hochladen privater Docker-Images muss die VM-Instanz den read-write-Speicherzugriffsbereich haben.

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.

Erforderliche Berechtigung

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.

Wenn sich der Cluster in einem anderen Projekt befindet oder wenn die VMs im Cluster ein anderes Dienstkonto verwenden, müssen Sie dem Dienstkonto die entsprechenden Berechtigungen für den Zugriff auf den von der Container Registry verwendeten Storage-Bucket erteilen.

Bei einer Compute Engine-VM ist standardmäßig der read-only-Zugriffsbereich für Storage-Buckets konfiguriert. Zum Hochladen privater Docker-Images muss die VM-Instanz den read-write-Speicherzugriffsbereich haben.

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]

Dabei gilt:

  • [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 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.

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.

Mit Cloud Build können Sie das Erstellen von Containern automatisieren, diese mit Push in Container Registry übertragen und in App Engine bereitstellen.

Erforderliche Berechtigung

Das App Engine-Standarddienstkonto verfügt standardmäßig über Berechtigungen zum Abrufen von und Übertragen in Repositories im selben Projekt.

Wenn sich App Engine in einem anderen Projekt befindet, müssen Sie dem App Engine-Dienstkonto Berechtigungen für den Zugriff auf das Container Registry-Repository gewähren.

In App Engine bereitstellen

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

  1. Erstellen Sie die App Engine-Konfigurationsdatei für Ihre Anwendung.
  2. Erstellen Sie ein Docker-Image und übertragen Sie es per Push in Ihr Repository. Sie können Cloud Build verwenden, um Ihren Container zu erstellen und per Push in Ihr Repository zu übertragen.
  3. Stellen Sie das Image in App Engine bereit, indem Sie den folgenden Befehl ausführen:

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

Dabei gilt:

  • [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 Container Registry identifiziert. Wenn Sie kein Tag angeben, sucht Container Registry nach dem Standard-Tag latest.