web-dev-qa-db-ja.com

Application Load Balancerで静的IPアドレスを高可用性の方法で使用するにはどうすればよいですか?

私は顧客の統合を監督しており、そのベンダーはホワイトリストに登録するためにいくつかのIPアドレスを必要としています。元のサーバーは、Route53を介したすべてのトリミングを備えたApplication Load Balancerが前面にあるElastic Beanstalkインスタンスです。

静的IPをApplication Load Balancerに定義で割り当てることはできないため(これにはレイヤー7機能が必要です)、これは機能しません。

特定のリクエストをコードと追加のEC2インスタンスを介してベンダーにプロキシすることはできません。これは、双方向の統合だからです。

私は この記事 を読みましたが、率直に言ってハックのようであり、私が本番環境で行うことではありません。

確かに、NLBとALBの組み合わせが必要なようですが、ここでも参考文献の記事では、大量の可動部品を紹介しています。

編集

  • VPCを使用しています
  • インスタンス自体はプライベートサブネットにあります
  • ALBはパブリックサブネットにあり、両方に通信に必要なルーティングがあります
  • 私は自分を説得しようとしてサークルで話していると確信していますStatic IP !== Single Point of Failure
5
sean

現在、静的IPアドレスをApplication Load Balancer(ALB)に関連付ける方法は1つしかありません-AWS Global Acceleratorです。

静的エニーキャストIP – Global Acceleratorは、任意の数のAWSリージョンでホストされているアプリケーションへの固定エントリポイントとして機能する静的IPアドレスを使用します。これらのIPアドレスはAWSエッジロケーションからのエニーキャストです。つまり、これらのIPアドレスは複数のAWSエッジロケーションからアナウンスされ、トラフィックがユーザーのできるだけ近くのAWSグローバルネットワークに入ることができるようになります。これらのアドレスを、ネットワークロードバランサー、アプリケーションロードバランサー、Elastic IPアドレスなどのリージョンAWSリソースまたはエンドポイントに関連付けることができます。エンドポイントを変更または交換するときに、クライアント向けの変更を行ったり、DNSレコードを更新したりする必要はありません。

https://aws.Amazon.com/blogs/aws/new-aws-global-accelerator-for-availability-and-performance/

Global Acceleratorは2つのネットワークゾーンから2つの静的IPを割り当てます¹。これらは展開に固有のものであり、共有されません。これらは、AWS Edge Network(CloudFront、Route 53、およびS3 Transfer Accelerationがすべて動作するのと同じネットワーク)の複数の場所でピアリング接続を介してインターネットにアドバタイズされます-AWSリージョンやAWSよりも多くの存在ポイントがあります-領域への管理されたファイバー接続)。次に、エンドポイント(ALB、NLB、EIP、またはEC2インスタンス(EIPなし))をグローバルアクセラレータインスタンスに関連付け、リクエストが到着したエッジロケーションからのトラフィックをバランサーにNAT変換します。

グローバルアクセラレータが最初に起動されたとき、ソースNATに依存してグローバルアドレスをVPCデバイスに結び付けていたため、クライアントのソースIPまたはX-Forwarded-Forヘッダーを使用できませんでしたALBを使用してクライアントIPアドレスをリアルタイムで決定しますが、 変更された -X-Forwarded-Forは、ALBがGlobal Acceleratorで使用されている場合にクライアントIPアドレスを正しく識別します ほとんどのAWSリージョン

クライアントIPアドレスの保持 のみ機能 エンドポイントがALBまたはEC2インスタンス(EIPなし)の場合。 EIPエンドポイントやネットワークロードバランサーでは機能しません。それらの場合、後で相互相関できるのは フローログ を使用する場合のみです。これにより、ソース/宛先タプルと、アプリケーションが参照する中間のNATアドレスがキャプチャされます。


重要なことに、ALBは受信のみです(データ転送の最終的な方向に関係なく、接続は外部から内部にのみ確立されます)。そのため、サーバーも接続を開始している場合は、静的な送信元アドレスの別のソリューション-a-が必要です。 NATゲートウェイ

1つNATパブリックサブネットに配置されたアベイラビリティゾーンごとのゲートウェイは、アベイラビリティゾーン内の1つ以上のプライベートサブネットのデフォルトゲートウェイとして機能できるため、これらのサブネット上のすべてのインスタンスが同じソースを使用しますインターネットに接続する際のIP NATゲートウェイは物理的な場所でのブラックボックスではありません-これはネットワークインフラストラクチャの機能であるため、本質的にフェイルセーフであり、単一障害点とは見なされません1つのAZ内で1つのNAT Gatewayを複数のアベイラビリティゾーンで共有できますが、その1つのアベイラビリティゾーンで壊滅的な事態が発生すると、単一障害点が発生します。 NAT各AZにゲートウェイを配置する場合と比較して)AZの境界を越えてインターネットトラフィックを転送する方が少し多い。NATゲートウェイはアプリケーションの変更を必要としないプロキシではありません-構成されているサブネット上にあるインスタンスに対して透過的なネットワークアドレストランスレータですこれを使って。各NATゲートウェイには静的EIPがあります。


¹network zoneis new AWS terminology で、Global Acceleratorで導入されました。これは、2つのIPアドレスが内部的に異なるインフラストラクチャによって処理されるという事実を説明しています。

6

これは、特にWebサイトにサービスを提供していて、だれがサイトにアクセスするのかを知りたい場合に、これを行う良い方法がないため、イライラします。

オプション1:AWSグローバルアクセラレータ-機能しますが、クライアントIPを削除するため、ユーザーがどこから来ているのかを把握できません。

オプション2:これは非常にあいまいな方法: https://aws.Amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/ =つまり、ELBとALBなどが必要であり、プロセスの一部の機能が壊れ、手間のかかるアプローチが必要になります。

2019年5月現在、これらは主な方法です。

1
Mike Q