2
votes

HAProxy - routage vers l'IP backend basé sur l'URL / le chemin?

J'essaie d'utiliser HAProxy comme proxy dynamique pour les hôtes backend basés sur une correspondance regex partielle / chemin. Le cas d'utilisation est le routage d'une interface HTTPS vers un grand nombre de nœuds qui vont et viennent fréquemment, sans maintenir un mappage explicite de / path vers les noms d'hôte du serveur.

Plus précisément dans ce cas, les nœuds sont membres d'un cluster Amazon EMR, et j'aimerais inverser le proxy / réécrire les requêtes HTTP comme:

<haproxy>/emr/ip-99-88-77-66:4040               -> 99.88.77.66:4040
<haproxy>/emr/ip-55-44-33-22/ganglia            -> 55.44.33.22/ganglia
<haproxy>/emr/ip-11-11-11-11:8088/cluster/nodes -> 11.11.11.11:8088/cluster/nodes
...etc

de manière dynamique.

Au fur et à mesure, analysez le chemin commençant par / emr et les requêtes proxy vers une adresse IP capturée par l'expression régulière:

emr \ / ip - (\ d {1, 3} - \ d {1,3} - \ d {1,3} - \ d {1,3}) (. *)

Est-ce possible avec HAProxy? Je sais que ce n'est probablement pas le bon outil pour le travail, mais si possible (même non performant) j'aimerais utiliser l'outillage que nous avons déjà en place.

tl; dr strong> essentiellement nginx proxy_pass , mais avec HAProxy et en récupérant une IP backend à partir de l'url.

Merci!


0 commentaires

3 Réponses :


0
votes

Oui, c'est possible en utilisant des filtres d'url dans haproxy, voir le lien ci-dessous pour plus de détails. https://fossies.org/linux/haproxy/doc/internals/filters. txt


0 commentaires

0
votes

Oui, cela peut être fait. Je vous recommande d'utiliser les ACL, ainsi que Roundrobin & checks, qui vous permettront de vérifier si cette instance est active avant de l'acheminer avec une vérification. De cette façon, le système ne sera acheminé que vers les instances de service qui sont opérationnelles et ne les aura préchargées pour utilisation que si elles sont actives.

En outre, cela vous permettra également de faire un cycle d'entrée et de sortie d'instances en permanence, par exemple si les coûts de votre instance AWS changent avec d'autres fournisseurs que vous pourriez avoir, et vous permet d'équilibrer la charge en gardant à l'esprit des économies de coûts maximales.


0 commentaires

0
votes

oui, c'est possible .. consultez le manuel officiel:

Utilisation des ACL et extraction d'exemples


2 commentaires

Il me semble que vous pourriez faire cela avec les ACL si vous aviez une liste statique d'adresses IP possibles que vous pourriez lister dans votre backend. Si l'adresse IP transmise n'est pas connue à l'avance, je ne sais pas comment les ACL peuvent aider ici. Autant que je sache, le "serveur" dans un backend est statique et ne peut pas être défini à partir de données analysées hors de l'URL.


Salut, désolé pour le retard! J'espère que vous avez réussi à résoudre le problème. Il serait intéressant pour vous d'utiliser un service de découverte dans votre VPC. Une autre solution consiste à passer au cloud natif.