API リクエストが TARGET_CONNECT_HOST_NOT_REACHABLE エラーで失敗する

現在、ApigeeApigee ハイブリッドのドキュメントを表示しています。
このトピックに対応する Apigee Edge のドキュメントはありません。

現象

API リクエストが TARGET_CONNECT_HOST_NOT_REACHABLE エラーで失敗します。

エラー メッセージ

この問題が発生すると、API リクエストは次のエラーで失敗し、HTTP 503 レスポンス ステータス コードを返します。

{"fault":{"faultstring":
"Unable to resolve host invalid-target-host","detail":
{"errorcode":"protocol.http.NoResolvedHost","reason":
"TARGET_CONNECT_HOST_NOT_REACHABLE"}}}

考えられる原因

次の原因が考えられます。

原因 説明 プラットフォーム
指定されたターゲット サーバーのホストが正しくないか、無効な文字が含まれている この問題は、API プロキシ内で指定されたターゲット サーバーのホストが正しくないか、無効な文字が含まれている場合に発生する可能性があります。 Apigee、Apigee ハイブリッド
DNS ピアリングが構成されていない この問題は、Apigee デプロイで DNS ピアリングが未構成で、Apigee がドメイン名を解決できない場合に発生する可能性があります。 Apigee

原因: 指定されたターゲット サーバーのホストが正しくないか、無効な文字が含まれている

診断

  1. 関連する API プロキシに API リクエストを送信します。

    curl -ik https://dev.example.com/dns-peering-example
      HTTP/2 503
      content-type: application/json
      x-request-id: ***
      content-length: 169
      date: Thu, 02 Nov 2023 04:31:43 GMT
      via: 1.1 google
      alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

    レスポンス メッセージを確認します。

    {"fault":{"faultstring":
    "Unable to resolve host invalid-target-host","detail":
    {"errorcode":"protocol.http.NoResolvedHost","reason":
    "TARGET_CONNECT_HOST_NOT_REACHABLE"}}}
  2. レスポンスに TARGET_CONNECT_HOST_NOT_REACHABLE というエラーの理由が含まれている場合、この理由に関連しています。

解決策

  1. API プロキシの定義を確認し、定義されているターゲット ホスト名を見つけます。
  2. 指定されたターゲット ホスト名が無効であるか、無効な文字が含まれている場合は、それに応じて修正を行い、プロキシの新しいリビジョンを作成してプロキシをデプロイします。

原因: DNS ピアリングが構成されていない

診断

  1. 次の Apigee API を呼び出して、Apigee 組織が VPC ネットワークとピアリングされているかどうかを確認します。
    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork

    例:

    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/example-org/" | jq .authorizedNetwork

    対応:

    "projects/example-org/global/networks/shared-vpc1"

    Apigee 組織が VPC とピアリングされておらず、Private Service Connect(PSC)を使用している場合、この Apigee 組織にこのシナリオは該当しません。

  2. 顧客側の API プロキシ デベロッパーに、このターゲット サーバーのドメイン名が内部で構成されているかどうか確認します。そうでない場合、このシナリオは該当しません。
  3. プロジェクト ID と、ターゲット エンドポイントがホストされているネットワークを確認します。
  4. peered-dns-domains list コマンドを実行して、上記のネットワークで作成された DNS ピアリングのリストを表示します。
    gcloud services peered-dns-domains list --network=NETWORK --project=PROJECT-ID

    ピアリングされた DNS ドメインが使用できない場合、空の結果が返されます。使用可能な場合は、次のようにピアリングされた DNS ドメインのリストが返されます。

    NAME                 DNS_SUFFIX
    customer-service     customer.service.internal.
    accounts-service     accounts.service.internal.

    このコマンドの出力に、関連する DNS サフィックスの DNS ピアリング エントリが表示されない場合、これが問題の原因である可能性があります。解決策の手順で問題を解決します。

解決策

  1. DNS サフィックス、プロジェクト ID、ターゲット エンドポイントがホストされているネットワークをメモします。
  2. peered-dns-domains create gcloud コマンドを使用して、ピアリングされた DNS ドメインを DNS サフィックスに作成します。DNS サフィックスの末尾にはドットを付ける必要があります。
    gcloud services peered-dns-domains create NAME --network=NETWORK --dns-suffix=DNS-SUFFIX. --project=PROJECT-ID

    次に例を示します。

    gcloud services peered-dns-domains create orders-service --network="shared-vpc1" --dns-suffix="orders.service.internal." --project=service-project

    対応:

    Operation "operations/cpdd.p25-1064980322781-fafa5fe4-b5fe-487e-830d-fff0f9a6200d" finished successfully.
  3. API プロキシ エンドポイントに API リクエストを送信し、API プロキシがターゲット サーバーのドメイン名を解決してターゲット サーバーと通信できるかどうかを確認します。
    gcloud services peered-dns-domains create orders-service --network="shared-vpc1" --dns-suffix="orders.service.internal." --project=service-project

    対応:

    Operation "operations/cpdd.p25-1064980322781-fafa5fe4-b5fe-487e-830d-fff0f9a6200d" finished successfully

診断情報の収集が必要な場合

上記の手順でも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアに連絡してください。

  1. Google Cloud プロジェクト ID
  2. Apigee 組織
  3. API プロキシとリビジョン
  4. プライベート ドメインが作成されるネットワーク
  5. プライベート ドメインの DNS サフィックス
  6. ピアリングされた DNS ドメインの作成コマンドの完全な出力