Per impostazione predefinita, l'installazione di GKE su AWS può accedere alle immagini container pubbliche. 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 secret Kubernetes. Per i dettagli, vedi Utilizzare un registro di immagini privato senza secret.Prima di iniziare
Per eseguire i passaggi descritti in questa pagina, completa prima i seguenti passaggi:
- Crea un cluster.
- Crea un node pool.
Crea un'immagine Docker ed eseguine il push su Artifact Registry. Gli esempi in questa pagina utilizzano il container
hello-app. Per creare questo container, segui i passaggi descritti in Creare un'immagine container ed Eseguire il push dell'immagine Docker in Artifact Registry, parte della documentazione di GKE su Google Cloud AWS.
Controlla le immagini in Artifact Registry
Per completare il resto di questi passaggi, hai bisogno di un'immagine container. Per ottenere il nome delle immagini 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-dockerLo strumento a riga di comando
gcloudregistra 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 imagesDocker si connette ad Artifact Registry e restituisce le immagini disponibili nel repository. Ad esempio, la risposta riportata di seguito mostra un'immagine container denominata
hello-appnel repositoryPROJECT_NAMEsuus-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 i passaggi descritti in Eseguire il deployment di un'applicazione containerizzata.
Creare un account di servizio
I cluster eseguono l'autenticazione 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_NAMESostituisci ACCOUNT_NAME con il nome del nuovo Google Cloud account di servizio.
Concedi le autorizzazioni di Artifact Registry all'account di servizio .
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.readerSostituisci quanto segue:
PROJECT_NAMEcon il tuo Google Cloud progettoACCOUNT_NAMEcon 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.comSostituisci quanto segue:
PROJECT_NAMEACCOUNT_NAME
Ora puoi configurare il cluster utente per la connessione ad Artifact Registry.
Salva la chiave nel cluster
Utilizza
kubectlper 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à regionale o multiregionale location del repository.PROJECT_NAMEACCOUNT_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 secret. Questo campo si trova in
posizioni diverse per pod e
deployment.
Creare un pod
Per creare un pod che possa accedere al container registry, imposta il campo spec.imagePullSecrets sul nome del 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-secretSostituisci quanto segue:
POD_NAME: il nome del podCONTAINER_NAME: il nome del container all'interno del podLOCATIONPROJECT_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-secretApplica la configurazione al cluster con
kubectl.kubectl apply -f hello-pod.yamlVerifica che il pod sia in esecuzione con
kubectl get.kubectl get pod/hello-podLa risposta include un pod con lo 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
imagePullSecretall'interno del modello.Ad esempio, per configurare un deployment che utilizza l'immagine
hello-app, crea un file denominatohello-deployment.yamlcon 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-secretSostituisci quanto segue:
LOCATIONPROJECT_NAME
Applica la configurazione al cluster con
kubectl.kubectl apply -f hello-deployment.yamlVerifica che il deployment sia in esecuzione con
kubectl pods.kubectl get pods --selector=app=productsL'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
Libera spazio
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.