2012-02-24 295 views
10

我試圖在彈性負載均衡器下設置兩個實例,但無法弄清楚我應該如何通過負載均衡器訪問實例。通過ELB訪問AWS EC2實例

我已經設置了一個安全組實例來允許從任何地方訪問某些端口。

的http:// [publicdns]:PORT/

負載均衡包含了兩個實例,他們是我可以直接使用他們的 「公共DNS」(publicdns)主機名和端口端口訪問實例都是「In Service」並且它將端口(PORT)轉發到實例上的同一個端口上。

然而,如果我請求

HTTP:// [DNSNAME]:PORT(其中DNSNAME是用於ELB列出的A記錄)

它不連接到該實例(連接超時)。

這不是使用負載均衡器的正確方式,還是我需要做任何事情才能訪問負載均衡器?與負載平衡器相關的唯一提到的安全組是限制只能訪問負載平衡器的實例,但我不想那樣做。我希望能夠單獨訪問它們。

我敢肯定有一些簡單和愚蠢的我忘了,沒有意識到或冤屈:P

乾杯, 斯文。


額外的信息說:

端口配置爲負載平衡器看起來是這樣的(實際上是3個):

10060(HTTP)轉發到10060(HTTP) 粘性:禁用(編輯)

10061(HTTP)轉發到10061(HTTP) 粘性:禁用(編輯)

1 0062(HTTP)轉發到10062(HTTP) 粘滯性:已禁用(編輯)

它使用標準/默認elb安全組(amazon-elb-sg)。

實例有兩個安全組。一個外部看起來像這樣:

22(SSH)                    0.0.0.0/0
10060 - 10061 0.0.0.0/0
                      0.0.0。0/0

和一個內部,內部組內允許任何對所有端口進行通信:

0 - 65535 SG-XXXXXXXX(安全組ID)

不知道這有什麼差別,但實例是m1.small類型的圖像ami-31814f58。


東西可能有相關性:以前是HTTP

我的健康檢查:PORT /但負載平衡器口口聲聲說情況是「不在服務區」,即使我似乎得到200對該端口上的請求作出響應。

然後,我將其更改爲TCP:PORT,然後更改爲「正在服務」。

是否有一些非常具體的應該返回HTTP的,或者它只是一個HTTP 200響應是必需的? ...並且確實沒有提示爲什麼負載均衡本身無法正常工作?

+0

我想這是好,使用Web控制檯: 1)創建一個安全組,允許所有來自所有來源的訪問。 2)使用新的安全組創建新的t1.micro實例。 3)將SSH連接到組80上的「Hello」。 4)檢查我是否可以直接獲取「Hello」HTTP 200響應(是) 5)創建負載平衡器並分配此實例。 6)將健康檢查設置爲TCP:80(HTTP:80 /不起作用)。 7)嘗試訪問負載平衡器。不工作。 8)感覺很傷心: – 2012-02-24 17:45:50

+0

你是如何訪問loadbalancer的?當我向loadbalancer發送請求時,我正在請求一個index.html文件,它可能loadbalancer不喜歡發送一個空文件嗎? – bwight 2012-02-24 18:31:11

+0

I我一直在試驗一下,看起來問題出在我的負載平衡器健康檢查上,只是得到一個200響應代碼似乎不夠,我之前通過使用netcat實現了這一點(echo「Hello」| nc -l PORT),但沒有起作用,改爲使用TCP使其顯示爲「服務中」,但可能沒有奏效,我只創建了一個小實例,並且一旦我安裝了httpd並且回覆了它一個合適的html文件(http回覆),它工作!:)謝謝大家。在星期一我會驗證它是問題(bwight,你想寫在答案的形式,所以我可以勾選它,如果是這樣:)) – 2012-02-25 09:06:17

回答

3

這聽起來像你有一切正確設置。它們是否與進入負載均衡器的端口相同?或者你是否將請求轉發到另一個端口?

作爲一個側面說明,當我配置我的負載均衡器時,我通常不喜歡在任何端口上爲公衆開放我的實例。我只允許負載均衡器向這些實例發出請求。我注意到過去有很多人會向試圖找到安全漏洞的實例的IP發出惡意請求。我甚至看到有人試圖強行登錄到我的Windows計算機上......

要創建僅用於負載均衡器的安全規則,請運行以下命令並刪除安全組中爲安全組負載均衡器正在使用的端口。如果您沒有使用命令行來運行這些命令,那麼只需讓我知道您嘗試使用哪個界面,然後我就可以嘗試創建一個適用於您的示例。

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 

回到你的問題。就像我說的,你解釋的步驟是正確的,在實例上打開端口並將端口轉發給實例應該足夠了。也許你需要發佈實例安全組和負載平衡器的完整配置,以便我可以查看是否有其他影響你情況的其他內容。

+0

我已經在上面添加了一些更多信息... – 2012-02-24 14:14:47

+0

謝謝我會看看 – bwight 2012-02-24 14:20:44

+0

我無法重現您的錯誤。我嘗試了與你使用相同的端口相同的設置,它似乎工作正常。花了幾分鐘讓負載均衡器開始工作。 – bwight 2012-02-24 14:43:22

1

我繼續並創建了一個腳本,它將重現我正在使用的相同的確切步驟。這假定您使用Linux作爲操作系統,並且AWS CLI工具已安裝。如果您尚未安裝此設置,我建議您啓動一個新的Amazon Linux微型實例並從那裏運行腳本,因爲它們已經安裝了所有設備。

  1. 下載X.從亞馬遜509個證書文件https://aws-portal.amazon.com/gp/aws/securityCredentials

  2. 複製證書文件到本機在將要運行的命令中所需的腳本

    aws_account=<aws account id> 
    keypair="<key pair name>" 
    
  3. 導出證書,

  4. 保存兩個變量環境變量

    export EC2_PRIVATE_KEY=<private_Key_file> 
    export EC2_CERT=<cert_file> 
    export EC2_URL=https://ec2.us-east-1.amazonaws.com 
    
  5. 創建安全gr oups

    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 
    
  6. 創建用戶數據文件的情況下,這樣的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 
    
  7. 啓動新的實例,並保存實例id

    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 }'` 
    
  8. 創建負載均衡器和連接實例

    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 
    
  9. 等待,直到loabalancer您的實例狀態是「在職」和嘗試訪問的URL