🍣

1. Load Balancers

2023/05/23に公開約5,700字

種類

  • Application Load Balancer (以下ALB)
  • Network Load Balancer (以下NLB)
  • Classic Load Balancer (以下CLB)
  • Gateway Load Balancer (以下GWLB)
    ※ELBは総称、ただCLBに対して言われることが多い
    すべてAZ/サブネットサービス

これが一番大事

https://d1.awsstatic.com/webinars/jp/pdf/services/20191029_AWS-Blackbelt_ELB.pdf
https://d1.awsstatic.com/webinars/jp/pdf/services/20210331_AWS-Blackbelt_GatewayLoadBalancer.pdf

以下ポイント

Application Load Balancer

概要

レイヤ7で動作するロードバランサ
ターゲットは EC2インスタンスやコンテナ、IPアドレスが想定
HTTP/HTTPS に対応
AWS WAFと連携可能

HTTP および HTTPS トラフィックを使用するウェブアプリケーション用に柔軟性の高い機能セットが必要な場合は、Application Load Balancer を選択します。Application Load Balancer はリクエストレベルで動作し、マイクロサービスとコンテナを含む、アプリケーションアーキテクチャを対象とした高度なルーティングおよび可視性機能を提供します。


参考:https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/introduction.html
https://dev.classmethod.jp/articles/re-introducation-2022-aws-application-load-balancer/

インターネット向け/内部

作成時にスキームカラムで指定(作成後は変更不可)
インターネット向け:インターネットからのトラフィックをルーティング(パブリックサブネットがマスト)DNSでルーティング
内部:プライベートIPアドレスでルーティング

SG

インターネットからの着信は HTTP/HTTPS で 0.0.0.0/0(要件によっては特定IP)
ALB 配下のインスタンスにはALBにアタッチしたSGを送信元にすることでセキュアにできる

リスナー

着信したトラフィックのルーティング設定を実施
ターゲットグループや着信プロトコル、ポート番号を指定する

ターゲットグループ

ターゲットタイプ:インスタンス(Auto Scaling Group)/IPアドレス/Lambda関数
ヘルスチェック:HTTP/HTTPS
プロトコルバージョン:HTTP1/HTTP2/gRPC ※インスタンス又はIPアドレス時のみ選択可能

ルール

作成時にはデフォルトルールが作成される
カスタムでredirectやforwardができる

〇Host名やHTTPヘッダー、URLパスベールでのルーティングが可能
→同一インスタンス内の複数ポートやパスにターゲット可能

TLS終端

ターゲットグループでプロトコルをHTTPにすると ALBで終端
HTTPSにするとE2EでHTTPS通信
https://dev.classmethod.jp/articles/alb-backend-https/

クロスゾーン負荷分散

ターゲットグループが複数のAZに存在するときすべてのターゲットに対して負荷分散が出来るようになる

https://dev.classmethod.jp/articles/cross-zone-load-balancing-for-nlb/
https://dev.classmethod.jp/articles/11-application-load-balancers-turning-off-cross/
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/disable-cross-zone.html

XFF

付加、保持、削除が選択可能

https://blog.serverworks.co.jp/2023/05/09/200133
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/x-forwarded-headers.html

スティッキーセッション

デフォルトラウンドロビンで振り分けられるトラフィックをアクセス元のユーザ(ブラウザ/セッション)ごとに固定する機能
※CLBとは異なる

https://dev.classmethod.jp/articles/stateless_ec2/
https://dev.classmethod.jp/articles/tsnote-alb-sticky-session-specification/

Connection Draining

EC2インスタンスの登録解除やヘルスチェックの失敗時、新規リクエストを止め処理中リクエストの処理のみを行う
※CLBとはちょっと異なる

監視

Network Load Balancer

概要

レイヤ4で動作するロードバランサ
TCP/UDP/SSL に対応
高可用性、高スループット、低レイテンシ
Source IP/Portがターゲットまで保持される
固定IPを持つ

非常に高いパフォーマンス、大規模な TLS のオフロード、証明書のデプロイの一元管理、UDP のサポート、およびアプリケーションの静的 IP アドレスが必要な場合は、Network Load Balancer を選択します。Network Load Balancer は接続レベルで動作し、非常に低いレイテンシーを維持しながら、1 秒あたり数百万のリクエストを確実に処理することができます。


https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/introduction.html

AZごとの固定IP(EIP可能)

FW の穴あけなどに便利
背後にALBを置くことでALBでの固定IPも疑似的に実施可能
https://dev.classmethod.jp/articles/elb-network-load-balancer-static-ip-adress/

送信元IP保持

クライアントのIPとポートが保持される
→つまりターゲットはクライアントと直接やり取りしているように見える
※NLBはSGが設定できないのでターゲット側でSG管理が必要

https://blog.putise.com/aws-nlbを経由した場合のソースipアドレスはどうなる?/

VPCEポイント経由でPrivateLinkを使いNLBにアクセスが可能
シンプルなアクセス制御で別VPCに対してサービスを提供できる
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html
https://dev.classmethod.jp/articles/aws-reinvent-vpc-privatelink-endpoint/

TLS 透過

注意:昔はできなかった(2019年以前)からターゲット側で行う必要があった
https://dev.classmethod.jp/articles/nlb-support-tls-termination-and-access-log/
https://aws.amazon.com/jp/blogs/news/new-tls-termination-for-network-load-balancers/

ターゲット

IP/インスタンス/ALB

Classic Load Balancer

概要

レイヤ4, 7で動作するロードバランサ
HTTP/HTTPS/TCP/UDP/SSL に対応
旧サービスのため基本的には推奨されない
※使用用途としては後方互換性

EC2-Classic ネットワークで既存のアプリケーションを実行している場合は、Classic Load Balancer を選択します。

使われる場所

EC2-Classic環境
アプリケーション側で生成されたクッキーでのスティッキーセッションをしたい場合

Gateway Load Balancer

概要

セキュリティアプライアンス用ロードバランサ
アプライアンスごとのHA管理を簡素化、VPC分離が出来るようになる

GENEVE をサポートするサードパーティーの仮想アプライアンスのフリートをデプロイおよび管理する必要がある場合は、Gateway Load Balancer を選択します。これらのアプライアンスを使用すると、セキュリティ、コンプライアンス、ポリシー制御を向上させることができます。


https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/gateway/introduction.html
https://blog.serverworks.co.jp/aws-gateway-balancer-overview

Transit Gateway Appliance mode

EC2 インスタンスが存在している AZ がどこにあるか」によって決まっています。つまり AZ-1a に存在している EC2 インスタンスが取る経路は AZ-1a に存在している GWLB とそのアプライアンスへとつながる( AZ-1c に存在している EC2 インスタンスが取る経路は AZ-1c に通信される

他AZに対して通信する際に非対称ルーティングが発生する
→通信がドロップされる
TGW Attachment に行きと同じAZを通るようにする設定
https://blog.serverworks.co.jp/aws-transit-gateway-appliance-mode

マルチアカウント

VPCEサービスを作成し、そこに対してアクセスするエンドポイントを作っていくことで別アカウントでも使用可能
※GWLB-GWLBE Serviceは同一VPC内で一意に紐づき
https://www.beex-inc.com/blog/20221109_GWLBtest_part1
https://www.beex-inc.com/blog/20221109_GWLBtest_part2

GENEVE

ポート6081
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/gateway/gateway-load-balancers.html

各 Load Balancer の比較

https://aws.amazon.com/jp/elasticloadbalancing/features/

ハンズオン

ALB のパスベースルーティング

GWLB での IPS の設定

Discussion

ログインするとコメントできます