トラブルシューティング

エンドポイントを追加するときに not found エラーが表示されるのはなぜですか?

サービスまたはエンドポイントを追加するときに 404 エラーが発生する場合は、エンドポイントを追加する前に、名前空間とサービスの両方を(この順序で)作成していることを確認します。エンドポイントを追加するには、サービスが存在している必要があります。

サービスを検索してもエンドポイントが表示されないのはなぜですか?

リクエストでプロジェクト、リージョン、名前空間名、サービス名がすべて正しいこと、エンドポイントを登録した場所と一致していることを確認します。すべての Service Directory サービスはリージョン名前空間に存在するため、1 つのリージョンに登録されたサービスは、別のリージョンのデータと一致しません。

あるユーザーにサービスへのアクセス権を付与しましたが、そのユーザーに引き続き permission denied が表示されます。

その原因はいくつか考えられます。まず、リージョンが正しいことを確認します。Namespace またはサービスにポリシーを設定すると、そのポリシーはその特定のリージョンにのみ適用されます。ユーザーが別のリージョンで同じサービスを登録または検索しようとしている場合、そのリージョン サービスへの IAM アクセス権も付与しない限り、ユーザーはアクセスできません。アクセスの問題をデバッグするには、サービスと Namespace の TestIamPermissions メソッドを試します。

いくつかのエンドポイントを追加してから、サービス バックエンドを削除しました。エンドポイントがまだ残っているのはなぜですか?

Service Directory は自動ヘルスチェックやハートビートを実行しません。また、明示的に削除しない限り、エンドポイントを削除しません。エンドポイントが存在しなくなったら Service Directory からエンドポイントを削除するコードをサービス バックエンドまたはオーケストレーターに追加してください。エンドポイントで存続時間アノテーション フィールドを使用して、エンドポイントが最後に登録または更新された日時を記録することをおすすめします。

エンドポイントを検索することはできますが、接続しようとするたびに失敗します。

Service Directory は、クライアントからの到達性を保証しません。Service は、エンドポイントを Service Directory に直接登録します。ただし、Service Directory に登録されたアドレスは、ルーティングできない場合があります(特に、クライアントとサーバーの両方が別々のプライベート ネットワーク上にある場合)。エンドポイントがクライアントからルーティング可能である場合は、エンドポイントの異常が原因である可能性があります。次の質問を参照してください。

エンドポイントの健全性データを追加して、どのエンドポイントに接続すればよいかをクライアントに知らせるにはどうすればよいですか?

クライアントサイドのロード バランシングを使用する場合は、サービス バックエンドがエンドポイントのアノテーション フィールドを定期的に更新することをおすすめします。このフィールドは、クライアントが接続先のバックエンドを決定するために使用できます。Service Directory では、このデータは検査も評価もされません。

Namespace を作成しました。Cloud DNS 限定公開ゾーンを割り当てられないのはなぜですか?

関連付けられたプライベート ゾーンを作成するには、この権限が必要です。そのため、名前空間に対する servicedirectory.namespaces.associatePrivateZone IAM 権限があることを確認します。デフォルトでは、プロジェクト編集者、プロジェクト オーナー、Service Directory 管理者、Service Directory 編集者のロールにはこの権限が付与されています。

サービスの DNS ルックアップを実行しても、エンドポイントが取得されないのはなぜですか?

次のような理由が考えられます。

  1. 関連付けられた Namespace が削除されています。これは、プライベート ゾーンで get コマンドを実行することで確認できます。serviceDirectoryConfig.deletionTime が設定されている場合、関連する Namespace とそのすべてのエンドポイントが削除されています。
  2. 限定公開ゾーンのクエリが許可されているネットワークからリクエストを発行していることを確認します。ネットワーク リストを確認するには、プライベート ゾーンで get コマンドを実行します。
  3. サービスの(有効な)エンドポイントがありません。Service Directory API を使用してサービスに対して resolve コマンドを実行し、サービスが空ではなく、有効なエンドポイント IP が 1 つ以上あることを確認します。DNS サポートは、有効な IPv4 または IPv6 IP アドレスを持つエンドポイントでのみ使用できます。
  4. 正しいゾーンをクエリしていることを確認します。たとえば、example.com という Service Directory ゾーンを作成し、billing.example.com という別の(標準)限定公開ゾーンがあるとします。billing.example.com に対する DNS クエリは、example.com に関連付けられている Service Directory 名前空間の billing サービスではなく、billing.example.com ゾーンに属するリソース レコードを返します。詳細については、名前解決の順序をご覧ください。

GKE サービスが Service Directory と同期されないのはなぜですか?

次のような理由が考えられます。

  1. 同期しようとしている Namespace の ServiceDirectoryRegistrationPolicy が GKE クラスタにデプロイされていることを確認します。また、同期しようとしているサービスがポリシーのラベル セレクタと一致していることを確認します。
  2. 手動で作成された、または同期しようとしている GKE Namespace と同じ名前の他の統合を使用して作成された、既存の Service Directory Namespace がすでに存在します。競合が発生しないように、既存の Service Directory 名前空間の名前を変更するか、削除する必要があります。
  3. Service Directory サービス アカウントの権限が削除されました。service-{PROJECT_NUMBER}@gcp-sa-servicedirectory.iam.gserviceaccount.comService Directory Service Agent IAM 権限があることを確認します。IAM の詳細については、IAM のドキュメントをご覧ください。

次のステップ