Configurer des VM Compute Engine avec déploiement Envoy automatique

Ce document s'applique aux anciennes API. Si vous effectuez le déploiement avec les nouvelles API de routage de services, qui sont en version bêta, consultez la page Configuration de Cloud Service Mesh pour les proxys Envoy avec des services HTTP.

Avant de suivre les instructions de ce guide, effectuez les tâches préalables décrites dans la section Préparer la configuration des API de routage de service avec Envoy et des charges de travail sans proxy.

Ce guide explique comment déployer automatiquement un plan de données constitué de proxys side-car Envoy, comment le configurer à l'aide de Cloud Service Mesh et comment vérifier votre configuration pour vous assurer qu'il fonctionne correctement. Ce processus implique les actions suivantes :

  1. Activer l'API Cloud OS Config.
  2. Créer un service de test
  3. Déployer un plan de données simple sur Compute Engine à l'aide de proxys Envoy (Envoy version 1.18.4, qui n'est compatible qu'avec xDS v3)
  4. Configurer Cloud Service Mesh à l'aide des API Compute Engine, ce qui permet à Cloud Service Mesh de configurer vos proxys side-car Envoy
  5. Vous connecter à une VM qui exécute un proxy Envoy et envoyer une requête à un backend à équilibrage de charge via le proxy Envoy

Les exemples de configuration dans ce document sont présentés à des fins de démonstration. Pour un environnement de production, vous devrez peut-être déployer des composants supplémentaires en fonction de votre environnement et des conditions requises.

Activer l'API Cloud OS Config

Assurez-vous d'activer l'API Cloud OS Config. Sans cela, vous ne pourrez pas installer les composants requis sur vos VM.

Procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page API et services.
    Accéder à la page "Bibliothèque d'API"
  2. Sélectionnez le projet adéquat.
  3. Dans le champ de recherche, saisissez API Cloud OS Config et appuyez sur Entrée.
  4. Sélectionnez API Cloud OS Config.
  5. Cliquez sur Activer.

gcloud

gcloud services enable osconfig.googleapis.com

Créer le service de test Hello World

Cette section explique comment créer un service de test simple qui renvoie le nom d'hôte de la VM qui a diffusé la requête du client. Le service de test n'est pas complexe. Il s'agit d'un serveur Web déployé sur un groupe d'instances géré Compute Engine.

Créer le modèle d'instance pour le service de test Hello World

Le modèle d'instance que vous créez configure un exemple de serveur Web Apache2 à l'aide du paramètre startup-script.

Console

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

    Accéder à la page Modèles d'instances

  2. Cliquez sur Créer un modèle d'instance.
  3. Dans les champs, saisissez les informations suivantes :
    • Nom : td-demo-hello-world-template
    • Disque de démarrage : choisissez un système d'exploitation et une version.
    • Compte de service : compte de service par défaut de Compute Engine
    • Niveaux d'accès : autorisez l'accès complet à toutes les API Cloud
  4. Cliquez sur Gestion, sécurité, disques, réseau et location unique. 1 Dans l'onglet Mise en réseau, dans le champ Tags réseau, ajoutez le tag td-http-server.
  5. Dans l'onglet Gestion, copiez le script suivant dans le champ Script de démarrage.

    #!/bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html
    
  6. Cliquez sur Créer.

gcloud

Vous avez le choix entre plusieurs versions de système d'exploitation. Cet exemple utilise la valeur par défaut Debian 10.

Pour créer le modèle d'instance, procédez comme suit :

gcloud compute instance-templates create td-demo-hello-world-template \
  --machine-type=n1-standard-1 \
  --boot-disk-size=20GB \
  --image-family=debian-10  \
  --image-project=debian-cloud \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --tags=td-http-server \
  --metadata=startup-script="#! /bin/bash
sudo apt-get update -y
sudo apt-get install apache2 -y
sudo service apache2 restart
sudo mkdir -p /var/www/html/
echo '<!doctype html><html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"

Créer le groupe d'instances géré pour le service Hello World

Dans cette section, vous allez indiquer que le groupe d'instances géré comporte toujours deux instances du service de test. Cette présentation vous est fournie à des fins de démonstration. Cloud Service Mesh est compatible avec les groupes d'instances gérés avec autoscaling.

Console

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

    Accéder à la page Groupes d'instances

  2. Cliquez sur Créer un groupe d'instances.
  3. Sélectionnez Nouveau groupe d'instances géré (sans état). Pour plus d'informations, consultez la page Groupes d'instances gérés (MIG) sans état ou avec état.
  4. Saisissez td-demo-hello-world-mig pour le nom du groupe d'instances géré, puis sélectionnez la zone us-central1-a.
  5. Sous "Modèle d'instance", sélectionnez td-demo-hello-world-template, qui est le modèle d'instance que vous avez créé.
  6. Sous Mode autoscaling, sélectionnez Off:do not autoscale.
  7. Sous Nombre d'instances maximum, spécifiez que vous souhaitez créer au moins deux instances dans le groupe.
  8. Cliquez sur Créer.

gcloud

Utilisez gcloud CLI pour créer un groupe d'instances géré avec le modèle d'instance que vous avez créé précédemment.

gcloud compute instance-groups managed create td-demo-hello-world-mig \
  --zone us-central1-a \
  --size=2 \
  --template=td-demo-hello-world-template

Créer le modèle d'instance et le groupe d'instances géré dans lequel Envoy est déployé

Suivez les instructions de cette section pour créer un modèle d'instance et un groupe d'instances géré pour Cloud Service Mesh avec des proxys Envoy déployés automatiquement. Les groupes d'instances gérés créent des VM de backend à l'aide de l'autoscaling.

Composants logiciels exécutés sur vos VM

Les composants suivants sont installés sur vos VM lorsque vous créez un modèle d'instance avec --service-proxy=enabled.

  • Le proxy Envoy, configuré par Cloud Service Mesh, est téléchargé à partir d'un bucket Cloud Storage dédié. Le bucket contient une compilation du proxy Envoy fournie par Google.
  • L'agent du proxy de services, qui initialise le proxy Envoy et ses composants. L'agent de service configure l'interception du trafic et surveille l'état du proxy Envoy lorsqu'une VM est en cours d'exécution. L'agent du proxy de service se télécharge également à partir d'un bucket Cloud Storage.

La seule version Envoy disponible est le binaire stable Istio Envoy le plus récent, hébergé dans un emplacement Cloud Storage dédié. Cette version d'Envoy est compatible avec les images Compute Engine Debian, CentOS 7/8 et RHEL 7/8. Lors de l'autoréparation et du scaling à la hausse, le groupe d'instances géré installe une version récente d'Envoy sur la VM. Dans certains cas, cette version peut être plus récente que celle qui est déployée sur les instances de VM créées précédemment. Cela peut entraîner une incohérence dans les versions installées sur les VM d'un groupe d'instances géré. Les versions incohérentes fonctionnent correctement ensemble. Si une mise à jour de sécurité est appliquée à Envoy, nous vous recommandons de mettre à niveau le groupe d'instances géré à l'aide d'un remplacement progressif.

Créer le modèle d'instance

Un modèle d'instance spécifie la configuration des instances de VM créées dans un groupe d'instances géré. Les options que vous transmettez au modèle d'instance installent Envoy et configurent vos instances de VM de sorte qu'elles soient prêtes pour Cloud Service Mesh.

Vous pouvez utiliser Debian 10/11, CentOS 7/8 ou RHEL 7/8 pour l'image de disque de démarrage dans le modèle d'instance.

Pour créer un modèle d'instance de ce type, procédez comme suit :

  gcloud compute instance-templates create td-vm-template-auto \
    --image-family=[ debian-10 | centos-7 | centos-8 | rhel-7 | rhel-8 ]  \
    --image-project=[ debian-cloud | centos-cloud |rhel-cloud ] \
    --service-proxy=enabled
 

Pour personnaliser votre déploiement d'Envoy, consultez le guide de référence sur le déploiement automatisé d'Envoy.

Créer un groupe d'instances géré

Console

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

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

  2. Cliquez sur Créer un groupe d'instances.
  3. Saisissez td-vm-mig-us-central1 pour le nom du groupe d'instances géré, puis sélectionnez la zone us-central1-a.
  4. Dans la section Type de groupe, sélectionnez Groupe d'instances géré.
  5. Dans la section Modèle d'instance, sélectionnez td-vm-template-auto, le modèle d'instance que vous avez créé.
  6. Spécifiez 2 pour le nombre d'instances que vous souhaitez créer dans le groupe.
  7. Cliquez sur Créer pour créer le groupe.

gcloud

Utilisez gcloud CLI pour créer un groupe d'instances géré avec le modèle d'instance que vous avez créé précédemment.

 gcloud compute instance-groups managed create td-vm-mig-us-central1 \
    --zone us-central1-a --size=2 --template=td-vm-template-auto

Configurer Cloud Service Mesh avec les composants d'équilibrage de charge Google Cloud

Les instructions de cette section vous expliquent comment configurer Cloud Service Mesh de sorte que vos proxys Envoy équilibrent le trafic sortant sur deux instances backend. Vous configurez les composants suivants :

Créer une vérification d'état

Suivez les instructions ci-dessous pour créer une vérification d'état. Pour en savoir plus, consultez la section Créer des vérifications d'état.

Console

  1. Accédez à la page "Vérifications d'état" dans Google Cloud Console.
    Accéder à la page "Vérifications d'état"
  2. Cliquez sur Créer une vérification d'état.
  3. Dans le champ du nom, saisissez td-vm-health-check.
  4. Comme protocole, sélectionnez HTTP.
  5. Cliquez sur Create (Créer).

gcloud

  1. Créez la vérification d'état.

    gcloud compute health-checks create http td-vm-health-check
    

Créer la règle de pare-feu

Suivez les instructions ci-dessous afin de créer la règle de pare-feu requise pour les tests de vérification de l'état. Pour en savoir plus, consultez la section Règles de pare-feu pour les vérifications d'état.

Console

  1. Accédez à la page Stratégies de pare-feu de la console Google Cloud.
    Accéder à la page "Stratégies de pare-feu"
  2. Cliquez sur Créer une règle de pare-feu.
  3. Sur la page Créer une règle de pare-feu, fournissez les informations suivantes :
    • Nom : fw-allow-health-checks
    • Réseau : choisissez le réseau VPC.
    • Priorité : saisissez un nombre pour la priorité ou 1 000 par défaut.
    • Sens du trafic : choisissez Entrée.
    • Action en cas de correspondance : sélectionnez Autoriser.
    • Cibles : sélectionnez Tags cibles spécifiés, puis saisissez td-http-server dans la zone de texte Tags cibles.
    • Filtre source: choisissez le type de plage d'adresses IP approprié.
    • Plages d'adresses IP sources : 35.191.0.0/16,130.211.0.0/22
    • Filtre de destination: sélectionnez le type d'adresse IP.
    • Protocoles et ports: cliquez sur Ports et protocoles spécifiés, puis cochez tcp et saisissez le port 80.

gcloud

  1. Créez la règle de pare-feu pour la vérification de l'état.

    gcloud compute firewall-rules create fw-allow-health-checks \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags td-http-server \
      --rules tcp:80
    

Créer un service de backend

Créez le service de backend : Si vous utilisez la Google Cloud CLI, vous devez la désigner en tant que service de backend global avec un schéma d'équilibrage de charge de type INTERNAL_SELF_MANAGED. Ajoutez la vérification d'état et un groupe d'instances géré ou non géré au service de backend. Notez que cet exemple utilise le groupe d'instances géré avec le modèle de VM Compute Engine qui exécute l'exemple de service HTTP créé dans la section Créer le groupe d'instances géré.

Console

  1. Accédez à la page Cloud Service Mesh de la console Google Cloud.

    Accéder à la page Cloud Service Mesh

  2. Dans l'onglet Services, cliquez sur Créer un service.

  3. Cliquez sur Continuer.

  4. Pour le nom du service, saisissez td-vm-service.

  5. Sélectionnez le réseau VPC approprié.

  6. Assurez-vous que le type de backend est bien défini sur Groupes d'instances.

  7. Sélectionnez td-demo-hello-world-mig, le groupe d'instances géré que vous avez créé contenant les backends du service de test Hello World.

  8. Saisissez les numéros de port appropriés.

  9. Sélectionnez Utilisation ou Taux comme mode d'équilibrage. La valeur par défaut est Taux.

  10. Cliquez sur OK.

  11. Sélectionnez la vérification d'état que vous avez créée ou cliquez sur Créer une autre vérification d'état et veillez à sélectionner HTTP comme protocole.

  12. Dans le champ Délai avant expiration du drainage de connexion, définissez la valeur sur 30 secondes ou plus.

  13. Cliquez sur Continuer.

  14. Cliquez sur Créer.

gcloud

  1. Créez le service de backend :

    gcloud compute backend-services create td-vm-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED \
     --connection-draining-timeout=30s \
     --health-checks td-vm-health-check
    
  2. Ajoutez les backends au service de backend.

    gcloud compute backend-services add-backend td-vm-service \
      --instance-group td-demo-hello-world-mig \
      --instance-group-zone us-central1-a \
      --global
    

Créer la carte des règles de routage

La carte des règles de routage définit la manière dont Cloud Service Mesh achemine le trafic dans votre maillage. Dans le cadre de la carte des règles de routage, vous configurez une adresse IP virtuelle et un ensemble de règles de gestion du trafic associées, telles que le routage basé sur l'hôte. Lorsqu'une application envoie une requête à l'adresse IP virtuelle, le proxy Envoy :

  1. intercepte la requête ;
  2. l'évalue en fonction des règles de gestion du trafic dans le mappage d'URL ;
  3. émet un service de backend basé sur le nom d'hôte de la requête ;
  4. choisit un backend ou un point de terminaison associé au service de backend sélectionné ;
  5. envoie le trafic vers ce backend ou point de terminaison.

Pour en savoir plus sur la gestion du trafic, consultez la page Gestion avancée du trafic.

Console

Dans la console Google Cloud, la création de proxys cibles est associée à la création de règles de transfert. Lorsque vous créez la règle de transfert, Google Cloud crée automatiquement un proxy HTTP cible et l'associe au mappage d'URL.

  1. Accédez à la page Cloud Service Mesh de la console Google Cloud.

    Accéder à la page Cloud Service Mesh

  2. Dans l'onglet Cartes des règles de routage, cliquez sur Créer une carte des règles de routage.

  3. Saisissez un nom.

  4. Cliquez sur Ajoutez une règle de transfert.

  5. Pour le nom de la règle de transfert, saisissez td-vm-forwarding-rule.

  6. Sélectionnez votre réseau.

  7. Sélectionnez votre adresse IP interne. Le trafic envoyé à l'adresse IP interne est intercepté par le proxy Envoy et envoyé au service approprié conformément aux règles d'hôte et de chemin d'accès.

    La règle de transfert est créée en tant que règle de transfert mondiale avec le paramètre load-balancing-scheme défini sur INTERNAL_SELF_MANAGED.

  8. Dans le champs Adresse IP personnalisée, saisissez 10.0.0.1. Lorsque votre VM envoie du trafic à cette adresse IP, le proxy Envoy l'intercepte et le dirige vers le point de terminaison du service de backend approprié conformément aux règles de gestion du trafic définies dans le mappage d'URL.

    Chaque règle de transfert sur un réseau VPC doit correspondre à une adresse IP et un port uniques par réseau VPC. Si vous créez plusieurs règles de transfert avec la même adresse IP et le même port dans un réseau VPC particulier, seule la première règle de transfert est valide. Les autres sont ignorées. Si 10.0.0.1 n'est pas disponible sur votre réseau, choisissez une adresse IP différente.

  9. Assurez-vous que le port est défini sur la valeur 80.

  10. Cliquez sur Enregistrer.

  11. Dans la section Règles de routage, sélectionnez Règle d'hôte et de chemin d'accès simple.

  12. Dans la section "Règles d'hôte et de chemin d'accès", sélectionnez td-vm-service comme service.

  13. Cliquez sur "Ajouter une règle d'hôte et de chemin d'accès".

  14. Dans le champ Hôtes, saisissez hello-world.

  15. Dans le champ Service, sélectionnez td-vm-service.

  16. Cliquez sur Enregistrer.

gcloud

  1. Créez un mappage d'URL qui utilise le service de backend td-vm-service par défaut.

    gcloud compute url-maps create td-vm-url-map \
       --default-service td-vm-service
    
  2. Créez un outil de mise en correspondance des chemins d'accès et une règle d'hôte pour acheminer le trafic de votre service en fonction du nom d'hôte et d'un chemin. Cet exemple utilise td-vm-service comme nom de service et un outil de mise en correspondance des chemins d'accès par défaut qui correspond à toutes les requêtes de chemin pour cet hôte (/*).

    gcloud compute url-maps add-path-matcher td-vm-url-map \
       --default-service td-vm-service \
       --path-matcher-name td-vm-path-matcher
    
    gcloud compute url-maps add-host-rule td-vm-url-map \
       --path-matcher-name=td-vm-path-matcher \
       --hosts=hello-world
    
  3. Créez le proxy HTTP cible.

    gcloud compute target-http-proxies create td-vm-proxy \
       --url-map=td-vm-url-map
    
  4. Créez la règle de transfert.

    La règle de transfert doit être mondiale et être créée avec la valeur load-balancing-scheme définie sur INTERNAL_SELF_MANAGED.

    gcloud compute forwarding-rules create td-vm-forwarding-rule \
       --global \
       --load-balancing-scheme=INTERNAL_SELF_MANAGED \
       --address=10.0.0.1 \
       --target-http-proxy=td-vm-proxy \
       --ports=80 \
       --network=default
    

À ce stade, Cloud Service Mesh est configuré pour équilibrer la charge des services spécifiés dans le mappage d'URL sur les backends du groupe d'instances géré.

Vérifier la configuration

Dans cette dernière partie du guide de configuration de Cloud Service Mesh pour les VM Compute Engine, vous allez vérifier que le trafic envoyé depuis la VM cliente destinée à la règle de transfert VIP est intercepté et redirigé vers le proxy Envoy, lequel achemine votre requête vers les VM hébergeant le service Hello World.

Pour ce faire, connectez-vous à la VM cliente configurée pour intercepter le trafic et le rediriger vers Envoy. Envoyez une requête curl à l'adresse IP virtuelle associée à votre carte de règles de routage. Envoy inspecte la requête curl, détermine le service auquel il doit répondre, puis la transfère vers un backend associé à ce service.

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

    Accéder à la page Groupes d'instances

  2. Sélectionnez le groupe d'instances td-vm-mig-us-central1.
  3. Dans la section "Récapitulatif de la VM", sous Se connecter, cliquez sur SSH.
  4. Une fois connecté à la VM cliente, utilisez l'outil curl pour envoyer une requête au service Hello World via Envoy :
curl -H "Host: hello-world" http://10.0.0.1/

Lorsque vous exécutez cette commande à plusieurs reprises, vous devriez obtenir différentes réponses HTML contenant les noms d'hôte des backends dans le groupe d'instances géré Hello World. En effet, Envoy utilise l'équilibrage de charge "round robin" (à tour de rôle), l'algorithme d'équilibrage de charge par défaut, pour envoyer le trafic vers les backends du service Hello World.

Étape suivante