web-dev-qa-db-fra.com

Elastic Load Balancing à la fois interne et Internet

Nous essayons d’utiliser Elastic Load Balancing dans AWS avec une mise à l’échelle automatique afin de pouvoir faire évoluer les rangs en fonction des besoins.

Notre application se compose de plusieurs applications plus petites, elles sont toutes sur le même sous-réseau et le même VPC.

Nous voulons placer notre ELB entre l’une de nos applications et le reste.

Le problème est que nous voulons que l’équilibreur de charge fonctionne à la fois en interne entre différentes applications utilisant une API, ainsi que en liaison avec Internet parce que notre application a encore une utilisation qui doit être effectuée en externe et non via l'API.

J'ai lu cette question mais je ne savais pas exactement comment le faire à partir de là. Cela ne précise pas vraiment les étapes à suivre ou peut-être l'ai-je très bien compris.

Peut-on avoir un ELB à la fois interne et externe?

Pour mémoire, je ne peux accéder à ce réseau que via un VPN.

10
engma

Il n'est pas possible pour un Elastic Load Balancer d'avoir à la fois une adresse IP publique et une adresse IP privée. C'est l'un ou l'autre, mais pas les deux.

Si vous souhaitez que votre ELB dispose d'une adresse IP privée, il ne peut pas écouter les demandes provenant d'Internet.

Si votre ELB est public, vous pouvez toujours l'appeler à partir de vos instances EC2 internes à l'aide du point de terminaison public. Cependant, il y a des mises en garde qui vont avec:

  • Le trafic quittera votre VPC et y entrera à nouveau. Une adresse IP privée ne vous permettra pas une connexion directe instance-à-ELB. 
  • Vous ne pouvez pas non plus utiliser de groupes de sécurité dans vos règles de groupe de sécurité.

Il existe 3 scénarios alternatifs:

  1. Dupliquez les instances ELB et EC2, l'une dédiée au trafic privé, l'autre dédiée au trafic public.
  2. Avoir 2 ELB (un public et un privé) partageant les mêmes instances EC2 principales.
  3. N'utilisez pas un ELB pour le trafic privé ou public mais utilisez une adresse IP Elastic (si publique) ou une adresse IP privée (si privée) sur une seule instance EC2.
22
Matt Houser

Je ne suis pas d'accord avec la réponse de @MattHouser. En fait, dans un VPC, toutes les interfaces internes de votre ELB sont répertoriées dans Interfaces réseau avec IP publique ET IP privée principale. J'ai testé l'adresse IP privée de mon ELB public et son fonctionnement est identique à celui de l'extérieur.

Le problème est le suivant: ces adresses IP ne sont répertoriées nulle part de manière actualisée, comme sur un DNS ELB privé. Donc, vous devez le faire vous-même.

J'ai créé un petit script POC à ce sujet, avec une zone hébergée interne de Route53: https://Gist.github.com/darylounet/3c6253c60b7dc52da927b80a0ae8d428

7
DaryL

La solution AWS standard consisterait à avoir un ELB interne supplémentaire pour cela. On dirait que @DaryL offre une solution de contournement intéressante, mais il pourrait échouer pendant 5 minutes si le DNS n'est pas mis à jour. De plus, il n’existe aucun moyen d’avoir un groupe de sécurité distinct pour les adresses IP internes, car elles partagent l’ENI et la sécurité de l’adresse IP externe de l’ELB.

1
AstroTom

J'ai relevé le même défi et je peux confirmer que la meilleure solution à ce jour consiste à avoir deux ALB différents, l'un face à Internet et l'autre interne. Vous pouvez attacher les deux ALB à un seul groupe AutoScaling afin de pouvoir accéder au même cluster. 

Assurez-vous que les options réseau (sous-réseaux, groupes de sécurité) des deux ALB sont les mêmes pour que les deux puissent accéder aux mêmes instances de cluster. La mise à l'échelle automatique et la configuration de lancement fonctionnent de manière transparente avec les deux ALB attachés au même groupe AutoSacling. Cela fonctionne également avec les ALB créés à partir d'environnements ElasticBeanstalk. 

0
Mauricio Sánchez