TCP プロキシ負荷分散の概要

Google Cloud の TCP プロキシ負荷分散を使用すると、世界中のすべてのユーザーに対して単一の IP アドレスを使用できます。TCP プロキシ ロードバランサは、ユーザーに最も近いバックエンドに自動的にトラフィックをルーティングします。

グローバル負荷分散には、Network Service Tiers のうちデフォルトの階層であるプレミアム階層を使用する必要があります。それ以外の場合は、負荷分散はリージョン単位で処理されます。

TCP プロキシ負荷分散は、SMTP(Simple Mail Transfer Protocol)用のポート 25 など、一部の一般的なポートの TCP トラフィックを対象としています。詳細については、ポートの仕様をご覧ください。この同じポートで暗号化されるクライアント トラフィックの場合は、SSL プロキシ負荷分散を使用してください。

Google Cloud ロードバランサとの相違点については、次のドキュメントをご覧ください。

TCP プロキシ負荷分散は、IPv4 アドレスと IPv6 アドレスのクライアント トラフィックに対応しています。クライアントの IPv6 リクエストは負荷分散層で終端され、IPv4 経由でバックエンドにプロキシされます。

TCP プロキシ負荷分散を使用する場合、負荷分散層でクライアントの TCP セッションを終端し、TCP または SSL を使用してバックエンド インスタンスにトラフィックを転送できます。

TCP プロキシ負荷分散の例

TCP プロキシ負荷分散を使用すると、1 つの TCP 接続で受信したトラフィックを負荷分散層で終端してから、利用可能な最も近いバックエンドにプロキシされます。

この例では、アイオワとボストンのユーザーからのトラフィックの接続が負荷分散層で終端しています。このような接続には 1a2a ラベルが付けられています。選択されたバックエンド インスタンスに、ロードバランサから接続が個別に確立されています。これらの接続には 1b2b ラベルが付けられています。

TCP 終端処理を使用した Cloud Load Balancing(クリックして拡大)
TCP 終端処理を使用した Cloud Load Balancing(クリックして拡大)

TCP プロキシ負荷分散は、グローバル負荷分散サービスとして構成できます。この構成では、バックエンドを複数のリージョンにデプロイできます。グローバル負荷分散では、ユーザーに最も近いリージョンに自動的にトラフィックが送られます。あるリージョンがその処理能力に達すると、ロードバランサによって処理能力がある別のリージョンに新しい接続が自動的に振り分けられます。既存のユーザー接続は現在のリージョンにそのまま残ります。

メリット

TCP プロキシ負荷分散には次のメリットがあります。

  • インテリジェント ルーティング。ロードバランサは、処理能力があるバックエンドのロケーションにリクエストをルーティングできます。L3/L4 ロードバランサの場合は、利用可能な処理能力にかかわらず、常にリージョンのバックエンドにルーティングされます。より高度なルーティングを使用すると、x*N ではなく、N+1 または N+2 でプロビジョニングできるようになります。

  • セキュリティ パッチ。TCP スタックに脆弱性が発見された場合、Cloud Load Balancing によって自動的にロードバランサにパッチが適用されます。これにより、インスタンスが安全に保たれます。

  • TCP プロキシ負荷分散でサポートされるポート: 25、43、110、143、195、443、465、587、700、993、995、1883、5222。

ネットワーク サービス階層でのロードバランサの動作

TCP プロキシ負荷分散はプレミアム ティアのグローバル サービスです。バックエンド サービスは 1 つだけですが、(プレミアム ティアでは)複数のリージョンにバックエンドを配置できます。トラフィックは次のようにバックエンドに割り当てられます。

  1. クライアントがリクエストを送信すると、負荷分散サービスは送信元 IP アドレスからリクエストの大まかな送信元を特定します。
  2. 負荷分散サービスは、バックエンド サービスが所有するバックエンドのロケーション、全体の容量、現在の総使用量を確認します。
  3. ユーザーに最も近いバックエンド インスタンスに使用可能な容量がある場合、このバックエンドのセットにリクエストが転送されます。
  4. 指定されたリージョンに届いたリクエストは、そのリージョン内で使用可能なすべてのバックエンド インスタンスに均等に分散されます。ただし、負荷が非常に小さい場合は分散が不均等に見える場合もあります。
  5. 指定されたリージョン内に使用可能な容量を持つ正常なインスタンスがない場合、ロードバランサは代替手段として、使用可能な容量を持つ次に近いリージョンにリクエストを送信します。

スタンダード階層では、TCP プロキシ負荷分散はリージョン サービスです。バックエンドはすべて、ロードバランサの外部 IP アドレスと転送ルールで使用されるリージョンに配置する必要があります。

コンポーネント

TCP プロキシのロードバランサのコンポーネントは次のとおりです。

転送ルールとアドレス

転送ルールは、IP アドレス、ポート、プロトコルに基づいて、ターゲット プロキシと 1 つ以上のバックエンド サービスからなる負荷分散構成にトラフィックを転送します。

各転送ルールは、アプリケーションの DNS レコードで使用できる単一の IP アドレスを提供します。DNS ベースの負荷分散は必要ありません。使用できる静的 IP アドレスを予約するか、Cloud Load Balancing から割り当てます。推奨されているのは静的 IP アドレスの予約です。静的アドレスを予約しない場合、転送ルールを削除して新しく作り直すたびに DNS レコードを編集して、新しく割り当てられたエフェメラル IP アドレスに直す必要があるからです。

ターゲット プロキシ

TCP プロキシ負荷分散では、クライアントからの TCP 接続を終端してバックエンドへの新しい接続を作成します。デフォルトでは、元のクライアントの IP アドレスとポート情報は保持されません。PROXY プロトコルを使用してこの情報を保持できます。ターゲット プロキシは、受信リクエストを直接バックエンド サービスに転送します。

バックエンド サービス

バックエンド サービスは、接続されているバックエンドの 1 つまたは複数に受信トラフィックを振り分けます。このバックエンドはそれぞれ、インスタンス グループまたはネットワーク エンドポイント グループと、処理能力を示すメタデータから構成されます。バックエンドの処理能力は、CPU または 1 秒あたりのリクエスト数(RPS)に基づいています。

各バックエンド サービスは、使用可能なバックエンドに対して実行するヘルスチェックを指定します。

ユーザーへの中断を最小限に抑えるために、バックエンド サービスのコネクション ドレインを有効にできます。このような中断は、バックエンドの停止、手動による削除、オートスケーラーによる削除によって発生することがあります。コネクション ドレインを使用してサービスの中断を最小限に抑える方法については、コネクション ドレインの有効化のドキュメントをご覧ください。

バックエンドへのプロトコル

TCP プロキシ ロードバランサのバックエンド サービスを構成する際には、バックエンド サービスがバックエンドと通信するために使用するプロトコルを設定します。SSL または TCP を選択できます。ロードバランサは、指定したプロトコルのみを使用し、他のプロトコルとの接続をネゴシエートしません。

ファイアウォール ルール

ファイアウォール ルールを使用して、バックエンドに到達するトラフィックを許可します。ロードバランサとヘルス チェッカーからのトラフィックの両方を許可するファイアウォール ルールを構成する必要があります。

次の条件に当てはまる場合、単一のファイアウォール ルールを使用できます。

  • グローバル転送ルールが使用するポートでトラフィックを許可する。
  • ヘルス チェッカーも同じポートを使用する。

ヘルスチェッカーが別のポートを使用する場合は、そのポートに対して別のファイアウォール ルールを作成する必要があります。

ファイアウォール ルールは、ネットワークのエッジではなく、バックエンド レベルでトラフィックのブロックまたは許可を行います。ロードバランサ自体へのトラフィックはブロックできません。

Google Cloud が使用する IP アドレス範囲は広範で、経時的に変化します。ある特定の時点での外部 IP アドレスを判別する必要がある場合は、Compute Engine のよくある質問の手順をご覧ください。

送信元 IP アドレス

各バックエンド仮想マシン(VM)インスタンスまたはコンテナから見たパケットの送信元 IP アドレスは、次の範囲の IP アドレスです。

  • 35.191.0.0/16
  • 130.211.0.0/22

実際の負荷分散トラフィックの送信元 IP アドレスは、ヘルスチェック プローブ IP 範囲と同じです。

バックエンドから見たトラフィックの送信元 IP アドレスは、ロードバランサの Google Cloud の外部 IP アドレスではありません。つまり、2 つの HTTP、SSL、または TCP セッションがあります。

  • セッション 1: 元のクライアントからロードバランサ(GFE)へのもの。

    • 送信元 IP アドレス: オリジナルのクライアント(クライアントが NAT の背後にある場合は外部 IP アドレス)。
    • 宛先 IP アドレス: ロードバランサの IP アドレス。
  • セッション 2: ロードバランサ(GFE)からバックエンド VM またはコンテナへのもの。

    • 送信元 IP アドレス: IP アドレスは次のいずれかの範囲のものです。35.191.0.0/16 または 130.211.0.0/22

      実際の送信元アドレスは予測できません。

    • 宛先 IP アドレス: Virtual Private Cloud(VPC)ネットワーク内のバックエンド VM またはコンテナの内部 IP アドレス。

分散モード

バックエンド サービスにバックエンドを追加するときは、負荷分散モードを設定します。

TCP プロキシ負荷分散の場合、分散モードは connection または backend utilization に設定できます。

負荷分散モードが connection に設定されている場合、バックエンドで処理できる同時接続数に基づいて負荷が分散されます。次のパラメータ(maxConnections(リージョン マネージド インスタンス グループを除く)、maxConnectionsPerInstancemaxConnectionsPerEndpoint)のいずれかも指定する必要があります。

負荷分散モードが backend utilization に設定されている場合、インスタンス グループ内のインスタンスの使用率に基づいて負荷が分散されます。

ロードバランサのタイプとサポートされている分散モードの比較については、負荷分散の方法をご覧ください。

セッション アフィニティ

バックエンドが良好な状態で処理能力があれば、セッション アフィニティにより、同じクライアントからのすべてのリクエストが同じバックエンドに送信されます。

TCP プロキシ負荷分散では、同じクライアント IP アドレスからのすべてのリクエストを同じバックエンドに転送する、というクライアント IP アフィニティを提供しています。

オープンポート

TCP プロキシ ロードバランサはリバース プロキシのロードバランサです。ロードバランサによって受信接続が終端され、ロードバランサからバックエンドへの新しい接続が開かれます。リバース プロキシ機能は、Google Front Ends(GFE)が提供します。

GFE には、他の Google Cloud ロードバランサや他の Google サービスをサポートする複数のオープンポートがあります。ロードバランサの外部 IP アドレスに対してセキュリティ スキャンまたはポートスキャンを実行すると、他のポートも開いているように見えます。

このことは、TCP プロキシのロードバランサには影響しません。SSL プロキシ ロードバランサの定義で使用される外部転送ルールは、特定のポートセットのみを参照できます。トラフィックの TCP 宛先ポートが異なれば、ロードバランサのバックエンドに転送されることはないからです。未許可のポートに TCP セッションを開こうとすることで、追加のポートへのトラフィックが処理されていないことを確認できます。リクエストを処理する GFE によって、TCP リセット(RST)パケットとの接続が閉じられます。

次のステップ