首页 文章

通过ELB访问AWS EC2实例

提问于
浏览
10

我正在尝试在弹性负载均衡器下设置两个实例,但无法弄清楚我应该如何通过负载均衡器访问实例 .

我已经使用安全组设置了实例,以允许从任何地方访问某些端口 . 我可以使用“Public DNS”(publicdns)主机名和端口PORT直接访问实例:

HTTP:// [publicdns]:PORT /

负载均衡器包含两个实例,它们都是“服务中”,它将端口(PORT)转发到实例上的同一端口 .

但是,如果我要求

http:// [dnsname]:PORT(其中dnsname是为ELB列出的A记录)

它没有连接到实例(连接超时) .

这不是使用负载均衡器的正确方法,还是我需要做任何事情来允许访问负载均衡器?与负载均衡器相关的安全组的唯一提及是仅限制对负载均衡器的实例访问,但我不希望如此 . 我希望能够单独访问它们 .

我确信有一些简单而愚蠢的东西让我忘记了,没有意识到或做错了:P

干杯,斯文德 .


额外信息添加:

Load Balancer的端口配置如下所示(实际上是3个端口):

10060(HTTP)转发到10060(HTTP)粘性:禁用(编辑)

10061(HTTP)转发到10061(HTTP)粘性:禁用(编辑)

10062(HTTP)转发到10062(HTTP)粘性:禁用(编辑)

它使用标准/默认elb安全组(amazon-elb-sg) .

这些实例有两个安全组 . 一个外部看起来像这样:

22(SSH)0.0.0.0/0
10060 - 10061 0.0.0.0/0
10062 0.0.0.0/0

和一个内部,允许内部组中的任何内容在所有端口上进行通信:

0 - 65535 sg-xxxxxxxx(安全组ID)

不确定它有什么不同,但实例是m1.small类型的图像ami-31814f58 .


可能具有相关性的东西:

我的运行状况检查曾经是HTTP:PORT /但是负载均衡器一直说实例是“停止服务”,即使我似乎在该端口上的请求上获得了200响应 .

然后我将其更改为TCP:PORT,然后更改为说它们“在服务中” .

是否应该为HTTP返回一些非常具体的内容,或者它只是一个需要的HTTP 200响应? ...并且确实没有工作暗示为什么负载 balancer 本身也不起作用?

2 回答

  • 3

    听起来你已经正确设置了一切 . 它们是否与实例一样进入负载均衡器?或者您是否将请求转发到另一个端口?

    作为旁注,当我配置我的负载均衡器时,我通常不喜欢在普通公众的任何端口上打开我的实例 . 我只允许负载均衡器向这些实例发出请求 . 我在过去注意到很多人会对实例的IP发出恶意请求,试图找到安全漏洞 . 我甚至看到有人试图强行登录我的Windows机器....

    要仅为负载均衡器创建安全规则,请运行以下命令,并删除loadbalancer正在使用的端口的安全组中的任何其他规则 . 如果您没有使用命令行来运行这些命令,那么请告诉我您正在尝试使用的接口,我可以尝试提供适合您的示例 .

    elb-create-lb-listeners <load-balancer> --listener "protocol=http, lb-port=<port>, instance-port=<port>"
    ec2-authorize <security-group>  -o amazon-elb-sg -u amazon-elb
    

    回到你的问题 . 就像我说的那样,你解释的步骤是正确的,打开实例上的端口并将端口转发到实例就足够了 . 也许您需要发布实例的安全组和负载均衡器的完整配置,以便我可以看到是否还有其他因素会影响您的情况 .

  • 1

    我继续创建了一个脚本,它将重现我正在使用的相同步骤 . 这假设您使用linux作为操作系统并且已经安装了AWS CLI工具 . 如果您还没有这个设置,我建议启动一个新的Amazon Linux微实例并从那里运行脚本,因为它们已经安装了所有内容 .

    aws_account=<aws account id>
    keypair="<key pair name>"
    
    • 将证书导出为环境变量
    export EC2_PRIVATE_KEY=<private_Key_file>
    export EC2_CERT=<cert_file>
    export EC2_URL=https://ec2.us-east-1.amazonaws.com
    
    • 创建安全性组
    ec2-create-group loadbalancer-sg -d "Loadbalancer Test group"
    ec2-authorize loadbalancer-sg -o loadbalancer-sg -u $aws_account
    ec2-authorize loadbalancer-sg -p 80 -s 0.0.0.0/0
    
    • 为实例创建用户数据文件,以便启动apache并创建index.html文件
    mkdir -p ~/temp/ 
    echo '#! /bin/sh
    yum -qy install httpd
    touch /var/www/html/index.html
    /etc/init.d/httpd start' > ~/temp/user-data.sh
    
    • 启动新实例并保存instanceid
    instanceid=`ec2-run-instances ami-31814f58 -k "$keypair" -t t1.micro -g loadbalancer-sg -g default -z us-east-1a -f ~/temp/user-data.sh | grep INSTANCE | awk '{ print $2 }'`
    
    • 创建负载均衡器并附加实例
    elb-create-lb test-lb --availability-zones us-east-1a --listener "protocol=http, lb-port=80, instance-port=80"
    elb-register-instances-with-lb test-lb --instances $instanceid
    
    • 等到loabalancer中的实例状态为"InService"并尝试访问URL

相关问题