您正在查看 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
例如,如需确定 VPC 对等互连是否已启用,请检查响应属性
authorizedNetwork
是否存在并已设置为某个值。如果不是上述情况,则表示未启用 VPC 对等互连:TOKEN=$(gcloud auth print-access-token)
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/example-org/" | jq .authorizedNetwork
此示例响应表明 VPC 对等互连已启用:
"projects/example-org/global/networks/shared-vpc1"
- 请与客户端的 API 代理开发者确认此目标服务器域名是否已在内部配置。否则,此场景不适用。
- 查找项目 ID 以及在其中托管目标端点的网络。
列出上述网络中创建的 DNS 对等互连。请根据 Apigee 组织是否与 VPC 网络对等互连,选择下方相应的操作步骤。
已启用 VPC 对等互连
如果您的组织已启用 VPC 对等互连,请使用
peered-dns-domains list
命令: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.
未启用 VPC 对等互连
如果您的组织未启用 VPC 对等互连,请使用以下 Apigee API:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones"
其中:
ORGANIZATION
是您的 Apigee 组织的名称。示例响应,其中组织名称为
dns-peering-int-4
:{ "dnsZones": [ { "name": "organizations/dns-peering-int-4/dnsZones/demo", "description": "latest", "domain": "demo.com", "peeringConfig": { "targetProjectId": "dns-peering-int-4", "targetNetworkId": "default" }, "state": "ACTIVE" }, { "name": "organizations/dns-peering-int-4/dnsZones/dns-peering-int-4", "description": "latest", "domain": "dns-peering-int-4.com", "peeringConfig": { "targetProjectId": "dns-peering-int-4", "targetNetworkId": "default" }, "state": "ACTIVE" } ] }
如果响应不包含相关 DNS 后缀的 DNS 对等互连条目,则这可能就是导致此问题的原因。请按照解决方案中给出的说明来解决此问题。
解决方法
- 记下 DNS 后缀、项目 ID 以及托管目标端点的网络。
为 DNS 后缀创建对等互连 DNS 网域。
已启用 VPC 对等互连
如果您的组织已启用 VPC 对等互连,请使用
peered-dns-domains create
gcloud 命令。请注意,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.
未启用 VPC 对等互连
如果您的组织未启用 VPC 对等互连,请在项目中创建包含专用 DNS 区域的 DNS 对等互连区域:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/ORGANIZATION/dnsZones?dnsZoneId=DNS_ZONE_ID" \ -d '{ "domain": "DOMAIN", "description": "DESCRIPTION", "peeringConfig": { "targetProjectId": "PRODUCER_PROJECT_ID", "targetNetworkId": "PRODUCER_VPC_NETWORK" } }'
其中:
ORGANIZATION
是您的 Apigee 组织的名称。DNS_ZONE_ID
是您要创建的 DNS 区域的名称。DOMAIN
是相应托管区域的 DNS 名称,例如example.com
。DESCRIPTION
是对 DNS 区域的简要说明。字符数上限:1024PRODUCER_PROJECT_ID
是包含提供方 VPC 网络的项目。PRODUCER_VPC_NETWORK
是客户项目中的 VPC 网络。
- 现在,向 API 代理端点发送 API 请求,并验证 API 代理是否可以解析目标服务器域名并与目标服务器进行通信。
必须收集的诊断信息
如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后与 Google Cloud Customer Care 联系。
- Google Cloud 项目 ID
- Apigee 组织
- API 代理及修订版本
- 创建了专用网域的网络
- 专用网域的 DNS 后缀
- 对等互连 DNS 网域创建命令的完整输出