Ajouter un groupe d'instances à un équilibreur de charge


Cette page explique comment ajouter un groupe d'instances géré (MIG) existant au service de backend ou au pool cible d'un équilibreur de charge.

Un équilibreur de charge répartit le trafic des utilisateurs, ce qui permet de réduire le risque de rencontrer des problèmes de performances dans votre application. Cloud Load Balancing diffuse le trafic à l'aide de groupes d'instances, gérés ou non. Selon le type d'équilibreur de charge que vous utilisez, vous pouvez ajouter des groupes d'instances à un service de backend ou à un pool cible.

Pour en savoir plus sur la création d'un type spécifique d'équilibreur de charge avec un backend de MIG, consultez la documentation de Cloud Load Balancing.

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

Ajouter un groupe d'instances géré à un service de backend

Un service de backend est nécessaire pour créer la plupart des types d'équilibreurs de charge.

Un service de backend peut contenir plusieurs backends. Un groupe d'instances est un type de backend. Les instances du groupe d'instances répondent au trafic provenant de l'équilibreur de charge. Le service de backend sait ainsi quelles instances il peut exploiter, quel volume de trafic ces dernières peuvent traiter et quel volume elles traitent actuellement. En outre, le service de backend vérifie l'intégrité des instances et n'envoie pas de nouvelles connexions aux instances défectueuses.

Suivez ces instructions pour ajouter un groupe d'instances géré à un service de backend.

Console

  1. Accédez à la page "Équilibrage de charge" dans Google Cloud Console.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur le nom du service de backend auquel vous ajoutez le groupe d'instances géré.
  3. Cliquez sur Modifier.
  4. Cliquez sur +Ajouter un backend.
  5. Sélectionnez le groupe d'instances que vous souhaitez ajouter.
  6. Modifiez les paramètres facultatifs que vous souhaitez modifier.
  7. Enregistrez les modifications.

gcloud

Exécutez la commande add-backend :

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        [--instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] \
        --balancing-mode=BALANCING_MODE

La compatibilité du mode d'équilibrage varie selon le type d'équilibreur de charge. Pour obtenir la liste complète, consultez la section Mode d'équilibrage disponible pour chaque équilibreur de charge.

Des paramètres supplémentaires sont requis en fonction du mode d'équilibrage du groupe d'instances géré. Pour en savoir plus, consultez la section dédiée à la commande add-backend dans le SDK.

REST

Pour ajouter un service de backend à l'aide de l'API REST, consultez les informations sur backendServices.

Limites

L'équilibrage de charge avec un MIG régional n'est pas compatible avec la capacité cible max-rate dans les modes d'équilibrage RATE et UTILIZATION. Pour en savoir plus sur les consignes d'utilisation de chaque équilibreur de charge, consultez la page Modes d'équilibrage et paramètres de capacité cible.

Ajouter un groupe d'instances géré à un pool cible

Un pool cible est un objet qui contient une ou plusieurs instances de machines virtuelles. Il est utilisé dans des équilibreurs de charge réseau passthrough externes, où l'équilibreur de charge transfère des requêtes utilisateur vers le pool cible associé. Les instances qui appartiennent à ce pool cible traitent ces requêtes et renvoient une réponse. Vous pouvez ajouter un groupe d'instances géré à un pool cible pour que, lorsque des instances sont ajoutées ou supprimées dans ce groupe, le pool soit lui aussi automatiquement mis à jour avec les modifications.

Le pool cible dans lequel vous ajoutez un groupe d'instances géré doit avoir été créé au préalable. Pour en savoir plus, consultez la section Ajouter un pool cible.

Pour ajouter un groupe d'instances géré existant à un pool cible, suivez les instructions ci-dessous. Ce processus permet d'ajouter toutes les instances de VM faisant partie du groupe géré au pool cible.

Console

  1. Accédez à la page "Pools cibles" de la console Google Cloud.

    Accéder à la page Pools cibles

  2. Cliquez sur le pool cible auquel vous souhaitez ajouter le groupe d'instances.
  3. Cliquez sur le bouton Modifier.
  4. Faites défiler l'écran vers le bas jusqu'à la section Instances de VM, puis cliquez sur Sélectionner des groupes d'instances.
  5. Sélectionnez un groupe d'instances dans le menu déroulant.
  6. Enregistrez les modifications.

gcloud

Exécutez la commande set-target-pools :

gcloud compute instance-groups managed set-target-pools INSTANCE_GROUP \
        --target-pools TARGET_POOL,..

où :

  • INSTANCE_GROUP est le nom du groupe d'instances.
  • TARGET_POOL,.. est le nom du ou des pools cibles auxquels vous souhaitez ajouter le groupe d'instances.

REST

Appelez la méthode setTargetPools pour un MIG régional ou un MIG zonal. Par exemple :

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/regionInstanceGroupManagers/INSTANCE_GROUP/setTargetPools

où :

  • PROJECT_ID est l'ID de projet de cette requête.
  • REGION est la région du groupe d'instances.
  • INSTANCE_GROUP est le nom du groupe d'instances.

Le corps de la requête doit contenir une liste d'URI pointant vers les pools cibles auxquels vous souhaitez ajouter le groupe. Par exemple :

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

Attribuer des ports nommés à des groupes d'instances gérés

Les ports nommés sont des paires clé-valeur qui représentent le nom et le numéro d'un port. Le nom de port représente le nom d'un service ou d'une application. Le numéro de port représente le port sur lequel le service ou l'application s'exécute.

Les ports nommés sont utilisés par Cloud Load Balancing. Les équilibreurs de charge qui agissent en tant que proxys s'abonnent à un seul port nommé dans leur configuration de service de backend. Le nom du port est converti en un numéro de port en fonction du mappage de ports nommés de chaque backend du groupe d'instances.

Par exemple, un service de backend peut s'abonner à un port nommé http-port. Le groupe d'instances backend peut avoir un port nommé http-port:80. Le groupe d'instances backend indique à l'équilibreur de charge d'envoyer le trafic à une VM du groupe sur le port 80 via un protocole (par exemple, TCP). Le protocole est défini dans le service de backend de l'équilibreur de charge.

Les ports nommés sont des métadonnées simples utilisées par les équilibreurs de charge proxy. Ils ne permettent de contrôler ni les ressources réseau, ni le pare-feu dans Compute Engine.

Plusieurs numéros de ports pour un port nommé

Vous pouvez attribuer plusieurs ports à chaque nom de service. Vous pouvez également attribuer plusieurs noms de service à chaque port.

Gardez à l'esprit les points suivants :

  • Le trafic est équilibré entre tous les ports ayant le même nom de port.
  • Un service de backend donné ne peut transférer le trafic que vers un seul port nommé à la fois.
  • Si vous utilisez plusieurs numéros de port pour un port nommé, ils doivent tous correspondre à la même application.

    Par exemple, http:80,http:8080 fonctionne, mais http:80,http:443 ne fonctionne pas, car le port 80 n'est généralement pas compatible avec le protocole TLS.

Vous pouvez attribuer plusieurs ports nommés dans un groupe d'instances. Prenons l'exemple d'un service de backend qui s'abonne au port nommé http-port et qui possède deux groupes d'instances backend :

  • instance-group-a avec le port nommé http-port:80
  • instance-group-b avec le port nommé http-port:79

Ce service de backend envoie du trafic au port 80 pour les VM dans instance-group-a et au port 79 pour les VM dans instance-group-b.

Lorsque vous ajoutez le même groupe d'instances à plusieurs services de backend (pour plusieurs équilibreurs de charge) et que le groupe d'instances diffuse différents ports sur chaque équilibreur de charge, n'ajoutez pas tous les numéros de port à un seul port nommé. Créez plutôt un port nommé unique et mappez-le à un ensemble de ports que chaque service de backend doit servir.

Par exemple, supposons que vous ayez trois applications, chacune avec son propre équilibreur de charge. Chaque application possède son propre numéro de port : 81 pour app1, 82 pour app2 et 83 pour app3. En supposant que les trois services de backend utilisent un groupe d'instances commun, attribuez les ports nommés de ce groupe d'instances au format [app1:81, app2:82, app3:83].

Ports nommés et vérifications d'état

Pour qu'un port nommé avec plusieurs numéros de port sur un service de backend fonctionne sur un équilibreur de charge d'application externe ou interne, la vérification de l'état doit comporter l'option --use-serving-port plutôt qu'un numéro de port spécifique. Cette option n'est pas disponible dans la console Google Cloud. Pour définir --use-serving-port, vous devez utiliser la Google Cloud CLI ou l'API.

Supposons par exemple que vous ayez une application qui équilibre la charge du trafic sur trois ports différents (81, 82, 83) sur le même service de backend avec un seul groupe d'instances. Vous pouvez attribuer les ports de ces groupes d'instances au format [app:81, 82, 83]. Dans ce scénario, la vérification d'état doit comporter l'option --use-serving-port.

Pour en savoir plus, consultez la documentation sur la vérification de l'état de l'équilibrage de charge.

Ports nommés et règles de pare-feu

Les ports nommés n'entraînent pas la création ni la modification des règles de pare-feu Google Cloud. Pour autoriser le trafic vers les VM de backend, vous devez toujours créer les règles de pare-feu nécessaires.

Ports nommés et services de backend

Outre la configuration du groupe d'instances, vous devez également configurer le service de backend. Par exemple, supposons que vous définissiez le port nommé sur un groupe d'instances avec le nom my-service-name et le port 8888 :

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

Vous devez ensuite faire référence au port nommé dans la configuration du service de backend, avec le --port-name sur le service de backend défini sur my-service-name :

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

Créer des ports nommés

Console

  1. Dans la console Google Cloud, accédez à la page Groupes d'instances.

    Accéder à la page "Groupes d'instances"

  2. Cliquez sur le nom du groupe d'instances dans lequel vous souhaitez spécifier des ports nommés. La page qui s'ouvre affiche les propriétés du groupe.
  3. Cliquez sur Modifier pour modifier le groupe d'instances géré.
  4. Dans la section Mappage de port, cliquez sur Ajouter un port, puis saisissez le nom de port souhaité, ainsi que les numéros de port que vous voulez associer à ce nom. Si vous avez besoin d'un plus grand nombre d'entrées, cliquez à nouveau sur Ajouter un port.
  5. Cliquez sur Enregistrer pour enregistrer les modifications et appliquer les ports nommés aux instances du groupe géré.

gcloud

Pour les groupes d'instances gérés, définissez un ou plusieurs ports nommés à l'aide de la commande instance-groups managed set-named-ports. Pour les groupes non gérés, utilisez la commande instance-groups set-named-ports.

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

Par exemple :

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:80,name2:8080

Pour attribuer plusieurs ports à chaque nom de service, ou plusieurs noms à chaque service, créez plusieurs entrées pour chaque nom ou port. Par exemple, si les ports 10, 20 et 80 sont pour la même application, vous pouvez attribuer name1 à tous ces ports. Vous pouvez également attribuer deux noms, name2 et name3, au port 8080. Enfin, vous pouvez attribuer le port 9000 à name4, comme dans l'exemple suivant :

gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \
      --named-ports name1:10,name1:20,name1:80,\
                    name2:8080,name3:8080,\
                    name4:9000

Vous pouvez vérifier les attributions des ports nommés d'un groupe d'instances géré à l'aide de la commande get-named-ports :

gcloud compute instance-groups managed get-named-ports INSTANCE_GROUP
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

REST

L'API instanceGroupManagers ne propose pas de méthode d'API setNamedPorts. Utilisez plutôt l'API instanceGroups pour effectuer cette tâche.

Envoyez une requête à l'API instanceGroups en incluant le nom du groupe d'instances. Récupérez la valeur fingerprint actuelle associée au groupe en obtenant des informations sur un groupe spécifique. Incluez la valeur fingerprint et une ou plusieurs paires de valeurs namedPorts dans le corps de la requête :

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP/setNamedPorts

{
  "fingerprint": "42WmSpB8rSM=",
  "namedPorts": [
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    },
    {
       "name": "PORT_NAME",
       "port": PORT_NUMBER
    }
  ]
 }
 

Par exemple, si les ports 10, 20 et 80 sont pour la même application, vous pouvez attribuer name1 à tous ces ports. Vous pouvez également attribuer deux noms, name2 et name3, au port 8080. Enfin, vous pouvez attribuer le port 9000 à name4, comme dans l'exemple suivant :

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 8080
      },
      {
       "name": "name2",
       "port": 9000
      }
   ]
}

Pour attribuer plusieurs ports à chaque nom de service, créez plusieurs entrées pour ce nom de service. Par exemple, vous pouvez attribuer les ports 10, 20 et 80 à name1. Affectez également le port 8080 au nom name2.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
   "fingerprint": "42WmSpB8rSM=",
   "namedPorts": [
      {
       "name": "name1",
       "port": 10
      },
      {
       "name": "name1",
       "port": 20
      }
      {
       "name": "name1",
       "port": 80
      }
      {
       "name": "name2",
       "port": 8080
      }
      {
       "name": "name3",
       "port": 80
      }
      {
       "name": "name4",
       "port": 8080
      }
   ]
}

Pour répertorier les ports nommés déjà attribués à un groupe d'instances géré, envoyez une requête GET qui pointe vers le groupe :

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP

Étape suivante