您目前查看的是 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 Proxy:
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 Proxy 定義,找出定義的目標主機名稱:
- 如果指定目標主機名稱無效或含有無效字元,請修正相關問題,建立新的 Proxy 修訂版本,然後部署 Proxy。
原因:未設定 DNS 對等互連
診斷
- 呼叫下列 Apigee API,檢查 Apigee 機構是否與虛擬私有雲網路對等互連:
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 Proxy 開發人員確認,這個目標伺服器網域名稱是否已在內部設定。如果不是,則不適用這個情境。
- 找出專案 ID 和目標端點所在的網路。
列出上述網路中建立的 DNS 對等互連。請根據 Apigee 機構是否與 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 對等互連,請使用下列 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 對等互連,請使用
peered-dns-domains creategcloud 指令。請注意,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 對等互連,請在專案中建立 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是包含供應商虛擬私有雲網路的專案。PRODUCER_VPC_NETWORK是客戶專案中的虛擬私有雲網路。
- 現在,請將 API 要求傳送至 API Proxy 端點,並驗證 API Proxy 是否能解析目標伺服器網域名稱,以及與目標伺服器通訊。
必須收集診斷資訊
如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊,然後與 Google Cloud 客服團隊聯絡。
- Google Cloud 專案 ID
- Apigee 組織
- API Proxy 和修訂版本
- 建立私有網域的網路
- 私有網域的 DNS 後置字串
- 對等互連 DNS 網域建立指令的完整輸出內容