【问题标题】:API call to all instances behind AWS load balancer对 AWS 负载均衡器后面的所有实例的 API 调用
【发布时间】:2018-03-22 09:09:24
【问题描述】:

我试图在 Elastic Beanstalk 上运行相同应用程序的多个实例上命中一个端点(因此在负载均衡器后面)。

在所有实例上调用端点的最佳方法是什么 - 并确定它已被接收?

我已经考虑过 SNS(这对我们的需求来说有点过头了)。我查看了 ELB API 以查找实例,然后查找实例的公共 dns 并调用端点 - 但找不到任何示例。

任何帮助都会很棒。

【问题讨论】:

标签: amazon-web-services amazon-ec2 elastic-load-balancer


【解决方案1】:

如果负载均衡器后面的 EC2 实例具有公共 IP 地址,则转到其公共地址。如果您的 EC2 实例具有私有 IP 地址,则通过您的 VPN 或堡垒主机转到私有地址。

Amazon 的负载均衡器 (CLB / ALB / NLB) 不支持您想做的事情。

注意:您的 EC2 实例应仅具有私有 IP 地址并位于私有子网中,以便您的 EC2 实例只能由使用负载均衡器的第三方访问。否则,不良行为者只会绕过您的负载均衡器并直接攻击您的 EC2 实例。

【讨论】:

    【解决方案2】:

    忽略它背后的原因,你可以......

    构建您的 API,例如它可以让任何实例代理您对其他实例的调用。

    例如,如果您点击 elb-domain.xyz/myendpoint,则为请求提供服务的实例可以使用 AWS API 查询其负载均衡器下的可用实例。然后,您的 API 函数会根据需要将请求代理到所有其他实例。您需要通过标记第二个请求不要进一步代理来防止多米尼奥效应/无限循环。

    您可以异步执行此操作,也可以等待所有实例成功返回,然后再返回客户端。

    这种方法的优点

    • 可以将您的实例保留在没有公共 IP 的私有 VPC 中。
    • 您的客户无需了解实例详细信息。
    • 它可以适应自动缩放(您必须处理尚未准备好处理您的请求的新缩放实例)
    • 一个 IAM 角色,允许实例完成此任务,而无需将访问/密钥存储在其他地方。

    【讨论】:

    • 您能否详细说明您在答案中提到的 AWS API。有没有这样的API,如果有请链接到文档
    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多