
La derniÚre fois, nous avons discuté des capacités de NSX Edge en matiÚre de routage statique et dynamique, et aujourd'hui nous allons examiner le répartiteur de charge.
Avant de commencer la configuration, je voudrais rappeler briÚvement les principaux types de répartition de charge.
Théorie
Les solutions de répartition de charge d'aujourd'hui sont généralement classées en deux catégories : la répartition de charge de niveau quatre (transport) et de niveau sept (application) du modÚle . Le modÚle OSI n'est pas le meilleur point de référence pour décrire les méthodes de répartition de charge. Par exemple, si un répartiteur de charge L4 prend également en charge la terminaison TLS, devient-il alors un répartiteur de charge L7 ? Mais c'est ainsi.
- Répartiteur de charge L4 représente généralement un proxy intermédiaire entre le client et un ensemble de backends disponibles, qui termine les connexions TCP (c'est-à -dire qui répond à SYN), sélectionne un backend et initie une nouvelle session TCP en direction de celui-ci, en envoyant SYN de maniÚre autonome. Ce type en est un des basiques, d'autres variantes sont possibles.
- Répartiteur de charge L7 répartit le trafic parmi les backends disponibles de maniÚre plus « raffinée » que ne le fait le répartiteur de charge L4. Il peut prendre des décisions concernant le choix du backend en fonction, par exemple, du contenu du message HTTP (l'URL, le cookie, etc.).
Indépendamment du type, un répartiteur de charge peut prendre en charge les fonctionnalités suivantes :
- DĂ©tection des services â processus de dĂ©termination de l'ensemble des backends disponibles (Static, DNS, Consul, Etcd, etc.).
- VĂ©rification de la disponibilitĂ© des backends dĂ©tectĂ©s (ping actif du backend avec une requĂȘte HTTP, dĂ©tection passive des problĂšmes dans les connexions TCP, prĂ©sence de plusieurs codes HTTP 503 consĂ©cutifs dans les rĂ©ponses, etc.).
- La rĂ©partition elle-mĂȘme (round robin, sĂ©lection alĂ©atoire, hachage de l'adresse IP source, URI).
- Terminaison TLS et vérification des certificats.
- Options liées à la sécurité (authentification, prévention des attaques par déni de service, limitation de la bande passante) et bien plus encore.
NSX Edge propose le support de deux modes de déploiement pour le répartiteur de charge :
Mode proxy, ou one-arm. Dans ce mode, NSX Edge utilise son adresse IP comme adresse source lors de l'envoi d'une demande Ă l'un des backends. Ainsi, le rĂ©partiteur de charge remplit simultanĂ©ment les fonctions de NAT source et de NAT destination. Le backend voit tout le trafic comme Ă©tant envoyĂ© par le rĂ©partiteur de charge et lui rĂ©pond directement. Dans ce schĂ©ma, le rĂ©partiteur doit ĂȘtre sur le mĂȘme segment rĂ©seau que les serveurs internes.
Voici comment cela se passe :
1.       L'utilisateur envoie une demande à l'adresse VIP (adresse du répartiteur de charge), qui est configurée sur Edge.
2.       Edge choisit l'un des backends et effectue un NAT destination, remplaçant l'adresse VIP par l'adresse du backend sélectionné.
3.       Edge effectue un NAT source, remplaçant l'adresse de l'utilisateur ayant envoyé la demande par la sienne.
4.       Le paquet est envoyé au backend sélectionné.
5.       Le backend ne répond pas directement à l'utilisateur, mais à Edge, puisque l'adresse initiale de l'utilisateur a été changée en l'adresse du répartiteur de charge.
6.       Edge transmet la réponse du serveur à l'utilisateur.
Le schéma ci-dessous.

Mode transparent, ou en ligne. Dans ce scénario, le répartiteur de charge a des interfaces à la fois sur le réseau interne et externe. Il n'y a pas d'accÚs direct au réseau interne depuis l'extérieur. Le répartiteur de charge intégré agit comme une passerelle NAT pour les machines virtuelles sur le réseau interne.
Le mécanisme est le suivant :
1.       L'utilisateur envoie une demande à l'adresse VIP (adresse du répartiteur de charge), qui est configurée sur Edge.
2.       Edge choisit l'un des backends et effectue un NAT destination, remplaçant l'adresse VIP par l'adresse du backend sélectionné.
3.       Le paquet est envoyé au backend sélectionné.
4.       Le backend reçoit la demande avec l'adresse initiale de l'utilisateur (le NAT source n'a pas été exécuté) et lui répond directement.
5.       Le trafic est à nouveau pris en charge par le répartiteur de charge, car dans le schéma en ligne, il agit généralement comme la passerelle par défaut pour la grappe de serveurs.
6. Â Â Â Â Â Â Edge effectue un NAT source pour envoyer le trafic Ă l'utilisateur, en utilisant son VIP comme adresse IP source.
Le schéma ci-dessous.

Pratique
Sur mon banc d'essai, 3 serveurs avec Apache configurĂ© pour fonctionner en HTTPS sont installĂ©s. Edge effectuera la rĂ©partition des requĂȘtes HTTPS par la mĂ©thode du round robin, en proxy chaque nouvelle demande vers un nouveau serveur.
Commençons.
Générer un certificat SSL qui sera utilisé par NSX Edge.
Vous pouvez importer un certificat CA valide ou utiliser un certificat auto-signé. Dans ce test, je vais utiliser un certificat auto-signé.
- Dans l'interface de vCloud Director, accédez aux paramÚtres des services Edge.

- Accédez à l'onglet Certificats. Dans la liste des actions, choisissez d'ajouter un nouveau CSR.

- Remplissez les champs nécessaires et cliquez sur Keep.

- Sélectionnez le CSR nouvellement créé et choisissez l'option self-sign CSR.

- Choisissez la durée de validité du certificat et cliquez sur Keep.

- Le certificat auto-signé est apparu dans la liste des certificats disponibles.

Configurez le Profil d'Application.
Les profils d'application offrent un contrÎle plus complet sur le trafic réseau et facilitent sa gestion. Ils permettent de définir le comportement pour des types de trafic spécifiques.
- Allez dans l'onglet Load Balancer et activez le répartiteur de charge. L'option Acceleration enabled permet ici au répartiteur d'utiliser un équilibrage L4 plus rapide au lieu de L7.

- Accédez à l'onglet Profil d'application pour définir le profil de l'application. Cliquez sur +.

- Donnez un nom au profil et choisissez le type de trafic pour lequel le profil sera appliqué. Voici quelques explications sur certains paramÚtres.
Persistence â conserve et suit les donnĂ©es de session, par exemple : quel serveur spĂ©cifique du pool traite la demande de l'utilisateur. Cela garantit que les demandes de l'utilisateur sont dirigĂ©es vers le mĂȘme membre du pool tout au long de la session ou des sessions suivantes.
Enable SSL passthrough â en choisissant cette option, NSX Edge arrĂȘte de terminer le SSL. Au lieu de cela, la terminaison se produit directement sur les serveurs pour lesquels l'Ă©quilibrage est effectuĂ©.
Insert X-Forwarded-For HTTP header â permet de dĂ©terminer l'adresse IP d'origine du client se connectant au serveur web via le rĂ©partiteur de charge.
Enable Pool Side SSL â permet d'indiquer que le pool sĂ©lectionnĂ© est composĂ© de serveurs HTTPS.

- Puisque je vais Ă©quilibrer le trafic HTTPS, il est nĂ©cessaire d'activer le Pool Side SSL et de choisir le certificat gĂ©nĂ©rĂ© prĂ©cĂ©demment dans l'onglet Virtual Server Certificates â> Service Certificate.

- De mĂȘme pour Pool Certificates â> Service Certificate.

Créons un pool de serveurs dont le trafic sera équilibré.
- Accédez à l'onglet Pools. Cliquez sur +.

- Donnez un nom au pool, choisissez l'algorithme (je vais utiliser round robin) et le type de surveillance pour le contrÎle de santé du backend. L'option Transparent indique si les adresses IP d'origine des clients sont visibles par les serveurs internes.
- Si l'option est désactivée, le trafic pour les serveurs internes provient de l'adresse IP du répartiteur.
- Si l'option est activée, les serveurs internes voient les adresses IP des clients. Dans cette configuration, NSX Edge doit agir en tant que passerelle par défaut pour garantir que les paquets retournés passent par NSX Edge.
NSX prend en charge les algorithmes d'équilibrage suivants :
- IP_HASH â sĂ©lection du serveur basĂ© sur les rĂ©sultats d'une fonction de hachage pour l'adresse IP source et destination de chaque paquet.
- LEASTCONN â Ă©quilibrage des connexions entrantes en fonction du nombre de connexions dĂ©jĂ Ă©tablies sur un serveur spĂ©cifique. Les nouvelles connexions seront dirigĂ©es vers le serveur avec le moins de connexions.
- ROUND_ROBIN â les nouvelles connexions sont envoyĂ©es Ă chaque serveur Ă tour de rĂŽle, selon le poids qui leur est attribuĂ©.
- URI â la partie gauche de l'URI (avant le point d'interrogation) est hachĂ©e et divisĂ©e par le poids total des serveurs dans le pool. Le rĂ©sultat indique quel serveur reçoit la requĂȘte, garantissant que la requĂȘte est toujours dirigĂ©e vers le mĂȘme serveur tant que tous les serveurs restent disponibles.
- HTTPHEADER â Ă©quilibrage basĂ© sur un en-tĂȘte HTTP spĂ©cifique qui peut ĂȘtre spĂ©cifiĂ© comme paramĂštre. Si l'en-tĂȘte est absent ou ne contient aucune valeur, l'algorithme ROUND_ROBIN est appliquĂ©.
- URL â chaque requĂȘte HTTP GET recherche un paramĂštre d'URL spĂ©cifiĂ© comme argument. Si le paramĂštre est suivi d'un signe Ă©gal et d'une valeur, alors la valeur est hachĂ©e et divisĂ©e par le poids total des serveurs en cours d'exĂ©cution. Le rĂ©sultat indique quel serveur reçoit la requĂȘte. Ce processus est utilisĂ© pour suivre les identifiants des utilisateurs dans les requĂȘtes et s'assurer qu'un mĂȘme identifiant utilisateur est toujours envoyĂ© au mĂȘme serveur tant que tous les serveurs restent disponibles.

- Dans le bloc Membres, cliquez sur + pour ajouter des serveurs au pool.

1. L'adresse du serveur Elasticsearch (définie lors de l'installation).- nom du serveur ;
- adresse IP du serveur ;
- port sur lequel le serveur recevra le trafic ;
- port pour le contrÎle de santé (Surveillance de santé) ;
- poids (Weight) â ce paramĂštre permet de rĂ©guler la quantitĂ© proportionnelle de trafic reçue par un membre spĂ©cifique du pool ;
- Max Connections â nombre maximal de connexions au serveur ;
- Min Connections â nombre minimal de connexions que le serveur doit traiter avant que le trafic soit redirigĂ© vers le prochain membre du pool.

Voici à quoi ressemble le pool final composé de trois serveurs.

Ajoutons un Serveur Virtuel
- Nous passons Ă l'onglet Serveurs Virtuels. Cliquez sur +.

- Activez le serveur virtuel en utilisant Activer le Serveur Virtuel.
Nous lui attribuons un nom, choisissons le Profil d'Application créé prĂ©cĂ©demment, sĂ©lectionnons le Pool et indiquons l'adresse IP sur laquelle le Serveur Virtuel recevra des requĂȘtes externes. Nous spĂ©cifions le protocole HTTPS et le port 443.
Les paramĂštres optionnels ici :
Limite de connexion â le nombre maximum de connexions simultanĂ©es que le serveur virtuel peut traiter ;
Limite de taux de connexion (CPS) â le nombre maximum de nouvelles requĂȘtes entrantes par seconde.

La configuration de l'Ă©quilibreur de charge est maintenant terminĂ©e, nous pouvons vĂ©rifier son fonctionnement. Les serveurs ont une configuration simple, permettant de comprendre quel serveur du pool a traitĂ© la requĂȘte. Lors de la configuration, nous avons sĂ©lectionnĂ© l'algorithme de rĂ©partition Round Robin, et le paramĂštre Poids pour chaque serveur est Ă©gal Ă un, donc chaque requĂȘte suivante sera traitĂ©e par le serveur suivant du pool.
Nous saisissons l'adresse externe de l'équilibreur de charge dans le navigateur et voyons :

AprĂšs avoir rafraĂźchi la page, la requĂȘte sera traitĂ©e par le serveur suivant :

Et encore une fois - pour vérifier le troisiÚme serveur du pool :

Lors de la vérification, nous pouvons voir que le certificat que nous envoie Edge est celui que nous avons généré au tout début.
Vérification de l'état de l'équilibreur de charge depuis la console Edge gateway. Pour cela, tapez show service loadbalancer pool.

Configurons le Service Monitor pour vérifier l'état des serveurs dans le pool.
Avec le Service Monitor, nous pouvons suivre l'Ă©tat des serveurs dans le pool backend. Si la rĂ©ponse Ă la requĂȘte ne correspond pas Ă ce qui est attendu, le serveur peut ĂȘtre retirĂ© du pool pour ne recevoir aucune nouvelle requĂȘte.
Trois méthodes de vérification sont configurées par défaut :
- TCP-monitor,
- HTTP-monitor,
- HTTPS-monitor.
Créons un nouveau.
- Nous allons dans l'onglet Service Monitoring, cliquons sur +.

- Nous choisissons :
- un nom pour la nouvelle méthode ;
- un intervalle pour l'envoi des requĂȘtes,
- un délai d'attente pour la réponse,
- le type de surveillance â requĂȘte HTTPS utilisant la mĂ©thode GET, le code d'Ă©tat attendu â 200(OK) et l'URL de la requĂȘte.
- La configuration du nouveau Service Monitor est maintenant terminée, nous pouvons l'utiliser lors de la création du pool.

Configurons les RĂšgles d'Application.
Les RĂšgles d'Application sont un moyen de manipuler le trafic basĂ© sur des dĂ©clencheurs spĂ©cifiques. Avec cet outil, nous pouvons crĂ©er des rĂšgles avancĂ©es de rĂ©partition de charge, dont la configuration pourrait ne pas ĂȘtre possible via des profils d'application ou d'autres services disponibles sur Edge Gateway.
- Pour créer une rÚgle, nous allons dans l'onglet RÚgles d'application du répartiteur.

- Nous sélectionnons le nom, le script qui utilisera la rÚgle et cliquons sur Conserver.

- Une fois la rÚgle créée, nous devons modifier le Serveur virtuel déjà configuré.

- Dans l'onglet Avancé, nous ajoutons la rÚgle que nous avons créée.

Dans l'exemple ci-dessus, nous avons activé le support tlsv1.
Quelques exemples supplémentaires :
Rediriger le trafic vers un autre pool.
Avec ce script, nous pouvons rediriger le trafic vers un autre pool de rĂ©partition si le pool principal ne fonctionne pas. Pour que la rĂšgle fonctionne, plusieurs pools doivent ĂȘtre configurĂ©s sur le rĂ©partiteur et tous les membres du pool principal doivent ĂȘtre en Ă©tat d'arrĂȘt. Il faut indiquer le nom du pool, et non son ID.
acl pool_down nbsrv(PRIMARY_POOL_NAME) eq 0
use_backend SECONDARY_POOL_NAME if PRIMARY_POOL_NAME
Rediriger le trafic vers une ressource externe.
Ici, nous redirigeons le trafic vers un site web externe si tous les participants au pool principal sont en Ă©tat d'arrĂȘt.
acl pool_down nbsrv(NAME_OF_POOL) eq 0
redirect location http://www.example.com if pool_down
Encore plus d'exemples .
C'est tout pour le rĂ©partiteur. Si vous avez des questions, n'hĂ©sitez pas Ă demander, je suis prĂȘt Ă rĂ©pondre.
Source : habr.com
























