HTTP(S) 負荷分散、SSL プロキシ負荷分散、TCP プロキシ負荷分散のための IPv6 終端

Google Cloud は、HTTP(S) 負荷分散SSL プロキシ負荷分散TCP プロキシ負荷分散を使用する IPv6 クライアントをサポートします。ロードバランサは、ユーザーからの IPv6 接続を受け入れ、それらの接続をバックエンドにプロキシします。

次のように IPv4 と IPv6 の両方の外部アドレスを構成できます。

  • 外部 HTTP(S) ロードバランサ
  • SSL プロキシ ロードバランサ
  • TCP プロキシ ロードバランサ
グローバル IPv6 負荷分散(クリックで拡大)
グローバル IPv6 負荷分散(クリックして拡大)

IPv6 終端を使用すると、ユーザーからの IPv6 リクエストを処理し、IPv4 経由でバックエンドにプロキシできます。IPv6 を使用すると、次のことができます。

  • マルチリージョン デプロイでは、単一のエニーキャスト IPv6 アドレスを使用します。マルチリージョン間で稼働するアプリケーション インスタンスで必要になるロードバランサの IPv6 アドレスは 1 つのみです。つまり、DNS サーバーに存在する AAAA レコードは 1 つであり、複数の IPv6 アドレス間での負荷分散は不要です。キャッシュ対象のアドレスは 1 つのみであるため、クライアントによる AAAA レコードのキャッシュが問題になることはありません。IPv6 アドレスに対するユーザー リクエストは、使用可能な容量を持つ、最も近い正常なバックエンドに自動的に負荷分散されます。

  • HTTP、HTTPS、HTTP/2、TCP、および SSL/TLS の各 IPv6 クライアント トラフィックが負荷分散されます。

  • 同一の IPv6 ロードバランサ アドレスを使用するリージョン間でのオーバーフロー。いずれか 1 つのリージョン内のバックエンドでリソースが不足するか、異常が生じると、グローバル ロードバランサによって、ユーザーからのリクエストが使用可能なリソースを持ち、2 番目に近いリージョンに、自動的に転送されます。最も近いリージョンでリソースが使用可能になると、グローバル負荷分散によって、そのリージョンを介した処理に戻されます。グローバル負荷分散では、Network Service Tiers のうちプレミアム階層を使用する必要があります。

  • デュアル スタックの実行。IPv6 と IPv4 の両方のクライアントに対応するには、IPv6 用に 1 つと、IPv4 用に 1 つの、2 つのロードバランサ IP リソースを作成し、両方を同じ IPv4 アプリケーション インスタンスに関連付けます。IPv4 クライアントは IPv4 アドレスに接続され、IPv6 クライアントは IPv6 アドレスに接続されます。次に、これらのクライアントは、使用可能な容量を持つ、最も近い正常なバックエンドに自動的に負荷分散されます。IPv6 転送ルールは無償で提供しており、料金が発生するのは IPv4 転送ルールのみです。

    IPv4 トラフィックと IPv6 のトラフィックを同じバックエンドに転送する(クリックして拡大)
    IPv4 のトラフィックと IPv6 のトラフィックを同じバックエンドに転送する(クリックして拡大)

IPv6 終端とプロキシ

ロードバランサに IPv6 終端を構成すると、バックエンドが IPv6 クライアントに対して IPv6 アプリケーションとして表示されます。

負荷分散の IPv6 終端(クリックして拡大)
負荷分散の IPv6 終端(クリックして拡大)

ユーザーが IPv6 経由でロードバランサに接続すると、次のように処理されます。

  1. IPv6 アドレスと転送ルールに従って、ロードバランサはユーザー接続を待機します。
  2. IPv6 クライアントは、IPv6 でロードバランサに接続します。
  3. ロードバランサはリバース プロキシとして機能し、IPv6 クライアントの接続を終端します。リクエストはバックエンドへの IPv4 接続に渡されます。
  4. 逆の経路では、ロードバランサはバックエンドから IPv4 レスポンスを受け取り、これを IPv6 接続に渡して元のクライアントに送り返します。

ロードバランサ転送ルールに IPv6 アドレスを割り当てる

外部ロードバランサを構成する場合は、1 つ以上のグローバル転送ルールを指定します。それぞれのルールには、外部に一般公開され、ルーティングされている IPv4 IP アドレスまたは IPv6 IP アドレス(あるいはその両方)を使用します。自分のサイトの DNS レコードでこの IP アドレスを使用できます。

転送ルールを作成するときは、プロジェクト用に予約されている静的 IP アドレスを使用するか、転送ルールによって、ルールを作成するときのエフェメラル IP アドレスを自動的に取得することができます。静的 IP アドレスはプロジェクト用に予約され、意図的にリリースされるまで保持されます。転送ルールが存在している限り、エフェメラル アドレスはこの転送ルールに属します。転送ルールを削除すると、エフェメラル アドレスが解放され、Google Cloud のプールに戻されます。

ロードバランサに IPv4 アドレスと IPv6 アドレスの両方が必要な場合、IPv4 アドレスに関連付けられている転送ルールと、IPv6 アドレスに関連付けられている転送ルールの 2 つを作成できます。次に、両方の転送ルールを同じロードバランサに関連付けます。

IPv6 アドレス形式

Google Cloud は /64 IPv6 アドレス範囲を IPv6 転送ルールに割り当てます。 gcloud コマンドライン ツールは IPv6 アドレスの下位 64 ビットを 0 に設定してリストしますが、ロードバランサは全範囲でトラフィックを受け入れます。そのため、クライアントが接続する IPv6 サーバーの IP アドレスによっては、X-Forwarded-For ヘッダー内の割り当て範囲に、他のロードバランサの IPv6 アドレスが表示されることもあります。

IPv6 アドレスの形式を設定する場合、Google Cloud は RFC 5952 のセクション 4 の推奨事項に準拠します。

HTTP(S) 負荷分散で IPv6 終端されるクライアントの IP ヘッダー

ロードバランサがクライアントからの IPv6 接続を中継し、IPv4 接続でバックエンドに送信すると、元のソース IP アドレスは、ロードバランサの IP アドレスに置き換えられます。ただし、ロギング、意思決定などの目的で、バックエンドに元の送信元 IP アドレスを知らせておくほうがよい場合があります。Google Cloud では、元の IPv6 クライアントの IP アドレスを含む HTTP ヘッダーをバックエンドに伝搬します。

IPv6 の HTTP ヘッダーは IPv4 の HTTP ヘッダーに類似しています。リクエストの形式は次のとおりです。

  • X-Forwarded-For:client-ip-addressglobal-forwarding-rule-external-ip-addresses

最後の要素は、ロードバランサの IP アドレスを示します。最後から 2 番目の要素は、ロードバランサから見たクライアント IP アドレスを示します。ロードバランサにリクエストが送信される前に、クライアントまたは介在するプロキシにより、X-Forwarded-For ヘッダーにその他の X-Forwarded-For ヘッダーが追加される場合があります。

次は、X-Forwarded-For ヘッダーの例です。

X-Forwarded-For: 2001:db8:abcd:1::1234, 2607:f8b0:4005:801::200e

2001:db8:abcd:1::1234 は、クライアントの IPv6 アドレスです。2607:f8b0:4005:801::200e は、外部 HTTP(S) ロードバランサの IPv6 アドレスです。

料金

IPv6 終端の転送ルールに追加料金はかかりません。一時的な IPv6 アドレスについては、課金されません。予約済みの IPv6 アドレスは、使用されているかどうかに関係なく、既存のレートで課金されます。それ以外の場合、IPv6 負荷分散の料金は IPv4 負荷分散の料金と同じです。負荷分散の料金の詳細については、ネットワーク料金をご覧ください。

次のステップ