Usa un registro di immagini private

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:

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:

  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 repository. Ad esempio, la risposta seguente mostra un'immagine contenitore 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 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:

  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 nuovo Google Cloud account di servizio.

  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 Google Cloud account di servizio
  3. 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:

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

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

    Ad esempio, per estrarre l'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 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 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
  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 create in questa pagina, esegui questi comandi:

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

Passaggi successivi