Utilizzo di un registro di immagini private

Questo argomento descrive come utilizzare GKE su AWS con un repository di immagini container privato, ad esempio Container Registry (GCR).

Prima di iniziare

Prima di iniziare a utilizzare GKE su AWS, assicurati di aver eseguito le seguenti attività:

  • Installa un servizio di gestione.
  • Crea un cluster di utenti.
  • Dalla directory anthos-aws, utilizza anthos-gke per cambiare contesto e passare al cluster di utenti.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Sostituisci CLUSTER_NAME con il nome del cluster di utenti.
  • Crea un'immagine Docker ed eseguine il push su Container Registry. Gli esempi in questo argomento utilizzano il contenitore hello-app, creato con i passaggi descritti in Eseguire il deployment di un'applicazione containerizzata nella documentazione di GKE su Google Cloud .

Container Registry privati

Un registry dei container archivia e distribuisce immagini container. L'installazione di GKE su AWS può accedere alle immagini pubbliche per impostazione predefinita.

Cerca le immagini su Container 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 Container Registry con Google Cloud CLI:

    gcloud auth configure-docker
    

    La CLI Google Cloud registra un assistente per le credenziali per tutti i registry Docker supportati da Google.

  2. Verifica che Container Registry includa un'immagine con docker images.

    docker images
    

    Docker si connette a Container Registry e restituisce le immagini disponibili nel repository Container Registry. Ad esempio, la risposta riportata di seguito mostra un'immagine container denominata hello-app nel repository project-id.

    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    gcr.io/project-id/hello-app   v1                  732f02cea7cb        12 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 di utenti si autenticano utilizzando un account di servizio IAM (Identity and Access Management).

Per creare un nuovo account di servizio, segui questi passaggi:

  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 l'accesso a Container Registry.

    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \
      --role roles/storage.objectViewer
    

    Sostituisci quanto segue:

    • project-id 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 key.json \
      --iam-account account-name@project-id.iam.gserviceaccount.com
    

    Sostituisci quanto segue:

    • project-id con il tuo progetto Google Cloud
    • account-name con il nome del tuo Google Cloud account di servizio

Ora è tutto pronto per configurare il cluster utente in modo che si connetta a Container Registry.

Definisci un secret Kubernetes

Per fornire la chiave per l'autenticazione in Container Registry, salva la chiave dell'account di servizio come secret Kubernetes svolgendo i seguenti passaggi:

  1. Usa kubectl per creare il secret.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl create secret docker-registry gcr-secret \
      --docker-server=gcr.io \
      --docker-username=_json_key \
      --docker-email=account-name@project-id.iam.gserviceaccount.com \
      --docker-password="$(cat key.json)"
    

    Sostituisci quanto segue:

    • project-id con il tuo progetto Google Cloud
    • account-name con il nome del tuo Google Cloud account di servizio
  2. Elimina la copia locale della chiave dell'account di servizio.

    rm 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 workload, 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: gcr.io/project-id/hello-app:v1
      imagePullSecrets:
      - name: secret-name
    

    Sostituisci quanto segue:

    • pod-name con il nome del pod
    • container-name con il nome del contenitore all'interno del pod
    • project-id con il tuo progetto Google Cloud
    • secret-name con il nome del secret del registry

    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: gcr.io/project-id/hello-app:v1
      imagePullSecrets:
      - name: gcr-secret
    
  2. Applica la configurazione al cluster con kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-pod.yaml
    
  3. Verifica che il pod sia in esecuzione con kubectl get.

    env HTTPS_PROXY=http://localhost:8118 \
      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

  4. Per utilizzare un repository privato in un deployment, specifica imagePullSecret all'interno del modello.

    Ad esempio, per creare un deployment della 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: "gcr.io/project-id/hello-app:v1"
            env:
            - name: "PORT"
              value: "50001"
          imagePullSecrets:
          - name: gcr-secret
    
  5. Applica la configurazione al cluster con kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-deployment.yaml
    
  6. Verifica che il deployment sia in esecuzione con kubectl pods.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    

    L'output contiene 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
    

Passaggi successivi