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
.
HTTPRoute
etMesh
ressources (cliquez pour agrandir)Assurez-vous de respecter les conditions préalables décrites dans les guides suivants:
- Préparer la configuration de Traffic Director avec Envoy
- Guides de configuration du routage du service Traffic Director
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
.
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
.
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
.
Créez le modèle d'instance avec un service HTTP
helloworld
sur le port80
.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"
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
Créez une vérification d'état.
gcloud compute health-checks create http http-helloworld-health-check
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
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
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.
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"
Créez la ressource
HTTPRoute
à l'aide de la spécification dans le fichierhttp_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.
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
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
Connectez-vous à la VM.
gcloud compute ssh td-vm-client
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.