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, 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:

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:

  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 riportata di seguito 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 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:

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

    Sostituisci quanto segue:

    • PROJECT_NAME con il tuo Google Cloud progetto
    • 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 puoi configurare il cluster utente per la connessione 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 Kubernetes seguendo questi passaggi:

  1. Utilizza 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à regionale o multiregionale location 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.

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.

  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 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 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, devi specificare 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
    

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