Utiliser un registre d'images privé

Votre installation GKE sur Azure peut accéder aux images de conteneurs publiques par défaut. Cet article explique comment utiliser GKE sur Azure avec un dépôt d'images de conteneurs privé, tel qu'Artifact Registry.

Avant de commencer

Pour effectuer les étapes décrites sur cette page, procédez comme suit :

Rechercher des images sur Artifact Registry

Pour effectuer les étapes restantes, vous devez disposer d'une image de conteneur. Récupérez le nom de vos images de conteneur en procédant comme suit :

  1. Configurez l'outil de ligne de commande Docker pour vous authentifier auprès d'Artifact Registry avec Google Cloud SDK :

    gcloud auth configure-docker
    

    L'outil de ligne de commande gcloud enregistre un assistant d'identification pour tous les registres Docker compatibles avec Google.

  2. Vérifiez qu'Artifact Registry inclut une image en exécutant la commande docker images.

    docker images
    

    Docker se connecte à Artifact Registry et renvoie les images disponibles dans votre dépôt. Par exemple, la réponse suivante affiche une image de conteneur nommée hello-app dans le dépôt PROJECT_NAME dans 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
    

Si vous n'avez pas d'image de conteneur prête à l'emploi, créez-en une en suivant les étapes décrites dans la page Déployer une application en conteneur.

Créer un compte de service

Vos clusters d'utilisateur s'authentifient à l'aide d'un compte de service IAM (Identity and Access Management).

Pour créer un compte de service, procédez comme suit :

  1. Créez un compte de service IAM avec Google Cloud CLI.

    gcloud iam service-accounts create ACCOUNT_NAME
    

    Remplacez ACCOUNT_NAME par le nom du nouveau compte de service Google Cloud.

  2. Accordez au compte de service des autorisations Artifact Registry.

    gcloud projects add-iam-policy-binding PROJECT_NAME \
      --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --role roles/artifactregistry.reader
    

    Remplacez les éléments suivants :

    • PROJECT_NAME par votre projet Google Cloud
    • ACCOUNT_NAME par le nom de votre compte de service Google Cloud
  3. Téléchargez la clé du compte de service.

    gcloud iam service-accounts keys create registry-access-key.json \
      --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
    

    Remplacez les éléments suivants :

    • PROJECT_NAME
    • ACCOUNT_NAME

Vous êtes maintenant prêt à configurer votre cluster d'utilisateur pour qu'il se connecte à Artifact Registry.

Enregistrer la clé dans un cluster

Pour fournir la clé d'authentification sur Artifact Registry, enregistrez la clé du compte de service en tant que secret Kubernetes comme suit :

  1. Utilisez kubectl pour créer le 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)"
    

    Remplacez les éléments suivants :

    • LOCATION : emplacement régional ou multirégional du dépôt.
    • PROJECT_NAME
    • ACCOUNT_NAME
  2. Supprimez la copie locale de la clé de votre compte de service.

    rm registry-access-key.json
    

Vous pouvez désormais faire référence à ce secret dans vos charges de travail.

Créer une charge de travail avec une image privée

Pour utiliser une image provenant d'un dépôt de conteneurs privé avec une charge de travail, définissez le champ spec.imagePullSecrets sur votre nom de secret. Ce champ se trouve à des emplacements différents pour les pods et les déploiements.

Créer un pod

Pour créer un pod pouvant accéder au registre de conteneurs, définissez le champ spec.imagePullSecrets sur le nom de votre secret.

  1. Créez un pod qui spécifie 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
    

    Remplacez les éléments suivants :

    • POD_NAME : nom de votre pod
    • CONTAINER_NAME : nom du conteneur situé dans le pod
    • LOCATION
    • PROJECT_NAME

    Par exemple, pour extraire l'image hello-app, copiez le fichier YAML suivant dans un fichier nommé 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. Appliquez la configuration à votre cluster à l'aide de la commande kubectl.

    kubectl apply -f hello-pod.yaml
    
  3. Vérifiez que le pod est en cours d'exécution à l'aide de la commande kubectl get.

    kubectl get pod/hello-pod
    

    La réponse inclut un pod dont l'état est Running.

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

Créer un déploiement

  1. Pour utiliser un dépôt privé dans un déploiement, spécifiez l'élément imagePullSecret dans le modèle.

    Par exemple, pour configurer un déploiement qui utilise l'image hello-app, créez un fichier nommé hello-deployment.yaml avec le contenu suivant :

    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
    

    Remplacez les éléments suivants :

    • LOCATION
    • PROJECT_NAME
  2. Appliquez la configuration à votre cluster à l'aide de la commande kubectl.

    kubectl apply -f hello-deployment.yaml
    
  3. Vérifiez que votre déploiement est en cours d'exécution avec kubectl pods.

    kubectl get pods --selector=app=products
    

    Le résultat affiche trois pods 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
    

Effectuer un nettoyage

Pour supprimer les ressources que vous avez créées sur cette page, exécutez les commandes suivantes :

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

Étape suivante