TCP トラフィック ルーティングを設定する
このガイドでは、Cloud Service Mesh を使用して、TCP トラフィックを処理するサービスに、データベース、VOIP サービス、管理プラットフォームなどのトラフィックをルーティングする方法について説明します。各サービスでは、TCP トラフィックを、特定のポートまたはポート範囲で受信することを想定しています。
このガイドは、以前の API でのデプロイを対象にしています。新しいサービス ルーティング API を使用している場合は、TCPRoute
リソースを使用した TCP サービスの Cloud Service Mesh の設定をご覧ください。
次のことを行う場合は、このガイドを使用してください。
- クライアントから TCP リクエストを受け入れる同一のバックエンドまたはエンドポイントのコレクションを表すサービスを設定する。
- Cloud Service Mesh で構成された Envoy プロキシが TCP リクエストを送信できるように、ルーティング ルール マップを設定する。
次の図は、仮想マシン(VM)インスタンスとネットワーク エンドポイント グループ(NEG)の TCP ルーティングが機能する仕組みを示しています。
準備
- このガイドは、サービス メッシュ用 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
ヘルスチェックの詳細については、以下をご覧ください。
- Cloud Load Balancing ドキュメントのヘルスチェックの作成
gcloud
コマンド リファレンスのgcloud compute health-checks create tcp
ヘルスチェック用のファイアウォール ルールの作成
このルールを使用すると、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
ヘルスチェックのファイアウォール ルールの詳細については、以下をご覧ください。
- Cloud Load Balancing ドキュメントのヘルスチェックのファイアウォール ルール
gcloud
コマンド リファレンスのgcloud compute firewall-rules create
(TAGS
のガイダンスを含む)
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
次のコマンドを使用して、ターゲット TCP プロキシを作成します。
BACKEND_SERVICE
は、前の手順で作成したバックエンド サービスの名前に置き換えます。以下の例では、td-tcp-proxy
をターゲット TCP プロキシの名前として使用していますが、必要に応じて名前を選択できます。gcloud compute target-tcp-proxies create td-tcp-proxy \ --backend-service=BACKEND_SERVICE
転送ルールを作成します。転送ルールでは、クライアント リクエストを特定のバックエンド サービスと照合する際に使用される 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 ヘルスチェック ポートが一致していることを確認します。
- バックエンド サービスのポート名がインスタンス グループで指定されているものと一致していることを確認します。
次のステップ
- 設定プロセスの他の手順を確認するには、Envoy を使用して Cloud Service Mesh を設定する準備をするをご覧ください。
- Cloud Service Mesh の一般的なトラブルシューティング情報については、Envoy を使用するデプロイのトラブルシューティングをご覧ください。