web-dev-qa-db-ja.com

VPCのAmazon ELB

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

ありがとう

69
Kevin Willock

私のチームメイトと私は、異なる可用性ゾーンに2つのプライベートサブネットを持つVPCにELBを実装しました。タイムアウトが発生する理由は、ロードバランサーに追加するサブネットごとに、1つの外部IPアドレスを取得するためです。 (「Dig elb-dns-name-here」を試してください。いくつかのIPアドレスが表示されます)。これらのIPアドレスのいずれかがプライベートサブネットをマップすると、タイムアウトになります。パブリックサブネットにマップするIPが機能します。 DNSはいずれかのIPアドレスを提供する可能性があるため、機能する場合もあれば、タイムアウトする場合もあります。

Amazonと何度かやり取りした後、ELBは「パブリック」サブネット、つまりインターネットゲートウェイへのルートを持つサブネットにのみ配置する必要があることを発見しました。 Webサーバーをプライベートサブネットに保持し、ELBがそれらと通信できるようにしました。これを解決するには、プライベートサブネットがある各アベイラビリティゾーンに対応するパブリックサブネットを確保する必要がありました。次に、各アベイラビリティーゾーンのパブリックサブネットであるELBに追加しました。

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

これが多かれ少なかれ私たちがやったことです:

  1. WebServer-1は、web-serverというセキュリティグループを使用して、可用性ゾーンus-east-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)へのルートを含むルーティングテーブルをこの新しいサブネットに関連付けるようにしました。 (ウィザードを使用してパブリック/プライベートVPCを作成した場合、このルートは既に存在します。)
  5. 新しいELBを作成し、PublicSubnet-1およびPublicSubnet-2(PrivateSubnet-Xではない)に追加します。また、ELBで実行するインスタンス(この場合はWebServer-1およびWebServer-2)を選択しました。着信ポート80および443を許可するセキュリティグループを必ず割り当ててください。このグループをelb-groupと呼びましょう。
  6. Webサーバーグループで、elb-groupからのポート80および443からのトラフィックを許可します。

それがお役に立てば幸いです!

180
Nathan Pahucki

ここで重要なのは、ELBに「サブネット/可用性ゾーンを追加する」のではなく、ELBインスタンスを配置するサブネットを指定するということです。

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

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

13
RSH

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

  1. パブリックサブネットゾーンb =サーバーNAT
  2. プライベートサブネットゾーンc =サーバーWeb
  3. パブリックサブネットゾーンc = ELB

トリックはルーティングです:

  1. NATへのルーターは、ゲートウェイAに接続されています。
  2. サーバーWebへのルーターはNATに接続されています。
  3. パブリックサブネットへのルーターは、ゲートウェイAに接続されます。

ELBの詳細:

1.ゾーン:パブリックサブネットゾーンc 2.インスタンス:サーバーWeb 3.セキュリティグループ:ポートを有効にする

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

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

Beanstalkのヘルスチェックはロードバランサーに到達できないため機能しませんが、パブリックリーチ外にある必要があるサービスの場合、これは良い妥協です。

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

2
Mike Lapinskas