🍣

1. Load Balancers

2023/05/23に公開

種類

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

BlackBelt ※これが一番大事

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

以下ポイント

全体

スティッキーセッション

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

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

Connection Draining

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

クロスゾーン負荷分散

ターゲットグループが複数の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

各 Load Balancer の比較

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

Application Load Balancer

概要

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


参考: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パスベールでのルーティングが可能
→同一インスタンス内の複数ポートやパスにターゲット可能
・ホスト名ベース(サブドメインごとに別のターゲットにルーティング)
・HTTPヘッダーベース(ブラウザベースなどで別ターゲットにルーティング)

TLS終端

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

XFF

付加、保持、削除が選択可能
※デフォルトは付加

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

Network Load Balancer

概要

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


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に対してサービスを提供できる
※利用者VPCとサービス提供側VPCをつなぐもの
 利用者VPCにはVPCEを配置、サービス提供側にはVPCEサービスとNLBを置く(その背後にALBがよくある)

https://dev.classmethod.jp/articles/aws-vpcendpoint-privatelink-beginner/
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環境
アプリケーション側で生成されたクッキーでのスティッキーセッションをしたい場合

Gateway Load Balancer

概要

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


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

マルチアカウント

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

導入

GWLB + IPS アプライアンスで検査したい
In:IGW → GWLBE → ALB → EC2
→Edgeアソシエーション(Edgeの関連付け):IGW/VGWにルートテーブルをアタッチする
Out:EC2 → GWLBE → NATGW → IGW
→MSR(More Specific Routing):local より細かいルートが設定できなかった
10.0.0.0/16 VPC, 10.0.0.0/24 ENI

ハンズオン

・GWLBの導入

Discussion