Usa un registro di immagini private

La tua installazione GKE su Azure può accedere alle immagini container pubbliche per impostazione predefinita. Questo argomento spiega come utilizzare GKE su Azure con un repository privato di immagini di container, come Artifact Registry.

Prima di iniziare

Per seguire i passaggi descritti in questa pagina, devi prima completare le seguenti operazioni:

Cerca immagini su Artifact Registry

Per completare gli altri passaggi, è necessaria un'immagine container. Per recuperare il nome delle immagini container, segui questi passaggi:

  1. Configura lo strumento a riga di comando Docker per eseguire l'autenticazione in Artifact Registry con Google Cloud SDK:

    gcloud auth configure-docker
    

    Lo strumento a riga di comando gcloud registra un helper per le credenziali per tutti i registry Docker supportati da Google.

  2. Conferma 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 container pronta, creane una seguendo la procedura descritta in Deployment di un'applicazione containerizzata.

Creare un account di servizio

I cluster vengono autenticati 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 account di servizio 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 dell'account di servizio Google Cloud
  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 utente per la connessione 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 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 località a livello di una o più regioni 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 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 Container Registry, imposta il campo spec.imagePullSecrets sul nome del tuo 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 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 il contenuto seguente:

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