Configuration de Traffic Director pour les proxys Envoy avec des services HTTP

Ce guide explique comment configurer Traffic Director avec un maillage de services proxy basé sur Envoy, des services HTTP et des ressources Mesh et HTTPRoute.

Proxys Envoy avec des ressources HTTPRoute et Mesh
Proxys Envoy avecHTTPRoute etMesh ressources (cliquez pour agrandir)

Assurez-vous de respecter les conditions préalables décrites dans les guides suivants:

Configurer la ressource Mesh

Les proxys Envoy exécutés en tant que side-cars reçoivent leur configuration de routage des services de Traffic Director. Le nom Mesh est la clé utilisée par le proxy side-car pour demander la configuration associée à la ressource Mesh. Traffic Director fournit la configuration de routage au proxy. Le proxy side-car dirige ensuite le trafic vers le service de backend approprié, en s'appuyant sur des paramètres de requête tels que le nom d'hôte, les en-têtes et autres paramètres configurés dans les ressources Route.

  1. Créez la spécification de ressource Mesh et enregistrez-la dans un fichier nommé mesh.yaml.

    name: sidecar-mesh
    interception_port: 15001
    

Le port d'interception est défini par défaut sur 15001 si vous ne le spécifiez pas dans le fichier mesh.yaml.

  1. Créez la ressource Mesh à l'aide de la spécification mesh.yaml.

    gcloud alpha network-services meshes import sidecar-mesh \
      --source=mesh.yaml \
      --location=global
    

Une fois la ressource Mesh créée, Traffic Director est prêt à diffuser la configuration. Toutefois, comme aucun service n'est encore défini, la configuration est vide. L'étape suivante consiste à définir vos services et votre rattachement.

Configurer le serveur HTTP

À des fins de démonstration, vous créez un service de backend avec des VM avec autoscaling en utilisant des groupes d'instances gérés comme backends. Les VM diffusent une expression hello world, à l'aide du protocole HTTP sur le port 80.

  1. Créez le modèle d'instance avec un service HTTP helloworld sur le port 80.

    gcloud compute instance-templates create td-httpd-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-td-server \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype <html><body><h1>'\`/bin/hostname\`'</h1></body></html>' | sudo tee /var/www/html/index.html"
    
  2. Créez un groupe d'instances géré basé sur le modèle.

    gcloud compute instance-groups managed create http-td-mig-us-east1 \
      --zone=${ZONE} \
      --size=2 \
      --template=td-httpd-vm-template
    
  3. Créez une vérification d'état.

    gcloud compute health-checks create http http-helloworld-health-check
    
  4. Créez une règle de pare-feu pour autoriser les connexions entrantes des vérifications d'état aux instances de votre réseau.

    gcloud compute firewall-rules create http-vm-allow-health-checks \
      --network=default \
      --action=ALLOW \
      --direction=INGRESS \
      --source-ranges=35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \
      --target-tags=http-td-server \
      --rules=tcp:80
    
  5. Créez un service de backend global avec un schéma d'équilibrage de charge INTERNAL_SELF_MANAGED et ajoutez la vérification de l'état.

    gcloud compute backend-services create http-helloworld-service \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED \
      --protocol=HTTP \
      --health-checks http-helloworld-health-check
    
  6. Ajoutez le groupe d'instances géré au service de backend. L'exemple suivant utilise le groupe d'instances géré que vous avez créé précédemment. Les VM du groupe d'instances géré exécutent l'exemple de service HTTP que vous avez créé.

    gcloud compute backend-services add-backend http-helloworld-service \
      --instance-group=http-td-mig-us-east1 \
      --instance-group-zone=${ZONE} \
      --global
    

Configurer le routage avec HTTPRoute

La ressource et les services Mesh sont configurés. Connectez-les à une ressource HTTPRoute qui associe un nom d'hôte à un service de backend.

  1. Créez la spécification HTTPRoute et enregistrez-la dans un fichier nommé http_route.yaml.

    name: helloworld-http-route
    hostnames:
    - helloworld-gce
    meshes:
    - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    - action:
       destinations:
       - serviceName: "projects/$PROJECT_NUMBER/locations/global/backendServices/http-helloworld-service"
    
  2. Créez la ressource HTTPRoute à l'aide de la spécification dans le fichier http_route.yaml.

    gcloud alpha network-services http-routes import helloworld-http-route \
      --source=http_route.yaml \
      --location=global
    

Traffic Director est maintenant configuré pour équilibrer la charge des services spécifiés dans la ressource HTTPRoute entre les VM du groupe d'instances géré.

Créer un client HTTP avec un side-car Envoy

Vous pouvez vérifier le déploiement en créant une VM cliente avec un proxy side-car Envoy qui demande la configuration Traffic Director créée précédemment. Le paramètre mesh de la commande gcloud fait référence à la ressource Mesh que vous avez déjà créée.

  1. Créez un modèle d'instance.

    gcloud beta compute instance-templates create td-vm-client-template \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --service-proxy=enabled,mesh=sidecar-mesh
    
  2. Créez une VM avec un proxy Envoy connecté à Traffic Director.

    gcloud compute instances create td-vm-client \
      --zone=${ZONE} \
      --source-instance-template td-vm-client-template
    
  3. Connectez-vous à la VM.

    gcloud compute ssh td-vm-client
    
  4. Exécutez la commande curl pour vérifier la connectivité HTTP aux services de test.

    curl -H "Host: helloworld-gce" http://10.0.0.1/
    

La commande doit renvoyer la réponse de l'une des VM du groupe d'instances géré, avec son nom d'hôte imprimé sur la console.