Options de configuration avancées de Traffic Director

Ce document contient des notes qui peuvent vous être utiles lors de la configuration de Traffic Director.

Configurer une seule VM Compute Engine pour Traffic Director

Utilisez cette procédure comme exemple de mise en œuvre du déploiement d'un proxy side-car et de l'interception du trafic pour autoriser une VM à accéder aux services Traffic Director.

Si vous suivez ces instructions pour configurer Traffic Director sur une seule VM, certaines tâches de configuration nécessitent que vous ayez accès à un hôte Linux. Cet hôte peut être une machine locale ou une VM exécutée sur votre réseau cloud privé virtuel.

Commencez par télécharger et préparer les fichiers de configuration et les exemples de scripts.

  1. Connectez-vous à l'hôte Linux que vous allez utiliser lors du processus de configuration.

  2. Téléchargez l'archive contenant les fichiers requis sur l'hôte Linux et décompressez-la :

    wget https://storage.googleapis.com/traffic-director/traffic-director.tar.gz
    tar -xzvf traffic-director.tar.gz; cd traffic-director
    

    L'archive contient les fichiers suivants :

    • sidecar.env : fichier de configuration comprenant les variables d'environnement.
    • pull_envoy.sh : exemple de script permettant d'extraire le fichier binaire Envoy à partir du tag d'image Docker fourni. Si aucun tag n'est fourni, le script est extrait à partir de https://hub.docker.com/r/istio/proxyv2/tags.
    • iptables.sh : script de configuration des règles Netfilter.
    • bootstrap_template.yaml : fichier du modèle d'amorçage pour Envoy.
    • run.sh : script de premier niveau qui utilise le fichier de configuration sidecar.env afin de configurer iptables pour l'interception et d'exécuter le proxy side-car Envoy.
  3. Sur chaque hôte exécutant un proxy side-car, créez un utilisateur système servant à exécuter le processus associé au proxy Envoy. Il s'agit de l'utilisateur proxy Envoy. La connexion est désactivée pour cet utilisateur proxy Envoy.

    sudo adduser --system --disabled-login envoy
    
  4. Ouvrez le fichier sidecar.env pour modifier la configuration. Lisez les commentaires intégrés au fichier de configuration pour obtenir une description détaillée de chaque variable.

    1. Dans le fichier sidecar.env, définissez la variable ENVOY_USER sur le nom d'utilisateur que vous avez choisi pour l'utilisateur proxy Envoy.
  5. Copiez votre propre fichier binaire Envoy dans le répertoire traffic-director ou procédez comme suit pour obtenir un binaire Envoy :

    1. Installez les outils Docker sur l'hôte Linux que vous utilisez. Vous pouvez trouver les fichiers correspondant à chaque système d'exploitation compatible dans la section Supported platforms (plates-formes compatibles).
    2. Exécutez le script pull_envoy.sh pour extraire le binaire Envoy.

Pour chaque hôte de VM exécutant des applications à l'aide de Traffic Director, procédez ensuite comme suit :

  1. Copiez l'intégralité du répertoire traffic-director contenant le fichier sidecar.env modifié et le binaire Envoy sur chaque hôte de VM qui exécute des applications devant utiliser Traffic Director.
  2. Ajoutez le script run.sh au script de démarrage de votre système afin de garantir qu'il s'exécute après chaque redémarrage de la VM.
  3. Sur chacun des hôtes de VM, exécutez le script run.sh :

    cd traffic-director
    sudo ./run.sh start
    
  4. Vérifiez que le proxy Envoy a correctement démarré.

    sudo ./run.sh status
    

    Vous devriez obtenir le résultat suivant :

    OK: Envoy seems to be running.
    OK: Traffic interception seems to be enabled.
    

    Vous pouvez également vérifier que le processus correspondant au proxy est bien en cours d'exécution à l'aide de la commande ps. Assurez-vous que le texte envoy apparaît dans le résultat.

    ps aux | grep envoy
    

    Vous pouvez vérifier dans quelle direction s'effectue l'interception du trafic à l'aide de la commande suivante :

    sudo iptables -S -t nat | grep ISTIO_REDIRECT
    

    Le résultat attendu est :

    -N ISTIO_REDIRECT
    -A ISTIO_OUTPUT -j ISTIO_REDIRECT
    -A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001`
    

Cartes des règles de routage

Il existe deux manières de configurer un routage dans une carte de règles de routage.

Vous pouvez activer le routage en fonction de l'adresse IP virtuelle et du port de destination du service. Si vous configurez une adresse IP virtuelle pour votre service en tant que paramètre IPAddress de la règle de transfert, seul le trafic à destination de cette adresse et du port associé est mis en correspondance et acheminé en fonction des paramètres d'hôte et de chemin spécifiés dans le mappage d'URL.

Vous pouvez également définir l'adresse de votre règle de transfert sur 0.0.0.0. Cela permet de configurer les proxys de sorte qu'ils ciblent le trafic uniquement en fonction du port de destination, quelle que soit l'adresse IP de destination de la requête. Le trafic est ensuite acheminé en fonction des paramètres d'hôte et de chemin d'accès spécifiés dans le mappage d'URL.

En conséquence de ces deux approches, les noms d'hôte tels qu'ils sont configurés dans les règles d'hôte doivent, s'ils sont associés à une adresse IP virtuelle et à une paire de ports ou à un port de destination unique (lorsque l'adresse IP virtuelle est 0.0.0.0), être uniques dans votre configuration du maillage de services. Autrement dit, vous ne pouvez pas disposer de deux services différents utilisant des ensembles de backends différents avec un même nom d'hôte.

Quelle que soit la méthode choisie, le trafic à destination de l'adresse IP virtuelle résolue à partir du nom d'hôte ou du nom de domaine complet du service et à destination du port sur lequel votre service écoute doit être intercepté et redirigé vers le proxy side-car. Reportez-vous à la section Configurer une seule VM Compute Engine pour Traffic Director afin d'obtenir des informations complètes sur la configuration de l'hôte.

Chaque règle de transfert d'un réseau VPC doit avoir une combinaison unique d'adresse IP et de port par réseau VPC, ce qui inclut également l'adresse 0.0.0.0. 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.

Pour éviter de perdre du trafic, suivez les instructions de la section Configuration avancée de l'interception du trafic ci-dessous.

Configuration avancée de l'interception du trafic

Si vos VM exécutent des applications qui ont besoin d'accéder aux services configurés par Traffic Director, vous devez installer un proxy side-car et configurer l'interception du trafic sur les VM. Cela permet au proxy side-car de gérer le routage du trafic vers les backends de ces services.

Si l'interception de l'intégralité du trafic sortant d'une VM n'est pas acceptable pour votre déploiement, vous pouvez rediriger un trafic spécifique vers le proxy side-car, tandis que le reste du trafic suit la route standard définie par la configuration de mise en réseau des hôtes.

Pour ce faire, modifiez la configuration de l'hôte de VM Compute Engine dans la procédure de configuration de Traffic Director avec des VM et un déploiement Envoy manuel comme suit :

  1. Déterminez la plage d'adresses IP associée aux services contrôlés par Traffic Director. Le trafic destiné à ces adresses IP est intercepté et redirigé vers le proxy side-car. La plage est spécifique à votre déploiement.

  2. Dans le fichier sidecar.env, définissez la valeur de SERVICE_CIDR sur cette plage. Le trafic à destination de ces adresses IP est redirigé par netfilter vers un proxy side-car et fait l'objet d'un équilibrage de charge en fonction de la configuration fournie par Traffic Director.

  3. L'exécution du proxy side-car n'a pas strictement besoin d'être associée à un utilisateur dédié exclu de l'interception du trafic. Toutefois, cela reste recommandé.

  4. Après avoir exécuté le script run.sh, comme indiqué dans la procédure principale, iptables est configuré pour intercepter et rediriger uniquement cette plage spécifique.

  5. Exécutez la commande suivante pour vérifier que netfilter est correctement configuré. Remplacez ${SERVICE_CIDR} par la valeur que vous avez configurée comme plage d'adresses IP interceptée.

    sudo iptables -L -t nat | grep -E "(ISTIO_REDIRECT).+${SERVICE_CIDR})"