13

エラスティック ロード バランサーで 2 つのインスタンスを設定しようとしていますが、ロード バランサーを介してインスタンスにアクセスする方法がわかりません。

どこからでも特定のポートにアクセスできるように、セキュリティ グループを使用してインスタンスをセットアップしました。「パブリック DNS」(publicdns) ホスト名とポート PORT を使用して、インスタンスに直接アクセスできます。

http://[publicdns]:PORT/

ロードバランサーには 2 つのインスタンスが含まれており、どちらも「サービス中」であり、インスタンスの同じポートにポート (PORT) を転送しています。

でも、リクエストしたら

http://[dnsname]:PORT (dnsname は ELB 用にリストされた A レコードです)

インスタンスに接続しません (接続タイムアウト)。

これはロード バランサーの正しい使用方法ではありませんか? それとも、ロード バランサーへのアクセスを許可するために何かする必要がありますか? ロード バランサーに関連するセキュリティ グループの唯一の言及は、インスタンスへのアクセスをロード バランサーのみに制限することですが、私はそれを望んでいません。個別にもアクセスできるようにしたいです。

私が忘れていたり、気づいていなかったり、間違っていたりした単純でばかげた何かがあると確信しています:P

乾杯、スヴェン。


追加情報:

ロード バランサーのポート構成は次のようになります (実際には 3 つのポート)。

10060 (HTTP) 転送から 10060 (HTTP) への転送: 無効 (編集)

10061 (HTTP) 10061 (HTTP) への転送スティッキ: 無効 (編集)

10062 (HTTP) 10062 (HTTP) への転送スティッキ: 無効 (編集)

また、標準/デフォルトの elb セキュリティ グループ (amazon-elb-sg) を使用しています。

インスタンスには 2 つのセキュリティ グループがあります。このように見える1つの外部:

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

および 1 つの内部で、内部グループ内のあらゆるものがすべてのポートで通信できるようにします。

0 ~ 65535 sg-xxxxxxxx (セキュリティグループ ID)

違いがあるかどうかはわかりませんが、インスタンスはイメージ ami-31814f58 の m1.small タイプです。


関連する可能性のあるもの:

私のヘルスチェックは以前は HTTP:PORT/ でしたが、そのポートのリクエストで 200 レスポンスを受け取ったように見えても、ロードバランサーはインスタンスが「サービス停止中」であると言い続けました。

次に、それを TCP:PORT に変更すると、「サービス中」と表示されるようになりました。

HTTP に対して返す必要がある非常に具体的なものはありますか、それとも単に必要な HTTP 200 応答ですか? ...そして、それが機能していなかったという事実は、負荷分散自体も機能していなかった理由を示唆していますか?

4

2 に答える 2

4

すべてが正しく設定されているようです。それらは、インスタンスとしてロードバランサーに入るポートと同じですか? または、リクエストを別のポートに転送していますか?

補足として、ロードバランサーを構成するとき、私は通常、一般公開のために任意のポートでインスタンスを開くことを好みません。ロードバランサーがそれらのインスタンスにリクエストを行うことのみを許可します。過去に、多くの人がセキュリティ違反を見つけようとして、インスタンスの 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

質問に戻ります。私が言ったように、あなたが説明した手順は正しいです。インスタンスのポートを開き、ポートをインスタンスに転送するだけで十分です。インスタンスのセキュリティ グループとロードバランサーの完全な構成を投稿して、状況に影響を与える何かがあるかどうかを確認する必要があるかもしれません。

于 2012-02-24T14:02:10.663 に答える
1

私は先に進み、私が使用しているのとまったく同じ手順を再現するスクリプトを作成しました。これは、Linux をオペレーティング システムとして使用しており、AWS CLI ツールが既にインストールされていることを前提としています。このセットアップがまだない場合は、新しい Amazon Linux マイクロ インスタンスを開始し、そこからスクリプトを実行することをお勧めします。すべてが既にインストールされているためです。

  1. Amazon https://aws-portal.amazon.com/gp/aws/securityCredentialsから X.509 証明書ファイルをダウンロードします。

  2. コマンドを実行するマシンに証明書ファイルをコピーします。

  3. スクリプトで必要な 2 つの変数を保存します

    aws_account=<aws account id>
    keypair="<key pair name>"
    
  4. 証明書を環境変数としてエクスポートする

    export EC2_PRIVATE_KEY=<private_Key_file>
    export EC2_CERT=<cert_file>
    export EC2_URL=https://ec2.us-east-1.amazonaws.com
    
  5. セキュリティ グループを作成する

    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. ローバランサーのインスタンスの状態が「InService」になるまで待ってから、URL へのアクセスを試みます。
于 2012-02-24T19:49:02.170 に答える