TCP トラフィック ルーティングを設定する

このガイドでは、Traffic Director を使用して、TCP トラフィックを処理するサービスに、データベース、VOIP サービス、管理プラットフォームなどのトラフィックをルーティングする方法について説明します。各サービスでは、TCP トラフィックを、特定のポートまたはポート範囲で受信することを想定しています。

このガイドは、以前の API でのデプロイを対象にしています。プレビュー版の新しいサービス ルーティング API を使用している場合は、TCPRoute リソースを使用した TCP サービスの Traffic Director の設定をご覧ください。

次のことを行う場合は、このガイドを使用してください。

  • クライアントから TCP リクエストを受け入れる同一のバックエンドまたはエンドポイントのコレクションを表すサービスを設定する。
  • Traffic Director で構成された Envoy プロキシが TCP リクエストを送信できるように、ルーティング ルール マップを設定する。

次の図は、仮想マシン(VM)インスタンスとネットワーク エンドポイント グループ(NEG)の TCP ルーティングが機能する仕組みを示しています。

VM の Compute Engine API リソース。
TCP と Compute Engine バックエンドの Traffic Director の設定(クリックして拡大)


NEG の Compute Engine API リソース。
TCP と NEG バックエンドの Traffic Director の設定(クリックして拡大)

準備

  • このガイドは、サービス メッシュ用 Envoy 準備ガイドに基づいており、すでに Traffic Director の動作に関する基礎知識があることを前提としています。
  • このガイドでは、TCP トラフィックのサービスとルーティングを構成する際に、異なる Traffic Director の設定の側面を中心に説明します。
  • このガイドは、マネージド インスタンス グループ(MIG)または NEG をすでに設定していることを前提としています。

負荷分散リソースの構成

次の手順で負荷分散リソースを構成します。

TCP ヘルスチェックの作成

VM での設定

MIG を構成する場合は、次のコマンドを使用してグローバル ヘルスチェックを作成します。PORT は、このヘルスチェックがモニタリングする TCP ポート番号に置き換えます。

gcloud compute health-checks create tcp td-vm-health-check \
    --global \
    --port=PORT

NEG での設定

NEG を構成する場合は、次のコマンドを使用してヘルスチェックを作成します。

gcloud compute health-checks create tcp td-gke-health-check \
    --use-serving-port

ヘルスチェックの詳細については、以下をご覧ください。

ヘルスチェック用のファイアウォール ルールを作成する

このルールにより Google Cloud のヘルス チェッカーのヘルスチェックからお客様のバックエンドに到達できるようになります。

gcloud

gcloud compute firewall-rules create fw-allow-health-checks \
  --action=ALLOW \
  --direction=INGRESS \
  --source-ranges=35.191.0.0/16,130.211.0.0/22 \
  --target-tags=TAGS \
  --rules=tcp:80

ヘルスチェックのファイアウォール ルールの詳細については、以下をご覧ください。

TCP バックエンド用のバックエンド サービスを作成する

Traffic Director を使用した TCP のバックエンド サービスの設定は、HTTP の設定とは少し異なります。次の手順で設定してください。

VM での設定

MIG を構成する場合は、次のコマンドを使用してバックエンド サービスを作成し、ヘルスチェックを追加します。

 gcloud compute backend-services create td-vm-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED \
     --health-checks=td-vm-health-check \
     --protocol=TCP \
     --global-health-checks

バックエンド サービスを設定する最後の手順は、バックエンドの追加です。その手順は、標準の Traffic Director 設定であるため(つまり、TCP ベースのサービスに固有のものではありません)、ここには記載しません。詳細については、自動 Envoy デプロイによる Compute Engine VM の設定ガイドのバックエンド サービスの作成をご覧ください。

NEG での設定

NEG を構成する場合は、次のコマンドを使用してバックエンド サービスを作成し、バックエンド サービスにヘルスチェックを関連付けます。

gcloud compute backend-services create td-gke-service \
    --global \
    --health-checks=td-gke-health-check \
    --protocol=TCP \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED

バックエンド サービスを設定する最後の手順は、バックエンド グループを追加することです。その手順は、標準の Traffic Director 設定であるため(つまり、TCP ベースのサービスに固有のものではありません)、ここには記載しません。詳細については、自動 Envoy インジェクションを使用した GKE Pod の設定ガイドのバックエンド サービスの作成をご覧ください。

TCP ベースのバックエンド サービスのルーティングを設定する

このセクションでは、グローバルなターゲット TCP プロキシとグローバル転送ルールを作成します。これらのリソースにより、アプリケーションは、新しく作成したバックエンド サービスを使用してバックエンドにトラフィックを送信できるようになります。

次の点を考慮してください。

  • 転送ルールには負荷分散スキーム INTERNAL_SELF_MANAGED が必要です。
  • 転送ルールで構成する仮想 IP アドレス(VIP)とポートは、トラフィックが TCP サービスに送信する際に使用する VIP とポートです。いずれかのサブネットから VIP を選択できます。Traffic Director は、この VIP とポートを使用して、クライアント リクエストを特定のバックエンド サービスと照合します。

    クライアント リクエストとバックエンド サービスを照合する仕組みについては、サービス ディスカバリをご覧ください。

gcloud

  1. 次のコマンドを使用して、ターゲット TCP プロキシを作成します。BACKEND_SERVICE は、前の手順で作成したバックエンド サービスの名前に置き換えます。以下の例では、td-tcp-proxy をターゲット TCP プロキシの名前として使用していますが、必要に応じて名前を選択できます。

    gcloud compute target-tcp-proxies create td-tcp-proxy \
       --backend-service=BACKEND_SERVICE
    
  2. 転送ルールを作成します。転送ルールでは、クライアント リクエストを特定のバックエンド サービスと照合する際に使用される VIP とポートを指定します。詳しくは、gcloud コマンド リファレンスの gcloud compute forwarding-rules create をご覧ください。

    gcloud compute forwarding-rules create td-tcp-forwarding-rule \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --address=VIP\
        --target-tcp-proxy=td-tcp-proxy \
        --ports=PORT \
        --network=default
    

この時点で、Traffic Director は、転送ルールで指定された VIP のトラフィックをバックエンド間で負荷分散するように構成されています。

トラブルシューティング

アプリケーションが TCP ベースのサービスにリクエストを送信しようとしている場合は、次のことを確認します。

  • TCP アプリケーションがヘルスチェック トラフィックを受信する予定のポートと TCP ヘルスチェック ポートが一致していることを確認します。
  • バックエンド サービスのポート名がインスタンス グループで指定されているものと一致していることを確認します。

次のステップ