Google Cloudはネットワーク製品のラインアップが充実していますが、製品ごとに機能と受け付けるオプションが異なるため製品理解が重要です。
まず、製品名が互いに似通っていて区別しづらいため、
Google Cloudロードバランサの基盤となるテクノロジーの表から各技術の名称を確認すると把握しやすくなります。
HTTPロードバランサとTCPロードバランサのそれぞれに、GFE(グローバル)、Maglev(リージョン)、Andromeda(内部)があり、さらにHTTPの一部にオープンソースのEnvoyを併用していることが分かります。
グローバルとリージョンの差
リージョンは比較的素朴なプロキシです。グローバル負荷分散は世界共通の単一IPを持ち、バックエンドを追加することでネットワーク的に近いホストにルートされます。
なお、ロードバランサのミニマムフィーは転送ルール5つまで定額ですが、単一のプロジェクトにグローバルとリージョンのロードバランサを構築するとミニマムフィーが2件かかるようです。
ティアの違い
プレミアムティアは転送ルートがGoogleネットワーク内に粘る挙動となり、スタンダードティアは配信リージョン近傍から外部インターネットに出る挙動となるようです。
Network Service Tiers がロードバランサに与える影響に製品別の説明があります。
IPv6
アプリケーション ロードバランサとプロキシ ネットワーク ロードバランサの IPv6に製品別のサポート状況が掲載されています。
グローバル外部HTTPSロードバランサの例では、バックエンドがIPv4シングルスタックのネットワークであってもIPv6のフロントエンドを追加できます。
ロードバランサにIPv6サポートを追加することと、クラスタをデュアルスタック構成にすることとは、効果も手順も異なります。IPv6トラフィックを受け入れたい状況であればロードバランサの構成変更で対応できるでしょう。
TCPロードバランサ
- TCPプロキシロードバランサ(GFE)
- グローバル負荷分散。
gcloud compute target-tcp-proxies
で操作する - バックエンドサービスをグローバルで作る必要がある
-
Google Cloudロードバランサの概要の表に掲載されているごく一部のウェルノウンポートのみ指定可能。また、
gcloud compute forwarding-rules create
の際、--ports
が単一ポートしか受け付けない - スタンドアロンNEGをサポートしており、GKEのコンテナネイティブ負荷分散構成をとれる
- UDP非サポート
- SSLプロキシ負荷分散はGFEのバリアント
- アクセス元IPを取得したい場合、proxyプロトコルを利用する(オプション)
- グローバル負荷分散。
- 外部TCP/UDPネットワークロードバランサ(Maglev)
- 単に「ネットワークロードバランサ」と書いているドキュメントがありMaglevを指している
- リージョン負荷分散。プロキシーを介さず
forwarding-rules
からバックエンドサービスに転送すると暗黙に生成されると思われる - スタンドアロンNEG非サポート。リージョンバックエンドに
gcloud compute backend-services add-backend --network-endpoint-group
するとエラーになる - UDPをサポートする唯一のロードバランサ
- 任意の複数ポートをフォワードできるが、TCPとUDPは混在できず別のロードバランサが必要
- GKEサービスの
type: LoadBalancer
で自動作成されるのはおそらくMaglev
HTTPロードバランサ
HTTPロードバランサはいずれもゾーンNEGをサポートしており、 GKEのコンテナ負荷分散を構築できます。
- グローバル外部HTTP(S)ロードバランサ(GFE)
- HTTP/3をサポート
- GKEで外部Ingressを作成すると自動でGFEが追加される。 Ingress機能の構成にGCP拡張の説明がリストされている
- リージョン外部HTTP(S)ロードバランサ(Envoy/Maglev)
- HTTP/3非サポート
gRPCの追加要件
ingressで自動作成されるものも含めHTTPSロードバランサはgRPCに対応しています。
ただしロードバランサとバックエンドをHTTP/2で接続する必要があります。SSL証明書を配備のうえ、ALPNハンドシェイクできるよう構成すると動作します。
(envoyの場合、
common_tls_context.alpn_protocols: “h2,http/1.1”)
バックエンドとHTTP2以外のプロトコルで接続している場合、gRPC以外のリクエストは正常終了し、gRPCのみエラー挙動になります。
GKE Ingressの制約
Google Kubernetes Engineでingressを配備すると、ingress-gceとGFEのロードバランサが作成されます。
GFEにはGoogle Cloud Strageのバケットにルートする機能がありますが、GKE Ingressからは利用できない制約があります。
Use GCE load balancer controller with backend buckets #33で4年以上前から継続リクエストがありますが、実装予定はなさそうです。
ヘルスチェックの利用ポート
プローブIP範囲とファイアウォールルールにIP範囲が掲載されています。
ネットワークロードバランシング(Maglev)のみアクセスIPが異なります。
Chuma Takahiro