プロキシレスの Traffic Director のデプロイに関するトラブルシューティング

このドキュメントでは、Traffic Director でプロキシレス gRPC サービスのデプロイに関連する構成の問題を解決するのに役立つ情報を提供します。

gRPC アプリケーションでの RPC エラーのトラブルシューティング

gRPC アプリケーションで RPC エラーのトラブルシューティングを行うには、次の 2 つの方法があります。

  1. RPC のエラーが発生したときに返されたステータスを確認します。ほとんどの場合、ステータスには、RPC エラーの原因を理解するのに十分な情報が含まれています。gRPC ステータス エラーの処理については、gRPC エラー処理のドキュメントをご覧ください。
  2. gRPC ランタイムでロギングを有効にします。場合によっては、gRPC ランタイム ログを調べて、RPC 戻りステータスに反映されないエラーについて理解する必要があります。たとえば、期限を超えたことを示すステータスの RPC エラーが発生すると、期限を超えたエラーの根本原因を確認できます。gRPC の言語実装によって、gRPC ランタイムでロギングを有効にする方法は異なります。

    • Java の gRPC: gRPC がロギングに java.util.logging を使用します。io.grpc.levelFINE レベルに設定して、gRPC ランタイムで十分な詳細ロギングを有効にします。Java でロギングを有効にする一般的な方法は、ファイルからロギング構成を読み込み、コマンドライン フラグを使用して JVM にファイルの場所を指定することです。次に例を示します。
    # Create a file called logging.properties with the following contents.
    handlers=java.util.logging.ConsoleHandler
    io.grpc.level=FINE
    io.grpc.xds.level=FINEST
    java.util.logging.ConsoleHandler.level=ALL
    java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
    
    # Pass the location of the file to JVM via this command-line flag
    -Djava.util.logging.config.file=logging.properties
    

    xDS モジュール固有のロギングを有効にするには、io.grpc.xds.levelFINE に設定します。より詳細なロギングを表示するには、レベルを FINER または FINEST に設定します。

    GRPC_GO_LOG_VERBOSITY_LEVEL=99 GRPC_GO_LOG_SEVERITY_LEVEL=info
    
    • C++ で gRPC によるロギングを有効にする方法については、こちらの手順をご覧ください。xDS モジュール固有のロギングを有効にするには、こちらGRPC_TRACE 環境変数を使用して、以下のトレーサを有効にします。xds_clientxds_resolvercds_lbeds_lbpriority_lbweighted_target_lb、およびlrs_lb

RPC ステータスまたはランタイム ログ内のエラーによっては、問題が次のいずれかのカテゴリに分類される可能性があります。

Traffic Director に接続できません

接続の問題を解決するには、以下の手順をお試しください。

  • ブートストラップ ファイルの server_uri の値が trafficdirector.googleapis.com:443 であることを確認します。
  • 環境変数 GRPC_XDS_BOOTSTRAP が定義され、ブートストラップ ファイルを指すことを確認します。
  • gRPC チャンネルを作成するときに URI で xds スキームを使用していることを確認してください。
  • コンピューティング インスタンスの作成とプロジェクト内のネットワークに必要な IAM 権限が付与されていることを確認してください。
  • プロジェクトで Traffic Director API を有効にしたことを確認してください。プロジェクトの Google Cloud Console の API とサービスで、Traffic Director API のエラーを探します。
  • サービス アカウントに正しい権限が付与されていることを確認します。VM またはポッドで実行されている gRPC アプリケーションは、Compute Engine VM ホストまたは Google Kubernetes Engine ノード インスタンスのサービス アカウントを使用します。
  • Compute Engine VM または GKE クラスタの API アクセス スコープが、Compute Engine API に完全アクセス権を許可するように設定されていることを確認します。これを行うには、VM またはクラスタの作成時に --scopes=https://www.googleapis.com/auth/cloud-platform を指定します。
  • VM から trafficdirector.googleapis.com:443 にアクセスできることを確認します。アクセスに問題がある場合は、TCP ポート 443 を使用した trafficdirector.googleapis.com へのアクセスを妨げるファイアウォールまたは trafficdirector.googleapis.com ホスト名の DNS 解決の問題が考えられます。

URI に指定されたホスト名を解決できません

ホスト名解決の問題を解決するには、次の方法をお試しください。

  • gRPC クライアント アプリケーションが gRPC バージョン 1.30.0 以降にアップグレードされていることを確認します。
  • URI で gRPC チャネルの作成に使用されるポートが、構成で使用される転送ルールのポート値と一致していることを確認します。URI にポートが指定されていない場合、値 80 は転送ルールの照合に使用されます。
  • URI で gRPC チャネルの作成に使用されるホスト名とポートが、構成で使用される URL マップのホストルールと完全に一致することを確認します。
  • 同じホストルールを複数の URL マップで構成していないことを確認します。
  • ワイルドカードが使用されていないことを確認してください。* ワイルドカード文字を含むホストルールは無視されます。

サービスが利用できないため、RPC が失敗しました

サービスが利用できない場合に RPC エラーのトラブルシューティングを行うには、以下を試します。

  • Traffic Director の全体的なステータスと、Cloud Console でバックエンド サービスのステータスを確認します。正しい URL マップがバックエンド サービスを参照していることを確認してください。これは、[関連付けられているルーティング ルール マップ] 列に表示されます。
  • [バックエンド] 列で、バックエンド サービスに関連付けられたバックエンドが正常であることを確認します。
  • バックエンドが異常である場合は、対応するバックエンド サービスをクリックし、適切なヘルスチェックが構成されていることを確認します。ヘルスチェックが失敗するのは、ファイアウォール ルールが正しくないか見つからない、あるいは VM とファイアウォール ルールで指定されたタグが一致しないためです。詳細については、ヘルスチェックの作成をご覧ください。
  • gRPC ヘルスチェックが正常に機能するには、gRPC バックエンドで gRPC ヘルスチェック プロトコル{: class="external" target="github" track-type="article" track-name="gitHubLink" track-metadata-position="body" } を実装する必要があります。このプロトコルが実装されていない場合は、代わりに TCP ヘルスチェックを使用します。gRPC サービスで HTTP、HTTPS、HTTP/2 のヘルスチェックを使用しないでください。
  • インスタンス グループを使用する場合は、インスタンス グループで指定された名前付きポートがヘルスチェックで使用されているポートと一致していることを確認します。NEG を使用する場合は、GKE サービス仕様の NEG アノテーションが正しく、ヘルスチェックが NEG の処理ポートを使用するように構成されていることを確認してください。
  • エンドポイント プロトコルが GRPC として構成されていることを確認します。
  • [関連付けられているルーティング ルール マップ] をクリックし、ホスト マッチング ルールで指定されたバックエンド サービスが正しいことを確認します。

次のステップ

Traffic Director の一般的なトラブルシューティング情報については、Traffic Director のデプロイのトラブルシューティングをご覧ください。