In dieser Anleitung wird beschrieben, wie Sie Images aus Artifact Registry abrufen, um sie in Google Kubernetes Engine bereitzustellen. Wenn Sie in selbst gehosteten oder Drittanbieter-Kubernetes Diensten bereitstellen möchten, müssen Sie die Authentifizierung konfigurieren, bevor Sie Google Cloud Images aus Artifact Registry abrufen. Informationen zur Authentifizierung bei Google Cloud Kubernetes Arbeitslasten außerhalb Google Cloudfinden Sie unter Workload Identity-Föderation mit Kubernetes konfigurieren.
Mit Google Kubernetes Engine können Sie Images direkt aus Docker-Repositories abrufen. Einige Versionen bieten eine vorkonfigurierte Unterstützung zum Abrufen von Images aus Artifact Registry-Docker-Repositories.
Voraussetzungen
In diesem Abschnitt werden die Voraussetzungen für die Integration mit GKE beschrieben.
Berechtigungen
GKE verwendet die folgenden Standardeinstellungen, wenn Sie Knotenpools oder Cluster erstellen:
- Das Compute Engine-Standarddienstkonto ist die Identität für Knoten.
-
Abhängig von der Konfiguration Ihrer Organisationsrichtlinie kann dem Standarddienstkonto für Ihr Projekt automatisch die Rolle „Editor“ zugewiesen werden. Wir empfehlen dringend, die automatische Rollenzuweisung zu deaktivieren, indem Sie die Einschränkung der Organisationsrichtlinien
iam.automaticIamGrantsForDefaultServiceAccountserzwingen. Wenn Sie Ihre Organisation nach dem 3. Mai 2024 erstellt haben, wird diese Einschränkung standardmäßig erzwungen.Wenn Sie die automatische Rollenzuweisung deaktivieren, müssen Sie entscheiden, welche Rollen den Standard Dienstkonten zugeteilt werden sollen, und dann diese Rollen selbst zuweisen.
Wenn das Standarddienstkonto bereits die Rolle „Bearbeiter“ hat, sollten Sie die Rolle „Bearbeiter“ durch weniger strikte Rollen ersetzen.Verwenden Sie zum sicheren Ändern der Rollen des Dienstkontos Policy Simulator, um die Auswirkungen der Änderung zu sehen, und weisen Sie die entsprechenden Rollen zu und widerrufen Sie sie.
- Knoten, die Sie mit dem Standarddienstkonto erstellen, haben die Compute Engine Standardzugriffsbereiche, einschließlich schreibgeschütztem Zugriff auf den Speicher. Sie können die Zugriffsbereiche für vorhandene Knoten nicht ändern.
Wenn Sie die Zuweisung der einfachen Rolle „Bearbeiter“ deaktiviert haben, weisen Sie dem Compute Engine-Standarddienstkonto die Rolle „Artifact Registry-Leser“ zu (roles/artifactregistry.reader).
Wenn Sie diese Standardeinstellungen verwenden und dem Compute Engine-Standarddienstkonto die Rolle „Artifact Registry-Leser“ (roles/artifactregistry.reader) zuweisen, kann GKE Images aus Artifact Registry-Repositories im selben Google Cloud Projekt abrufen. Wenn
Sie Images von Knoten übertragen, Images zwischen Projekten abrufen oder übertragen, ein
vom Nutzer bereitgestelltes Dienstkonto verwenden oder andere Anforderungen haben, die von den Standardeinstellungen
nicht unterstützt werden, finden Sie in der Dokumentation zur Zugriffssteuerung
Informationen zum Konfigurieren des Zugriffs.
Wenn Fehler aufgrund verweigerter Berechtigungen auftreten, lesen Sie den Abschnitt 4xx-Fehler.
GKE-Version
In der folgenden Tabelle sind die erforderlichen Mindestversionen für GKE aufgeführt, um Cluster zu erstellen, die Standardberechtigungen zum Herunterladen von Containern aus Docker-Repositories im selben Projekt haben.
| Version | Mindestens erforderlicher Patch |
|---|---|
| 1,14 | 1.14.10-gke.22 |
| 1,15 | 1.15.9-gke.8 |
Wenn Ihre GKE-Version älter als die Mindestversion ist, müssen Sie Kubernetes-ImagePullSecrets konfigurieren, damit GKE Images abrufen kann.
Wenn sich GKE in einem anderen Projekt als Artifact Registry befindet, gewähren Sie dem Dienstkonto, das von Ihrem GKE-Knoten verwendet wird, Artifact Registry-Berechtigungen. Standardmäßig verwenden Knoten das Compute Engine-Standarddienstkonto.
Image ausführen
Mit dem folgenden Befehl führen Sie ein Artifact Registry-Image in einem Google Kubernetes Engine-Cluster aus:
kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
Dabei gilt:
-
LOCATIONist der regionale oder multiregionale Standort des Repositorys. PROJECTist Ihre Google Cloud console Projekt-ID. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.REPOSITORYist der Name des Repositorys, in dem das Image gespeichert ist.IMAGEist der Name des Images im Repository.TAGist das Tag für die Image-Version, die Sie abrufen möchten.
Weitere Informationen zu Kubernetes-Befehlen finden Sie in der Übersicht zu kubectl. Overview of kubectl.
Fehlerbehebung bei Knoten-Images von Containerd
Ab GKE-Knotenversion 1.19 ist das Standardknoten-Image
für Linux-Knoten die Variante von Container-Optimized OS mit containerd
(cos_containerd) statt der Variante von Container-Optimized OS mit
Docker (cos).
Die Docker-Binärdatei ist auf Linux-Knoten verfügbar, die containerd als Laufzeit verwenden. Wir raten aber davon ab, sie zu verwenden. Docker verwaltet die Container nicht, die Kubernetes auf containerd-Knoten ausführt. Daher können Sie Docker nicht verwenden, um ausgeführte Kubernetes-Container mit Docker-Befehlen oder der Docker API aufzurufen oder mit ihnen zu interagieren.
Zum Debugging und zur Problembehebung auf Linux-Knoten können Sie mithilfe des speziell für Kubernetes-Containerlaufzeiten erstellten portablen Befehlszeilentools mit containerd interagieren: crictl. crictl unterstützt allgemeine Funktionen, mit denen Sie Container und Images aufrufen, Logs lesen und Befehle in den Containern ausführen können.
Weitere Informationen finden Sie im crictl-Nutzerhandbuch und in der GKE-Dokumentation zu containerd.
Bei Windows Server-Knoten wird der Containerd-Daemon als Windows-Dienst mit dem Namen containerd ausgeführt. Logs sind im folgenden Logverzeichnis verfügbar: C:\etc\kubernetes\logs\containerd.log und werden im Log-Explorer unter LOG NAME: "container-runtime" angezeigt.
Aus einem öffentlichen Artifact Registry-Repository abrufen
Nachdem Sie ein Image in einem GKE-Cluster mit containerd-Knoten bereitgestellt haben, können Sie über SSH eine Verbindung zu einer VM-Instanz herstellen und crictl-Befehle zur Fehlerbehebung ausführen.
Für öffentliche Artifact Registry-Repositories ist keine Authentifizierung erforderlich. crictl
kann auch verwendet werden, um Images in privaten Artifact Registry-Repositories abzurufen.
Console
Rufen Sie in der Google Cloud console die Seite VM-Instanzen auf.
Klicken Sie in der Liste der virtuellen Maschineninstanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf den Pfeil neben SSH.

Wählen Sie in den Drop-down-Optionen „In Browserfenster öffnen“ oder die gewünschte Verbindungsmethode aus.
Google Cloud console öffnet ein neues Terminalfenster. Verwenden Sie
crictl, um ein Image aus Artifact Registry abzurufen:crictl pull IMAGE_LOCATION:TAG
Die Ausgabe sieht so aus:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Wenn Sie ein Image aus einem privaten Artifact Registry-Repository abrufen, müssen Sie sich beim Repository authentifizieren. Sie können ein Zugriffstoken verwenden, um Ihre Anmeldedaten anzugeben.
gcloud
Prüfen Sie, ob Sie die neueste Version des Google Cloud CLI haben.
gcloud components update
Stellen Sie eine Verbindung zur VM her.
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Dabei gilt:
PROJECT_ID: Die ID des Projekts, das die VM enthältZONE: Der Name der Zone, in der sich die VM befindetVM_NAME: Der Name der VM
Wenn Sie Standardeigenschaften für das Google Cloud CLI festgelegt haben, können Sie die Flags
--projectund--zonebei diesem Befehl weglassen. Beispiel:gcloud compute ssh VM_NAME
Wenn Sie noch keinen SSH-Schlüssel erstellt haben, wird mit SSH-Keygen einer für Sie generiert. Geben Sie eine Passphrase ein oder lassen Sie das Feld leer, wenn Sie dazu aufgefordert werden.
Verwenden Sie
crictl, um ein Image aus Artifact Registry abzurufen:crictl pull IMAGE_LOCATION:TAG
Die Ausgabe sieht so aus:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Wenn Sie ein Image aus einem privaten Artifact Registry-Repository abrufen, müssen Sie sich beim Repository authentifizieren. Sie können ein Zugriffstoken verwenden, um Ihre Anmeldedaten anzugeben.
Aus einem privaten Artifact Registry-Repository abrufen
Console
Rufen Sie in der Google Cloud console die Seite VM-Instanzen auf.
Klicken Sie in der Liste der virtuellen Maschineninstanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf den Pfeil neben SSH.

Wählen Sie in den Drop-down-Optionen „In Browserfenster öffnen“ aus.
Google Cloud console öffnet ein neues Terminalfenster. Generieren Sie mit
curlein Zugriffstoken für das Compute Engine-Dienstkonto.curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
Die Ausgabe sieht so aus:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Kopieren Sie den Wert von
access_tokenaus der zurückgegebenen Ausgabe ohne die Anführungszeichen.Rufen Sie das Image mit
crictl pull --credsund dem im vorherigen Schritt kopierten Wertaccess_tokenab.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
Die Ausgabe sieht so aus:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
gcloud
Prüfen Sie, ob Sie die neueste Version des Google Cloud CLI haben.
gcloud components update
Stellen Sie eine Verbindung zur VM her.
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Ersetzen Sie die folgenden Variablen:
PROJECT_ID: Die ID des Projekts, das die VM enthältZONE: Der Name der Zone, in der sich die VM befindetVM_NAME: Der Name der VM
Wenn Sie Standardeigenschaften für das Google Cloud CLI festgelegt haben, können Sie die Flags
--projectund--zonebei diesem Befehl weglassen. Beispiel:gcloud compute ssh VM_NAME
Wenn Sie noch keinen SSH-Schlüssel erstellt haben, wird mit SSH-Keygen einer für Sie generiert. Geben Sie eine Passphrase ein oder lassen Sie das Feld leer, wenn Sie dazu aufgefordert werden.
Generieren Sie mit
curlein Zugriffstoken für das Compute Engine-Dienstkonto.curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
Die Ausgabe sieht so aus:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Kopieren Sie den Wert von
access_tokenaus der zurückgegebenen Ausgabe ohne die Anführungszeichen.Rufen Sie das Image mit
crictl pull --credsund dem im vorherigen Schritt kopierten Wertaccess_tokenab.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
Die Ausgabe sieht so aus:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Mit crictl können Entwickler ihre Laufzeit debuggen, ohne Kubernetes-Komponenten einrichten zu müssen. Eine vollständige Liste der Befehle finden Sie in der crictl Dokumentation
und in der Kubernetes-Dokumentation zum Debugging.