API 请求失败并显示 TARGET_CONNECT_HOST_NOT_REACHABLE 错误

您正在查看 ApigeeApigee Hybrid 文档。
此主题没有等效的 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 Hybrid
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 Customer Care 联系。

  1. Google Cloud 项目 ID
  2. Apigee 组织
  3. API 代理和修订版本
  4. 创建专用网域的网络
  5. 专用网域的 DNS 后缀
  6. 对等互连的 DNS 网域创建命令的完整输出