Questa guida descrive come estrarre immagini da Artifact Registry per il deployment in Google Kubernetes Engine. Se vuoi eseguire il deployment in servizi Kubernetes self-hosted o di terze parti, devi configurare l'autenticazione prima di estrarre le Google Cloud immagini da Artifact Registry. Per eseguire l'autenticazione ai Google Cloud workload Kubernetes esterni Google Cloud, consulta Configurare la federazione delle identità per i carichi di lavoro con Kubernetes.
Google Kubernetes Engine può estrarre immagini direttamente dai repository Docker. Alcune versioni includono il supporto preconfigurato per l'estrazione di immagini dai repository Docker di Artifact Registry.
Requisiti
Questa sezione descrive i requisiti per l'integrazione con GKE.
Autorizzazioni
Quando crei node pool o cluster, GKE utilizza le seguenti impostazioni predefinite:
- Il service account predefinito di Compute Engine è l'identità dei nodi.
-
A seconda della configurazione della policy dell'organizzazione, al account di servizio predefinito potrebbe essere assegnato automaticamente il ruolo Editor nel progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli forzando l'applicazione del vincolo
iam.automaticIamGrantsForDefaultServiceAccountsdella policy dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene imposto per impostazione predefinita.Se disattivi la concessione automatica dei ruoli, devi decidere quali ruoli concedere ai service account predefiniti, quindi concedere personalmente questi ruoli.
Se il account di servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituire il ruolo Editor con ruoli meno permissivi.Per modificare in sicurezza i ruoli del account di servizio, utilizza Policy Simulator per vedere l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.
- I nodi creati con il account di servizio predefinito hanno gli ambiti di accesso predefiniti di Compute Engine , incluso l' accesso in sola lettura allo spazio di archiviazione. Non puoi modificare gli ambiti di accesso sui nodi esistenti.
Se hai disattivato la concessione del ruolo Editor di base, allora
concedi al account di servizio predefinito di Compute Engine il ruolo Lettore di Artifact Registry
(roles/artifactregistry.reader).
Se utilizzi queste impostazioni predefinite e concedi al account di servizio predefinito di Compute Engine
il ruolo Lettore di Artifact Registry (roles/artifactregistry.reader), allora
GKE può estrarre immagini dai
repository di Artifact Registry nello stesso Google Cloud progetto. Se
devi eseguire il push di immagini dai nodi, estrarre o eseguire il push di immagini tra progetti, utilizzare un
account di servizio fornito dall'utente o hai altre esigenze non supportate dalle impostazioni predefinite,
consulta la documentazione sul controllo dell'accesso
per informazioni sulla configurazione dell'accesso.
Se riscontri errori "Autorizzazione negata", consulta Errori 4xx.
Versione GKE
La seguente tabella elenca le versioni minime di GKE richieste per creare cluster con autorizzazioni predefinite per estrarre container dai repository Docker nello stesso progetto.
| Versione | Patch minima richiesta |
|---|---|
| 1,14 | 1.14.10-gke.22 |
| 1,15 | 1.15.9-gke.8 |
Se la tua versione di GKE è precedente alla versione minima, devi configurare imagePullSecrets di Kubernetes per consentire a GKE di estrarre le immagini.
Se GKE si trova in un progetto diverso da Artifact Registry, concedi le autorizzazioni di Artifact Registry al account di servizio utilizzato dai nodi GKE. Per impostazione predefinita, i nodi utilizzano il service account predefinito di Compute Engine .
Eseguire un'immagine
Puoi eseguire un'immagine di Artifact Registry su un cluster Google Kubernetes Engine utilizzando il seguente comando:
kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
dove:
-
LOCATIONè la località regionale o multiregionale del repository. PROJECTè l'ID progetto della Google Cloud console console. Se l'ID progetto contiene due punti (:), consulta Progetti basati sul dominio.REPOSITORYè il nome del repository in cui è archiviata l'immagine.IMAGEè il nome dell'immagine nel repository.TAGè il tag della versione dell'immagine che vuoi estrarre.
Per ulteriori informazioni sui comandi Kubernetes, consulta Panoramica di kubectl.
Risolvere i problemi relativi alle immagini dei nodi containerd
A partire dalla versione 1.19 dei nodi GKE, l'immagine del nodo predefinita
per i nodi Linux è la variante Container-Optimized OS con containerd
(cos_containerd) anziché la variante Container-Optimized OS con
Docker (cos).
Sebbene il file binario Docker sia disponibile sui nodi Linux che utilizzano containerd come runtime, non è consigliabile utilizzarlo. Docker non gestisce i container eseguiti da Kubernetes sui nodi containerd, pertanto non puoi utilizzarlo per visualizzare o interagire con i container Kubernetes in esecuzione utilizzando i comandi Docker o l'API Docker.
Per il debug o la risoluzione dei problemi sui nodi Linux, puoi interagire con containerd utilizzando lo strumento a riga di comando portatile creato per i runtime container Kubernetes: crictl. crictl supporta funzionalità comuni per visualizzare container e immagini, leggere i log ed eseguire comandi nei container.
Per ulteriori informazioni, consulta la guida per l'utente di crictl e la documentazione di GKE su containerd.
Per i nodi Windows Server, il daemon containerd viene eseguito come servizio Windows denominato containerd. I log sono disponibili nella seguente directory dei log:
C:\etc\kubernetes\logs\containerd.log e vengono visualizzati in Esplora log
in LOG NAME: "container-runtime".
Estrarre da un repository Artifact Registry pubblico
Dopo aver eseguito il deployment di un'immagine in un cluster GKE con nodi containerd, puoi connetterti a un'istanza VM utilizzando SSH ed eseguire i comandi crictl per la risoluzione dei problemi.
I repository Artifact Registry pubblici non richiedono l'autenticazione. crictl
può essere utilizzato anche per estrarre immagini nei repository Artifact Registry privati.
Console
Nella Google Cloud console, vai alla pagina Istanze VM.
Nell'elenco delle istanze della macchina virtuale, fai clic sulla freccia accanto a SSH nella riga dell'istanza a cui vuoi connetterti.

Seleziona "Apri in finestra del browser" o il metodo di connessione che preferisci dalle opzioni del menu a discesa.
Google Cloud La console apre una nuova finestra del terminale. Utilizza
crictlper estrarre un'immagine da Artifact Registry:crictl pull IMAGE_LOCATION:TAG
L'output è simile al seguente:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Quando estrai un'immagine da un repository privato di Artifact Registry, devi autenticarti nel repository. Puoi utilizzare un token di accesso per fornire le tue credenziali.
gcloud
Assicurati di avere l'ultima versione di Google Cloud CLI.
gcloud components update
Connettiti alla VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Sostituisci quanto segue:
PROJECT_ID: l'ID del progetto che contiene la VMZONE: il nome della zona in cui si trova la VMVM_NAME: il nome della VM
Se hai impostato proprietà predefinite per Google Cloud CLI, puoi omettere i flag
--projecte--zoneda questo comando. Ad esempio:gcloud compute ssh VM_NAME
Se non hai ancora creato una chiave SSH, SSH Keygen ne genererà una per te. Inserisci una passphrase o lascia vuoto quando richiesto.
Utilizza
crictlper estrarre un'immagine da Artifact Registry:crictl pull IMAGE_LOCATION:TAG
L'output è simile al seguente:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Quando estrai un'immagine da un repository privato di Artifact Registry, devi autenticarti nel repository. Puoi utilizzare un token di accesso per fornire le tue credenziali.
Estrarre da un repository Artifact Registry privato
Console
Nella Google Cloud console, vai alla pagina Istanze VM.
Nell'elenco delle istanze della macchina virtuale, fai clic sulla freccia accanto a SSH nella riga dell'istanza a cui vuoi connetterti.

Seleziona "Apri in finestra del browser" dalle opzioni del menu a discesa.
Google Cloud La console apre una nuova finestra del terminale. Genera un token di accesso del account di servizio Compute Engine utilizzando
curl.curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
L'output è simile al seguente esempio:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Copia il valore di
access_tokendall'output restituito senza le virgolette.Estrai l'immagine utilizzando
crictl pull --credse il valoreaccess_tokencopiato nel passaggio precedente.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
L'output è simile al seguente:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
gcloud
Assicurati di avere l'ultima versione di Google Cloud CLI.
gcloud components update
Connettiti alla VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Sostituisci le seguenti variabili:
PROJECT_ID: l'ID del progetto che contiene la VMZONE: il nome della zona in cui si trova la VMVM_NAME: il nome della VM
Se hai impostato proprietà predefinite per Google Cloud CLI, puoi omettere i flag
--projecte--zoneda questo comando. Ad esempio:gcloud compute ssh VM_NAME
Se non hai ancora creato una chiave SSH, SSH Keygen ne genererà una per te. Inserisci una passphrase o lascia vuoto quando richiesto.
Genera un token di accesso del account di servizio Compute Engine utilizzando
curl.curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
L'output è simile al seguente:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Copia il valore di
access_tokendall'output restituito senza le virgolette.Estrai l'immagine utilizzando
crictl pull --credse il valoreaccess_tokencopiato nel passaggio precedente.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
L'output è simile al seguente:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
crictl consente agli sviluppatori di eseguire il debug del runtime senza dover configurare i componenti Kubernetes. Per un elenco completo dei comandi, consulta la crictl documentazione
e la documentazione di debug di Kubernetes.