2012-02-13 15 views
63

私たちはAmazon EC2を使用しており、ELB(ロードバランサ)をプライベートサブネット上の2つのインスタンスに配置したいと考えています。プライベートサブネットをELBに追加するだけであれば、接続は行われません。両方のサブネットをELBに接続すれば、インスタンスにアクセスできますが、タイムアウトが発生することがよくあります。誰でもVPCのプライベートサブネット内でELBを正常に実装しましたか?もしそうなら、あなたはおそらくその手順を私に説明できますか?VPCのAmazon ELB

おかげ

答えて

164

私のチームメイトと私は別のアベイラビリティゾーンで2つのプライベートサブネットをVPCにELBを実装しています。タイムアウトが発生する理由は、ロードバランサに追加する各サブネットに対して、外部IPアドレスを1つ取得するためです。 ( 'dig elb-dns-name-here'を試してみると、いくつかのIPアドレスが表示されます)。これらのIPアドレスのいずれかがプライベートサブネットをマップすると、タイムアウトします。公共のサブネットにマップされているIPが機能します。 DNSはあなたにIPアドレスのどれかを与えるかもしれないので、時々動作します、時々タイムアウトします。

アマゾンで何度か話をした後、私たちはELBがインターネットゲートウェイへのルートを持つサブネットである「パブリック」サブネットにのみ配置されるべきであることを発見しました。私たちは私たちのプライベートサブネットにWebサーバを置いておきたいが、ELBは彼らと話をすることができた。これを解決するために、プライベートサブネットを持つ各可用性ゾーンに対応するパブリックサブネットを確保する必要がありました。その後、各可用性ゾーンのパブリックサブネットをELBに追加しました。

最初はこれはうまくいかないようでしたが、すべてを試した後、私たちはELBを作り直しました。私はこれがバグだと思います。あるいは、ELBは非常に多くの変更から奇妙な状態になっていました。

はここで、多かれ少なかれ私たちが何をしたか:

  1. WebServerの-1は、セキュリティグループと呼ばれるWebサーバとアベイラビリティゾーン私たち東-1bにPrivateSubnet-1で実行されています。
  2. WebServer-2は、web-serverというセキュリティグループを持つ可用性ゾーンus-east-1cのPrivateSubnet-2で動作しています。
  3. ゾーンus-east-1bにパブリックサブネットを作成しました.PublicSubnet-1と呼びます。インターネットゲートウェイ(ig-xxxxx)へのルートを含むルーティングテーブルをこの新しいサブネットに関連付けました。 (ウィザードを使用してパブリック/プライベートVPCを作成した場合は、このルートはすでに存在しています)。
  4. ゾーンus-east-1cにパブリックサブネットを作成した後、PublicSubnet-2と呼びます。インターネットゲートウェイ(ig-xxxxx)へのルートを含むルーティングテーブルをこの新しいサブネットに関連付けました。
  5. 新しいELBを作成し、PublicSubnet-1とPublicSubnet-2(PrivateSubnet-Xではなく)を追加しました。また、ELB(この場合はWebServer-1とWebServer-2)で実行するインスタンスを選択しました。受信ポート80と443を許可するセキュリティグループを割り当ててください。このグループをelb-groupと呼ぶことができます。
  6. Webサーバグループでは、ポート80および443からのトラフィックをelb-groupから許可します。

私は助けてくれることを願っています!

+0

ええ、同じ結論に至りました。私はこれを更新するのを忘れました。答えをありがとう: –

+1

これは関連情報の良い源です: https://forums.aws.amazon.com/thread.jspa?messageID=453594񮯚 –

+4

私は1つupvoteを与えることが残念です。ありがとう!私はこれを理解しようとしている最後の2時間の間、頭を壁に向かって叩いていた。 – Cfreak

2

私たちはプライベートサブネットにELBを実装しました。そのため、すべてのELBを公開する必要があるという声明は完全に真実ではありません。あなたはNATが必要です。プライベートELBのプライベートサブネットを作成し、VPC DNSをオンにして、プライベートルーティングテーブルがNATを通過するように設定されていることを確認します。サブネットセキュリティグループは、ELBとApp、およびApp to DBサブネット間のトラフィックを許可するように設定する必要もあります。

ロードバランサに到達できないため、Beanstalkのヘルスチェックは機能しませんが、一般公開の範囲外にする必要のあるサービスでは、これは良い妥協点です。

VPCアーキテクチャを開始するための推奨読書:http://blog.controlgroup.com/2013/10/14/guided-creation-of-cloudformation-templates-for-vpc/

2

次の設定を追加する必要があります。

  1. 公開サブネットゾーンB =サーバーNAT
  2. プライベートサブネットゾーンC = ServerのWeb
  3. 公開サブネットゾーンC = ELB

トリックがルーティングされます。

  1. ルータto NATはゲートウェイAに接続します。
  2. ルータへのサーバWebはNATに接続されています。

    1.Zone:公共サブネットゾーンcは 2.Instance:ServerのWeb 3.Securityグループ:有効ポート

  3. パブリックサブネットにルータ、ゲートウェイAに取り付け

ELBの詳細です

http://docs.amazonaws.cn/en_us/ElasticLoadBalancing/latest/DeveloperGuide/UserScenariosForVPC.html

+0

また、以下の手順が役立ちました。http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2 – BatteryAcid

9

ここで重要なのあなたは「サブネット/アベイラビリティゾーンの追加」をELBにではなく、サブネットを置くために何を指定していないことを、理解することですELBのインスタンスを。

はい、ELBはソフトウェアロードバランサであり、ELBオブジェクトを作成すると、指定したすべてのサブネットにカスタム負荷分散EC2インスタンスが挿入されます。したがって、ELB(そのインスタンス)がアクセス可能であるためには、IGW経由でデフォルトルートが設定されているサブネットに配置する必要があります(これらのサブネットをパブリックとして分類した可能性が高いです)。

上記のように、ELBには「パブリック」ネットワークを指定する必要があります。これらのネットワークは、EC2インスタンスが実行されているAZのものである必要があります。この場合、ELBインスタンスはEC2インスタンスに到達することができます(セキュリティグループが正しく構成されている限り)

+0

最初の文章で重要な点があります。 AWS Consoleはこの点で直感的ではありません。パブリックサブネットにELBを配備すると、プライベートサブネットからEC2インスタンスが表示されないときに間違ったことをしていると信じられます。 –

関連する問題