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.
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:
Il existe 3 scénarios alternatifs:
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
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.
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.