Configuration de Traffic Director pour les VM Compute Engine avec déploiement Envoy automatisé

Avant de suivre les instructions de ce guide, consultez la section Préparer la configuration de Traffic Director et assurez-vous d'avoir effectué les tâches préalables décrites dans ce document.

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

  1. Créer un service de test
  2. Déployer un plan de données simple sur Compute Engine à l'aide de proxys Envoy
  3. Configurer Traffic Director à l'aide des API Compute Engine, ce qui permet à Traffic Director de configurer vos proxys side-car Envoy
  4. 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.

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. Accédez à la page "Modèles d'instances" dans Cloud Console.

    Accéder à la page "Modèles d'instance"

  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 : Debian GNU/Linux 10 (buster)
    • 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

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. Traffic Director est compatible avec les groupes d'instances gérés avec autoscaling.

Console

  1. Dans Cloud Console, accédez à la page "Groupes d'instances".

    Accéder à la page Groupes d'instances

  2. Cliquez sur Créer un groupe d'instances.
  3. Assurez-vous que l'option Nouveau groupe d'instances géré est sélectionnée.
  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 Ne pas procéder à un autoscaling.
  7. Sous Nombre d'instances, spécifiez au moins deux pour le nombre d'instances que vous souhaitez créer dans le groupe.
  8. Cliquez sur Créer.

gcloud

À l'aide de l'outil de ligne de commande gcloud, créez un groupe d'instances géré basé sur le modèle d'instance que vous avez précédemment créé.

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 Traffic Director 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 Traffic Director, est téléchargé à partir d'un bucket Cloud Storage dédié. Ce bucket contient les fichiers binaires de proxy Envoy des versions officielles d'Istio.
  • 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.

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 Traffic Director.

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

  gcloud beta compute instance-templates create td-vm-template-auto \
    --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 Cloud Console, 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

À l'aide de l'outil de ligne de commande gcloud, créez un groupe d'instances géré basé sur le modèle d'instance que vous avez précédemment créé.

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

Configurer Traffic Director avec les composants de l'équilibrage de charge Google Cloud

Les instructions de cette section vous expliquent comment configurer Traffic Director 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. Pour le protocole, sélectionnez HTTP.
  5. Cliquez sur Créer.

gcloud

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

    gcloud compute health-checks create http td-vm-health-check
    
  2. 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 l'outil de ligne de commande gcloud, vous devez le désigner comme service de backend mondial avec un schéma d'équilibrage de charge de type INTERAL_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 "Traffic Director" dans Cloud Console.

    Accéder à la page "Traffic Director"

  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 Traffic Director 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. envoi 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 Cloud Console, la création du proxy cible est associée à la création des 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 "Traffic Director" dans Cloud Console.

    Accéder à la page "Traffic Director"

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

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

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, Traffic Director 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 Traffic Director 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 Cloud Console, 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

Selon la manière dont vos microservices sont distribués sur votre réseau, vous devrez peut-être ajouter des règles de transfert ou des règles d'hôte et de chemin d'accès au mappage d'URL. Pour plus d'informations sur les règles de transfert et les mappages d'URL, consultez les documents suivants :