【问题标题】:Auto Scaling, Elastic IP自动缩放,弹性 IP
【发布时间】:2019-01-05 11:35:15
【问题描述】:

当我将网络负载均衡器与 Auto Scaling 结合使用时,每次生成实例时,它都会获得一个新的公共 IP。 我想为每个实例都有一个 EIP。我希望当我在网络负载均衡器配置中将 EIP 分配给可用区时,可以做到这一点。 有没有办法为生成的实例设置自动缩放和静态 IP?

https://aws.amazon.com/blogs/aws/new-network-load-balancer-effortless-scaling-to-millions-of-requests-per-second/

据此看来这是不可能的:

很遗憾,无法自动进行自动缩放 为新启动的实例分配弹性 IP 地址

Static IP for Auto Scale in AWS

根据这个:

Assigning static IPs to auto scaled EC2 instance

【问题讨论】:

  • 所以您希望您的所有实例都具有与负载均衡器相同的弹性 IP?或者您希望 AWS 以某种方式神奇地知道您想从每个实例的弹性 IP 池中提取只是因为您为负载均衡器分配了一个弹性 IP?我对您在这里尝试做的事情感到困惑。如果实例位于负载均衡器后面,为什么还要关心各个实例的 IP 地址是什么?
  • 您没有连接到自动扩展组中的实例。重新思考为什么需要他们的 EIP 地址。如果您需要更改实例上的某些内容,请修改您的测试实例,创建一个新的 AMI 并重新部署您的自动扩展组。 ASG 可以随时终止实例,即使您已连接到该实例。此外,您不希望负载均衡器后面的实例具有公共 IP 地址。否则,不良行为者只会绕过您的负载均衡器进行攻击。
  • 谢谢。这些实例需要有一个 EIP,因为它们连接到第三方软件并且它们需要被列入白名单。如果 IP 发生明显变化,则不会出现白名单。我的问题看起来像是我链接的 SO 问题的副本。
  • @JohnHanley 关于您对负载均衡器后面实例的公共 IP 的评论:实例上的 SG 只允许来自 LB 的流量可以解决这个问题吗?
  • 是的,SG 可以控制进入 EC2 实例的流量。另一种选择是将您的实例放在私有子网中,然后将 NAT 网关的 EIP 地址列入白名单。

标签: amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

编写一个脚本并将其放在自动缩放组的启动配置中的启动脚本中,该脚本可以做任何您想做的事情,范围从分配新的 EIP 到检查其他服务的白/黑名单。 欲了解更多信息,请阅读 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

【讨论】:

    【解决方案2】:

    正如其他人所提到的,这可以通过配置新的EIP 并使用UserData 将实例与新发布的EIP 关联来实现。但是,以下设置会出现以下问题:

    1) 默认情况下,每个 VPC 有 5 个 EIP 限制,您甚至可以增加限制,以了解您的 VPC 将使用的最大 EIP 数量

    2) 当实例被终止时,您需要创建一个进程来删除过期的 EIP 或弄清楚如何重新关联之前分配的 EIP

    话虽如此,我确实在我的 ASG 中使用了静态 EIP,但它仅用于 HA 而不是可扩展性,因此在以下示例中,我每次启动新实例时都会重复使用现有的 EIP

                #!/bin/bash -xe
                INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
                aws ec2 disassociate-address --association-id ${OpenPVNEIP.AllocationId} --region ${AWS::Region} || true
                aws ec2 associate-address --instance-id "${!INSTANCE_ID}" --allocation-id ${OpenPVNEIP.AllocationId} --region ${AWS::Region}
    

    【讨论】:

      【解决方案3】:

      我在私有子网中创建了一个 Lambda。 我将私有子网链接到 NAT 网关,因此我设法为我的 Lambda 获取静态 IP。 5 个 EIP 的限制对我来说是个问题。

      https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/

      【讨论】:

        【解决方案4】:

        使用 EC2 和自动扩展,您需要在 EC2 中使用 user data 将弹性 IP 自动附加到 EC2 实例以进行自动扩展

        #!/bin/bash
        aws configure set aws_access_key_id "XYZ..."
        aws configure set aws_secret_access_key "ABC..."
        aws configure set region "ap-..."
        aws ec2 associate-address --instance-id "$(curl -X GET "http://169.254.169.254/latest/meta-data/instance-id")" --public-ip your_elastic_IP
        

        注意:您应该创建新用户,并且 IAM 只有权限关联地址才能创建/获取 aws 密钥

        希望对你有帮助:)

        【讨论】:

          猜你喜欢
          • 2019-12-17
          • 2019-05-14
          • 2010-12-11
          • 2017-04-17
          • 2020-06-24
          • 2018-11-21
          • 2015-08-25
          • 2023-01-18
          • 2016-10-29
          相关资源
          最近更新 更多