您正在查看 Apigee 和 Apigee 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 |
原因:指定的目标服务器主机不正确或包含无效字符
诊断
-
向相关 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"}}}
-
如果响应包含错误原因
TARGET_CONNECT_HOST_NOT_REACHABLE
,则与此原因有关。
解决方法
- 检查 API 代理定义并找到已定义的目标主机名:
- 如果指定的目标主机名无效或包含无效字符,请相应地进行修正,创建代理的新版本,然后部署代理。
原因:尚未配置 DNS 对等互连
诊断
- 通过调用以下 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 组织。
- 请与客户端的 API 代理开发者确认此目标服务器域名是否已在内部配置。否则,此场景不适用。
- 查找项目 ID 以及在其中托管目标端点的网络。
-
通过执行
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 对等互连条目,则这可能是导致此问题的原因。请按照解决方案中给出的说明来解决此问题。
解决方法
- 记下 DNS 后缀、项目 ID 以及托管目标端点的网络。
- 使用
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.
- 现在,向 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 联系。
- Google Cloud 项目 ID
- Apigee 组织
- API 代理和修订版本
- 创建专用网域的网络
- 专用网域的 DNS 后缀
- 对等互连的 DNS 网域创建命令的完整输出