您正在查看 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
是否存在,並設為某個值。如果未啟用,則無法啟用虛擬私有雲對等互連: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 對等互連功能,請使用
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 create
gcloud 指令。請注意,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.
未啟用虛擬私有雲對等互連
如果貴組織未啟用 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 Customer Care 團隊聯絡。
- Google Cloud 專案 ID
- Apigee 組織
- API Proxy 和修訂版本
- 建立私人網域的網路
- 私人網域的 DNS 後置字串
- 對等 DNS 網域建立指令的完整輸出內容