【问题标题】:AWS Elastic Beanstalk environment with multiple Load Balancers具有多个负载均衡器的 AWS Elastic Beanstalk 环境
【发布时间】:2014-02-11 14:30:10
【问题描述】:

我有以下情况: 我有 1 个具有 2 个域的 Rails 应用程序,每个域都有多个/动态子域。 此应用位于 AWS 中,使用负载均衡的 Elastic Beanstalk。

我需要的是指向我的单个 Rails 应用程序的那 2 个域在端口 443 中的 SSL 下工作。

但由于 Elastic Beanstalk 只有一个负载均衡器,我只能在端口 433 上使用一个 SSL 证书 :( 使用 UCC SSL 证书不是解决方案,因为我需要每个域证书都是通配符,所以动态子域也可以工作。

对于如何让多个负载均衡器与 Elastic Beanstalk 环境完美配合有什么想法吗?

最好的。

【问题讨论】:

  • 此线程中标记为正确的答案应该有效,但我想我会分享 Madmuffin 和 sybind 答案可能仅适用于经典负载均衡器,我在这里回答了如何使用应用程序负载执行此操作平衡器和使用规则将流量转发到不同的 beanstalk 环境:stackoverflow.com/a/57564213/8222386

标签: amazon-web-services ssl amazon-ec2 load-balancing amazon-elastic-beanstalk


【解决方案1】:

要将多个 Elastic Load Balancer (ELB) 添加到 Elastic Beanstalk (EB) 应用程序,您需要将额外的 ELB 添加到 EB 应用程序的 Auto Scaling 组。

在命令行上

实现此目的的最简单方法是通过 AWS CLI (https://aws.amazon.com/cli/):

aws autoscaling attach-load-balancers --auto-scaling-group-name <SG_NAME> --load-balancer-names <ELB_NAME>

在 AWS 控制台中

当然,这也可以在 AWS 控制台中完成:

  1. 转到 EC2 > Auto Scaling > Auto Scaling 组
  2. 选择要添加 elb 的组
  3. 选择详细信息选项卡
  4. 右上角的编辑按钮
  5. 使用负载均衡器字段中的自动完成添加您的负载均衡器
  6. 保存

为方便起见,您可以查看所有 5 个步骤需要单击的位置(不要忘记保存!)

对我来说,这也适用于 eb 生成的自动缩放组(区域:eu-central-1)。

这可能在提问时不可用,但现在可用。

【讨论】:

  • 这在所有情况下都可以正常工作,除非弹性 beanstalk 环境配置为使用蓝/绿部署。蓝/绿部署会更改应用程序使用的自动缩放组,因此此方法会在部署新版本时破坏第二个负载均衡器。但在所有其他情况下,这是可以使用的解决方案。
  • 这对我不起作用。实例不会自动添加到新的负载均衡器中,如果我手动添加它们,它们将无法附加(它们没有通过健康测试,我怀疑它们不接受来自新 LB 的请求)
  • 谢谢谢谢谢谢!这个答案不仅对我来说是一个难以置信的节省时间,而且非常彻底!
【解决方案2】:

使用 Elastic Beanstalk 很难,因为他们有一种千篇一律的方式来部署您的应用程序,如果他们没有选择,那么您要么“破解”它,要么只是使用 EC2 或普通云服务器的完全不同的解决方案.

您可以尝试的一件事是使用第二个域(和子域)的证书创建另一个 ELB,并将其指向您的 Elastic Beanstalk 实例。如果您转到 ELB 控制台,您应该能够看到第一个域的 ELB。然后,您可以根据第一个域创建您的第二个域。

希望对你有帮助。

【讨论】:

  • 嘿@Rico,感谢您的建议。但是,我已经尝试手动创建另一个 ELB 并将另一个域指向它。它可以工作,但是 EB 的自动缩放不会将新实例添加到这个新的 ELB,只是 Elastic Beanstalk 自动生成的一个 :(
  • 为此,您必须手动创建另一个自动缩放组,然后将两个 ELB 添加到该自动缩放组。您可以使用与 Elastic Beanstalk 应用程序相同的启动配置。它不漂亮,但应该可以解决问题。您必须创建另一个自动缩放组的原因是现有的不允许您添加第二个 ELB。
  • @Rico 感谢您的解决方案!有趣的是,我能够向现有的自动缩放组添加第二个 ELB。
  • 感谢您的提示。写了一篇文章详细介绍了一步。希望我可以节省别人我浪费的时间哈哈labs.chiedo.com/blog/…
【解决方案3】:

我认为解决您的问题的最佳方法是在同一个 SSL 证书上拥有多个域,然后将该证书分配给您的 ELB 环境。

(您可以使用通配符,也许在提出问题时不可用)

您不需要额外的负载平衡器。

【讨论】:

  • 除非您使用多个域,例如 example.com 和 example.co.uk
  • 我在同一个证书上有多个域,@sybind 没有错
  • @sybind 如果您使用 Amazon Certificate Manager,您可以添加多个域。
【解决方案4】:

这对我有用,

首先,创建负载均衡器

aws elb create-load-balancer --load-balancer-name my-load-balancer --listeners "Protocol=HTTP,LoadBalancerPort=80,InstanceProtocol=HTTP,InstancePort=80" "Protocol=HTTPS,LoadBalancerPort=443,InstanceProtocol=HTTP,InstancePort=80,SSLCertificateId=arn-of-certificate" --subnets eb-subnet-of-primary-elb --security-groups sg-of-primary-elb

然后,将负载均衡器附加到 EB env 的主 Auto Scaling 组

aws autoscaling attach-load-balancers --auto-scaling-group-name asg-name-of-primary-asg-in-eb --load-balancer-names my-load-balancer

【讨论】:

    【解决方案5】:

    还有一点需要注意的是,EBS 创建的实例需要允许您的自定义 ELB 与它们通信。

    您需要在您的 EBS 自动创建的安全组(带有描述 SecurityGroup for ElasticBeanstalk environment)中创建 INBOUND 规则以允许 TCP:80 访问。我的自定义 ELB 位于不同的安全组中,因此我指定 sg-**** ID 作为源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-21
      • 2017-02-14
      • 2020-11-21
      • 2011-12-22
      • 2015-08-02
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多