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

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

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

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

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

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

VM の Compute Engine API リソース。
TCP と Compute Engine バックエンドに対する Cloud Service Mesh の設定(クリックして拡大)


NEG の Compute Engine API リソース。
TCP と NEG バックエンドに対する Cloud Service Mesh の設定(クリックして拡大)

準備

  • このガイドは、サービス メッシュ用 Envoy 準備ガイドに基づいており、すでに Cloud Service Mesh の動作に関する基礎知識があることを前提としています。
  • このガイドでは、TCP トラフィックのサービスとルーティングを構成する際に、異なる Cloud Service Mesh の設定の側面を中心に説明します。
  • このガイドは、マネージド インスタンス グループ(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 バックエンド用のバックエンド サービスを作成する

Cloud Service Mesh を使用した 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

バックエンド サービスを設定する最後の手順は、バックエンドの追加です。その手順は、標準の Cloud Service Mesh 設定であるため(つまり、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

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

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

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

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

  • 転送ルールには負荷分散スキーム INTERNAL_SELF_MANAGED が必要です。
  • 転送ルールで構成する仮想 IP アドレス(VIP)とポートは、トラフィックが TCP サービスに送信する際に使用する VIP とポートです。いずれかのサブネットから VIP を選択できます。Cloud Service Mesh は、この 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
    

この時点で、Cloud Service Mesh は、転送ルールで指定された VIP のトラフィックをバックエンド間でロード バランシングするように構成されています。

トラブルシューティング

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

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

次のステップ