Options de configuration d'une VM Compute Engine avec déploiement Envoy automatique

Ce guide fournit des informations sur les options et tâches supplémentaires permettant le déploiement automatisé d'Envoy.

Options de création de modèles d'instance supplémentaires

Lorsque vous créez un modèle d'instance pour le déploiement automatisé du proxy Envoy, vous pouvez utiliser les paramètres suivants pour définir certains aspects du déploiement et le comportement des proxys.

Réglage Valeur et description Obligatoire ou facultatif
--service-proxy enabled
Détermine si le proxy et l'agent de service sont installés et configurés sur la VM.
Obligatoire si vous souhaitez déployer et configurer automatiquement le proxy de service. Si vous omettez ce paramètre, le proxy de service n'est ni installé ni configuré.
--service-proxy:serving-ports Liste de ports séparés par un point-virgule.
Port(s) sur lequel/lesquels votre application/charge de travail est diffusée. Le proxy de service intercepte le trafic entrant, puis le transmet au(x) port(s) de diffusion spécifiés sur localhost.
Facultatif
Si vous omettez cette option, le proxy de service gère uniquement le trafic sortant de votre charge de travail. Il ne gère pas le trafic entrant.
--service-proxy:proxy-port Un seul port.
Port sur lequel le proxy de service écoute. La VM intercepte le trafic et le redirige vers ce port pour qu'il soit géré par le proxy de service.
Facultatif.
Si vous omettez cette option, la valeur par défaut est 15001.
--service-proxy:network Nom d'un réseau VPC valide.
Réseau VPC Google Cloud utilisé par le plan de contrôle du proxy de service pour générer une configuration dynamique pour le proxy de service.
Obligatoire si la VM se trouve sur plusieurs réseaux. Sinon, cette option est facultative.
Si vous l'omettez, la valeur spécifiée à l'aide du paramètre --network lors de la création du modèle d'instance de VM est utilisée.
--service-proxy:tracing ON ou OFF
Active le proxy de service pour générer des informations de traçage distribué. Si ce paramètre est défini sur ON, le plan de contrôle du proxy de service génère une configuration qui active le traçage basé sur les ID.
Pour plus d'informations, reportez-vous à la documentation generate_request_id du proxy Envoy.
Facultatif.
Si vous omettez cette option, le traçage n'est pas activé.
--service-proxy:access-log Chemin du fichier des journaux d'accès envoyés au proxy de service par le plan de contrôle. Toutes les requêtes entrantes et sortantes sont enregistrées dans ce fichier.
Pour plus d'informations, reportez-vous à la documentation sur le journal d'accès aux fichiers du proxy Envoy.
Facultatif. Il n'existe pas de valeur par défaut. Si vous ne spécifiez pas le chemin d'accès au fichier, les journaux ne sont pas créés.
--service-proxy:intercept-all-outbound-traffic (Bêta) Active l'interception de tout le trafic sortant par le proxy de service, puis redirige vers un hôte externe. Utilisez gcloud beta avec cette option. Facultatif.
--service-proxy:exclude-outbound-ip-ranges (Bêta) Liste des adresses IP ou des plages CIDR séparées par un point-virgule (;) qui doivent être exclues de la redirection, entre guillemets ("). Ne s'applique que lorsque l'option intercept-all-outbound-traffic est définie. Utilisez gcloud beta avec cette option.

Par exemple :

exclude-outbound-ip-ranges="8.8.8.8;129.168.10.0/24"
Facultatif.
--service-proxy:exclude-outbound-port-ranges (Bêta) Liste des ports ou plages de ports, séparés par un point-virgule (;), spécifiés entre guillemets ("), qui doivent être exclus de la redirection. Ne s'applique que lorsque l'option intercept-all-outbound-traffic est définie. Utilisez gcloud beta avec cette option.

Par exemple :

exclude-outbound-port-ranges="81;8080-8090"
Facultatif.
--service-proxy:scope (Bêta) L'option scope définit une limite de configuration logique pour la ressource Gateway. Lorsqu'une VM démarre, le proxy de service communique avec Cloud Service Mesh pour récupérer les informations de routage correspondant aux routes associées à la passerelle portant ce nom de champ d'application. Lorsque scope est spécifié, la valeur du réseau est ignorée. Vous ne pouvez pas spécifier les valeurs scope et mesh en même temps. Utilisez gcloud beta avec cette option. Facultatif.
--service-proxy:mesh (Bêta) L'option mesh définit une limite de configuration logique pour une ressource Mesh. Lorsqu'une VM démarre, le proxy de service communique avec Cloud Service Mesh pour récupérer les informations de routage correspondant aux routes associées au Mesh avec ce nom de maillage. Lorsque mesh est spécifié, la valeur du réseau est ignorée. Vous ne pouvez pas spécifier les valeurs scope et mesh en même temps. Utilisez gcloud beta avec cette option. Facultatif.
--service-proxy:project-number (Bêta) L'option project-number spécifie le projet dans lequel les ressources Mesh et Gateway sont créées. Si non spécifiée, le projet où l'instance existe est utilisé. Ceci ne s'applique qu'aux nouvelles API de routage de service. Facultatif.
--service-proxy-labels Paires clé/valeur au format key=value.
Libellés que vous pouvez appliquer à votre proxy de service. Ils sont reflétés dans les métadonnées d'amorçage de votre proxy Envoy. Les libellés peuvent être n'importe quelle paire key=value que vous souhaitez définir en tant que métadonnées de proxy (par exemple, à utiliser avec le filtrage des configurations). Vous pouvez utiliser ces options pour appliquer des libellés d'application et de version, par exemple app=review ou version=canary. Vous pouvez également les utiliser conjointement.
Facultatif.

Par exemple, la commande gcloud suivante crée un modèle d'instance nommé proxy-it. Le proxy Envoy et l'agent de service sont installés sur les instances créées à partir de ce modèle.

gcloud compute instance-templates create proxy-it \
    --service-proxy enabled

Dans l'exemple suivant, le modèle d'instance est nommé proxy-it. Le proxy Envoy et l'agent du proxy de service sont installés, le port de diffusion et le port du proxy sont définis, le traçage est activé et un libellé est défini.

gcloud compute instance-templates create proxy-it \
  --service-proxy enabled,serving-ports=8080,proxy-port=15001,tracing=ON \
  --service-proxy-labels version=canary

Le schéma suivant représente le flux du trafic lorsque vous spécifiez 8080 comme port de diffusion. Les connexions TCP entrantes vers le port 8080 sont interceptées par les règles iptables et redirigées vers le proxy Envoy, qui les transmet ensuite à l'application de votre VM qui écoute sur le port TCP 8080. Autres caractéristiques :

  • Toutes les connexions sortantes aux adresses IP virtuelles des services configurés dans Cloud Service Mesh sont interceptées par iptables, qui configure Netfilter. Netfilter garantit que le trafic correspondant qui traverse la pile réseau est intercepté et redirigé vers le proxy Envoy. Le trafic est ensuite équilibré en fonction de la configuration de Cloud Service Mesh.
  • Toutes les autres connexions entrantes ne sont pas interceptées par les règles iptables, mais transmises directement aux services de la VM.
  • Toutes les connexions aux points de terminaison externes sont directement transmises aux adresses IP externes sans être interceptées.
  • L'ensemble du trafic UDP est transmis directement à la destination sans être intercepté par les règles iptables.

Ce flux est illustraté dans le schéma suivant.

Distribution du trafic avec Cloud Service Mesh (cliquez pour agrandir)
Distribution du trafic avec Cloud Service Mesh (cliquez pour agrandir)

Les flux de trafic représentés dans le schéma sont les suivants :

  1. Le trafic entrant par le port de destination 80 n'est pas intercepté, mais acheminé directement vers le service qui écoute sur le port.
  2. Le trafic entrant par le port de destination 8080, intercepté et redirigé vers le port d'écoute Envoy.
  3. Envoy transmet le trafic de (2) au service 2 qui écoute sur le port localhost 8080.
  4. Trafic sortant destiné à l'adresse IP virtuelle et au port de la règle de transfert Cloud Service Mesh, intercepté et redirigé vers le port d'écoute Envoy.
  5. Envoy transfère le trafic de (4) vers le point de terminaison du backend du service de backend Cloud Service Mesh de destination.
  6. Trafic sortant destiné à une adresse IP virtuelle et un port autres que Cloud Service Mesh, non intercepté, mais acheminé vers un service externe.

Utiliser des libellés

Si vous souhaitez spécifier des libellés à utiliser avec le filtrage des métadonnées Cloud Service Mesh ou activer la journalisation des accès pour les proxys Envoy, utilisez les paramètres --service-proxy-labels ou --service-proxy access-log.

Exemple :

gcloud compute instance-templates create td-vm-template-auto \
   --service-proxy enabled,access-log=/var/log/envoy/access.log,network=default \
   --service-proxy-labels myapp=review,version=canary

Le proxy Envoy peut intercepter les ports de vérification de l'état des services sur les VM. Dans ce cas, les vérifications de l'état font état de votre application et des proxys Envoy. Le trafic n'est pas dirigé vers la VM si le proxy Envoy ne s'exécute pas correctement. Exemple :

gcloud compute instance-templates create td-vm-template-auto \
  --service-proxy=enabled,serving-ports="80;8080"

Utiliser le processus de mise à jour de groupe d'instances géré

Si vous avez configuré les proxys Envoy à l'aide du processus automatisé, vous pouvez mettre à jour votre groupe d'instances géré à l'aide du processus de mise à jour de groupes d'instances gérés. Utilisez ce processus pour :

  • ajouter des composants du proxy de service à un groupe d'instances géré existant et l'enregistrer dans un réseau Cloud Service Mesh ;
  • mettre à jour les composants du proxy de service sur les VM.

Avant d'effectuer la mise à jour progressive, procédez comme suit :

  1. Définissez le drainage de connexion pour le service de backend sur une valeur d'au moins 30 secondes.
  2. Définissez le paramètre --min-ready sur 3 minutes ou plus lorsque vous appelez l'outil de mise à jour. Le paramètre --min-ready oblige le groupe d'instances géré à attendre la mise à jour d'une VM avant de procéder à la mise à jour de la VM suivante. Sans cela, la VM nouvellement créée n'a pas le temps de démarrer Envoy ni l'agent du proxy de service, et la mise à jour se poursuit trop rapidement.

Pour effectuer une mise à jour progressive du groupe d'instances géré, procédez comme suit :

  1. Créez un modèle d'instance comme décrit ci-dessus avec les informations du proxy de service. Pour procéder à la mise à jour, vous pouvez utiliser la version d'origine du modèle d'instance si elle contient les informations du proxy de service et que vous souhaitez effectuer une mise à jour vers la version stable la plus récente du logiciel du proxy.
  2. Effectuez une mise à jour progressive du groupe d'instances géré. Assurez-vous de définir REPLACE en tant qu'action minimale que le programme de mise à jour doit effectuer. Le groupe d'instances installe la dernière version du logiciel du proxy et la configure comme spécifié dans le modèle d'instance.

Vous pouvez également supprimer les composants du proxy de service d'un groupe d'instances géré à l'aide du processus de mise à jour :

  1. Créez un modèle d'instance sans spécifier l'option --service-proxy.

  2. Effectuez une mise à jour progressive à l'aide du processus de mise à jour du groupe d'instances géré.

Cette action supprime le proxy Envoy de vos VM. Si ce groupe d'instances géré était le seul à être associé au service de backend, vous pouvez supprimer la configuration créée lors de la configuration de Cloud Service Mesh.