Usa un registro di immagini private
La tua installazione GKE su Azure può accedere alle immagini container pubbliche per impostazione predefinita. Questo argomento spiega come utilizzare GKE su Azure con un repository privato di immagini di container, come Artifact Registry.
Prima di iniziare
Per seguire i passaggi descritti in questa pagina, devi prima completare le seguenti operazioni:
- 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 container, segui i passaggi per creare un'immagine container ed eseguire il push dell'immagine Docker in Artifact Registry, parte della documentazione di GKE su Google Cloud.
Cerca immagini su Artifact Registry
Per completare gli altri passaggi, è necessaria un'immagine container. Per recuperare il nome delle immagini container, segui questi passaggi:
Configura lo strumento a riga di comando Docker per eseguire l'autenticazione in Artifact Registry con Google Cloud SDK:
gcloud auth configure-docker
Lo strumento a riga di comando
gcloud
registra un helper per le credenziali per tutti i registry Docker supportati da Google.Conferma 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 tuo repository. Ad esempio, la risposta seguente mostra un'immagine container 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 container pronta, creane una seguendo la procedura descritta in Deployment di un'applicazione containerizzata.
Creare un account di servizio
I cluster vengono autenticati 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 account di servizio Google Cloud.
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 dell'account di servizio Google Cloud
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 utente per la connessione 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 di 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 località a livello di una o più regioni 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.
Crea 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 Container Registry, imposta il campo spec.imagePullSecrets
sul nome del tuo secret.
Crea un pod che specifichi
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 container all'interno del podLOCATION
PROJECT_NAME
Ad esempio, per eseguire il pull dell'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, devi specificare
imagePullSecret
all'interno del modello.Ad esempio, per configurare un deployment che utilizza l'immagine
hello-app
, crea un file denominatohello-deployment.yaml
con il contenuto seguente: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
Conferma 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 che hai creato 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.