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 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"}}}
  2. 如果回應包含錯誤原因 TARGET_CONNECT_HOST_NOT_REACHABLE,則與此原因有關。

解決方法

  1. 查看 API Proxy 定義,找出定義的目標主機名稱:
  2. 如果指定的目標主機名稱無效或含有無效字元,請據此修正,建立新的 Proxy 修訂版本,然後部署 Proxy。

原因:未設定 DNS 對等互連

診斷

  1. 請呼叫下列 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"
  2. 請向客戶端的 API 代理程式開發人員確認,這個目標伺服器網域名稱是否已在內部設定。如果不是,則不適用於這個情況。
  3. 找出專案 ID 和目標端點所在的網路。
  4. 列出在上述網路中建立的 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 對等項目,這可能是造成問題的原因。請按照「解決方法」中的操作說明解決問題。

解決方法

  1. 請記下 DNS 後置字串、專案 ID 和目標端點所在的網路。
  2. 為 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 區域的簡短說明。字元上限:1024
    • PRODUCER_PROJECT_ID 是含有供應商虛擬私有雲網路的專案。
    • PRODUCER_VPC_NETWORK 是客戶專案中的虛擬私有雲網路。
  3. 接著,請將 API 要求傳送至 API Proxy 端點,並驗證 API Proxy 是否能解析目標伺服器網域名稱,以及與目標伺服器進行通訊。

必須收集診斷資訊

如果問題在您按照上述指示操作後仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡。

  1. Google Cloud 專案 ID
  2. Apigee 組織
  3. API Proxy 和修訂版本
  4. 建立私人網域的網路
  5. 私人網域的 DNS 後置字串
  6. 對等 DNS 網域建立指令的完整輸出內容