Utiliser un registre d'images privé

Cette rubrique explique comment utiliser Anthos clusters on AWS (GKE sur AWS) avec un dépôt d'images de conteneurs privé, tel que Container Registry (GCR).

Avant de commencer

Avant de commencer à utiliser Anthos clusters on AWS, assurez-vous d'avoir effectué les tâches suivantes :

  • Installez un service de gestion.
  • Créez un cluster d'utilisateur.
  • À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre cluster d'utilisateur.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Remplacez CLUSTER_NAME par le nom de votre cluster d'utilisateur.
  • Créez une image Docker et transmettez-la à Container Registry. Les exemples de cette rubrique utilisent le conteneur hello-app, créé lors des étapes de déploiement d'une application en conteneur dans la documentation GKE sur Google Cloud.

Registres de conteneurs privés

Les registres de conteneurs stockent et distribuent des images de conteneurs. Par défaut, votre installation Anthos clusters on AWS peut accéder aux images publiques.

Rechercher des images sur Container 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 qu'il s'authentifie auprès de Container Registry avec Google Cloud CLI :

    gcloud auth configure-docker
    

    Google Cloud CLI enregistre un assistant d'identification pour tous les registres Docker compatibles avec Google.

  2. Vérifiez que Container Registry inclut une image avec docker images.

    docker images
    

    Docker se connecte à Container Registry et renvoie les images disponibles dans votre dépôt Container Registry. Par exemple, la réponse suivante affiche une image de conteneur nommée hello-app dans le dépôt project-id.

    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    gcr.io/project-id/hello-app   v1                  732f02cea7cb        12 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 l'accès à Container Registry au compte de service.

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

    Remplacez les éléments suivants :

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

    Remplacez les éléments suivants :

    • project-id par votre projet Google Cloud
    • account-name par le nom de votre compte de service Google Cloud

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

Définir un secret Kubernetes

Pour fournir la clé d'authentification auprès de Container Registry, enregistrez la clé du compte de service en tant que secret Kubernetes en procédant comme suit :

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

    Remplacez les éléments suivants :

    • project-id par votre projet Google Cloud
    • account-name par le nom de votre compte de service Google Cloud
  2. Supprimez la copie locale de la clé de votre compte de service.

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

    Remplacez les éléments suivants :

    • pod-name par le nom de votre pod
    • container-name par le nom du conteneur situé dans le pod
    • project-id par votre projet Google Cloud
    • secret-name par le nom du secret de votre registre

    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: gcr.io/project-id/hello-app:v1
      imagePullSecrets:
      - name: gcr-secret
    
  2. Appliquez la configuration à votre cluster à l'aide de la commande kubectl.

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

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

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

    Par exemple, pour créer un déploiement de 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: "gcr.io/project-id/hello-app:v1"
            env:
            - name: "PORT"
              value: "50001"
          imagePullSecrets:
          - name: gcr-secret
    
  5. Appliquez la configuration à votre cluster à l'aide de la commande kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-deployment.yaml
    
  6. Vérifiez que votre déploiement est en cours d'exécution avec kubectl pods.

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

    La sortie contient trois pods à l'état 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
    

Étapes suivantes