L'installazione di GKE su AWS può accedere alle immagini container pubbliche per impostazione predefinita. Questo argomento spiega come utilizzare GKE su AWS con un repository di immagini container privato, come Artifact Registry.
A partire dalla versione 1.28, GKE su AWS offre un modo per estrarre immagini private da Artifact Registry o Container Registry senza dover utilizzare un segreto Kubernetes. Per maggiori dettagli, consulta Utilizzare un registry di immagini private senza Secrets.Prima di iniziare
Per eseguire i passaggi in questa pagina, completa prima quanto segue:
- Crea un cluster.
- Crea un pool di nodi.
Crea un'immagine Docker ed eseguirne il push su Artifact Registry. Gli esempi in questa pagina utilizzano il contenitore
hello-app
. Per creare questo contenitore, segui i passaggi per creare un'immagine container e eseguire il push dell'immagine Docker in Artifact Registry, che fanno parte della documentazione di GKE su Google Cloud .
Cerca le immagini su Artifact Registry
Per completare il resto di questi passaggi, devi avere un'immagine contenitore. Per ottenere il nome delle immagini del container, segui questi passaggi:
Configura lo strumento a riga di comando Docker per eseguire l'autenticazione su Artifact Registry con Google Cloud SDK:
gcloud auth configure-docker
Lo strumento a riga di comando
gcloud
registra un assistente per le credenziali per tutti i registry Docker supportati da Google.Verifica che Artifact Registry includa un'immagine con il comando
docker images
.docker images
Docker si connette ad Artifact Registry e restituisce le immagini disponibili nel repository. Ad esempio, la risposta seguente mostra un'immagine contenitore denominata
hello-app
nel repositoryPROJECT_NAME
suus-west1-docker.pkg.dev
.REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app v1 f7cfe0d58569 21 minutes ago 11.5MB
Se non hai un'immagine contenitore pronta, creane una seguendo i passaggi descritti in Eseguire il deployment di un'applicazione containerizzata.
Creare un account di servizio
I cluster si autenticano utilizzando un account di servizio Identity and Access Management (IAM).
Per creare un nuovo account di servizio:
Crea un account di servizio IAM con Google Cloud CLI.
gcloud iam service-accounts create ACCOUNT_NAME
Sostituisci ACCOUNT_NAME con il nome del nuovo Google Cloud account di servizio.
Concedi all'account di servizio le autorizzazioni Artifact Registry.
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.reader
Sostituisci quanto segue:
PROJECT_NAME
con il tuo progetto Google CloudACCOUNT_NAME
con il nome del tuo Google Cloud account di servizio
Scarica la chiave dell'account di servizio dell'account.
gcloud iam service-accounts keys create registry-access-key.json \ --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
Sostituisci quanto segue:
PROJECT_NAME
ACCOUNT_NAME
Ora è tutto pronto per configurare il cluster di utenti in modo che si connetta ad Artifact Registry.
Salva la chiave nel cluster
Per fornire la chiave per l'autenticazione in Artifact Registry, salva la chiave dell'account di servizio come secret Kubernetes seguendo questi passaggi:
Usa
kubectl
per creare il secret.kubectl create secret docker-registry registry-secret \ --docker-server=LOCATION-docker.pkg.dev \ --docker-username=_json_key \ --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --docker-password="$(cat registry-access-key.json)"
Sostituisci quanto segue:
LOCATION
: la posizione regionale o multiregionale del repository.PROJECT_NAME
ACCOUNT_NAME
Elimina la copia locale della chiave dell'account di servizio.
rm registry-access-key.json
Ora puoi fare riferimento a questo secret nei tuoi carichi di lavoro.
Creare un carico di lavoro con un'immagine privata
Per utilizzare un'immagine da un repository di container privato con un carico di lavoro, imposta il campo spec.imagePullSecrets
sul nome del tuo secret. Questo campo si trova in posizioni diverse per i pod e i deployment.
Creazione di un pod
Per creare un pod che possa accedere al registry dei container, imposta il campo spec.imagePullSecrets
sul nome del secret.
Crea un pod che specifica
spec.imagePullSecrets
.apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
Sostituisci quanto segue:
POD_NAME
: il nome del podCONTAINER_NAME
: il nome del contenitore all'interno del podLOCATION
PROJECT_NAME
Ad esempio, per estrarre l'immagine
hello-app
, copia il seguente codice YAML in un file denominatohello-pod.yaml
.apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
Applica la configurazione al cluster con
kubectl
.kubectl apply -f hello-pod.yaml
Verifica che il pod sia in esecuzione con
kubectl get
.kubectl get pod/hello-pod
La risposta include un pod con stato
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Creazione di un deployment
Per utilizzare un repository privato in un deployment, specifica
imagePullSecret
all'interno del modello.Ad esempio, per configurare un deployment che utilizza l'immagine
hello-app
, crea un file denominatohello-deployment.yaml
con i seguenti contenuti:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 env: - name: "PORT" value: "50001" imagePullSecrets: - name: registry-secret
Sostituisci quanto segue:
LOCATION
PROJECT_NAME
Applica la configurazione al cluster con
kubectl
.kubectl apply -f hello-deployment.yaml
Verifica che il deployment sia in esecuzione con
kubectl pods
.kubectl get pods --selector=app=products
L'output mostra tre pod
Running
.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m
Esegui la pulizia
Per rimuovere le risorse create in questa pagina, esegui questi comandi:
kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml
Passaggi successivi
- Leggi la panoramica di Artifact Registry.