Utilizzo di un registro di immagini private

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, ad esempio 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 maggiori dettagli, vedi Utilizzare un registro di immagini private senza secret.

Prima di iniziare

Per eseguire i passaggi descritti in questa pagina, completa prima le seguenti operazioni:

Controllare le immagini su Artifact Registry

Per completare il resto di questi passaggi, hai bisogno di un'immagine container. Ottieni il nome delle tue immagini container seguendo questi passaggi:

  1. 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.

  2. 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 tuo repository. Ad esempio, la risposta seguente mostra un'immagine container denominata hello-app nel repository PROJECT_NAME su us-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 del contenitore pronta, creane una seguendo i passaggi descritti in Deployment di un'applicazione in contenitori.

Crea un service account

I cluster eseguono l'autenticazione utilizzando un service account Identity and Access Management (IAM).

Per creare un nuovo account di servizio:

  1. Crea un account di servizio IAM con Google Cloud CLI.

    gcloud iam service-accounts create ACCOUNT_NAME
    

    Sostituisci ACCOUNT_NAME con il nome del account di servizio account Google Cloud.

  2. 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 Cloud
    • ACCOUNT_NAME con il nome del tuo service account Google Cloud
  3. Scarica la chiave del service account 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 puoi configurare il cluster utente per connetterti ad Artifact Registry.

Salva la chiave nel cluster

Per fornire la chiave per l'autenticazione ad Artifact Registry, salva la chiave dell'account di servizio come secret di Kubernetes seguendo questi passaggi:

  1. 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
  2. Elimina la copia locale della chiave dell'account di servizio.

    rm registry-access-key.json
    

Ora puoi fare riferimento a questo secret nei tuoi workload.

Crea un carico di lavoro con un'immagine privata

Per utilizzare un'immagine da un repository container privato con un workload, imposta il campo spec.imagePullSecrets sul nome del tuo secret. Questo campo si trova in posizioni diverse per pod e deployment.

Creare un pod

Per creare un pod che possa accedere al registro dei container, imposta il campo spec.imagePullSecrets sul nome del secret.

  1. 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 pod
    • CONTAINER_NAME: il nome del container all'interno del pod
    • LOCATION
    • PROJECT_NAME

    Ad esempio, per eseguire il pull dell'immagine hello-app, copia il seguente codice YAML in un file denominato hello-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
    
  2. Applica la configurazione al cluster con kubectl.

    kubectl apply -f hello-pod.yaml
    
  3. Verifica che il pod sia in esecuzione con kubectl get.

    kubectl get pod/hello-pod
    

    La risposta include un pod con lo stato Running.

    NAME        READY   STATUS    RESTARTS   AGE
    hello-pod   1/1     Running   0          15s
    

Creazione di un deployment

  1. 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 denominato hello-deployment.yaml con il seguente contenuto:

    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
  2. Applica la configurazione al cluster con kubectl.

    kubectl apply -f hello-deployment.yaml
    
  3. 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 che hai creato in questa pagina, esegui questi comandi:

kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml

Passaggi successivi