בקשות ל-API נכשלות עם השגיאה TARGET_CONNECT_HOST_NOT_REACHABLE

הדף הזה רלוונטי ל-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"}}}

סיבות אפשריות

אלה הסיבות האפשריות לתופעה שצוינה למעלה:

מטרה תיאור פלטפורמה
המארח של שרת היעד שצוין שגוי או מכיל תווים לא חוקיים הבעיה הזו יכולה לקרות אם שם המארח של שרת היעד שצוין ב-proxy ל-API שגוי או מכיל תווים לא חוקיים. ‫Apigee, ‏ Apigee Hybrid
לא הוגדר קישור DNS בין רשתות שכנות (peering) הבעיה הזו יכולה להתרחש כש-Apigee לא מצליח לפענח את שם הדומיין אם לא מוגדרת ב-Apigee פריסת DNS. Apigee

הסיבה: המארח של שרת היעד שצוין שגוי או מכיל תווים לא חוקיים

אבחון

  1. שולחים בקשת API לשרת ה-proxy הרלוונטי של ה-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"}}}
  2. אם התשובה מכילה את סיבת השגיאה TARGET_CONNECT_HOST_NOT_REACHABLE, אז היא קשורה לסיבה הזו.

רזולוציה

  1. בודקים את ההגדרה של ה-proxy ל-API ומחפשים את שם המארח של היעד שהוגדר:
  2. אם שם המארח של היעד שצוין לא תקין או מכיל תווים לא תקינים, צריך לתקן אותו בהתאם, ליצור גרסה חדשה של ה-proxy ולפרוס את ה-proxy.

הסיבה: לא הוגדר שיוך DNS

אבחון

  1. בודקים אם הארגון ב-Apigee נמצא ב-peering עם רשת VPC על ידי הפעלת ה-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 peering:

    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. צריך לוודא עם מפתח ה-proxy ל-API בצד הלקוח אם שם הדומיין של שרת היעד הזה מוגדר באופן פנימי. אם לא, התרחיש הזה לא רלוונטי.
  3. מחפשים את מזהה הפרויקט ואת הרשת שבהם מתארחת נקודת הקצה של היעד.
  4. רשימה של חיבורי DNS בין רשתות שנוצרו ברשת שלמעלה. פועלים לפי השלבים הבאים בהתאם לשאלה אם הארגון ב-Apigee מחובר לרשת VPC או לא.

    קישור בין רשתות VPC שכנות (peering) מופעל

    אם בארגון שלכם מופעלת קישוריות 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 שכנות (peering) לא מופעל

    אם בארגון שלכם לא מופעלת אפשרות ה-VPC Peering, אתם יכולים להשתמש ב-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 peering עבור הסיומת הרלוונטית של ה-DNS, יכול להיות שזו הסיבה לבעיה. פועלים לפי ההוראות שמופיעות בקטע פתרון כדי לפתור את הבעיה.

רזולוציה

  1. רושמים או זוכרים את סיומת ה-DNS, מזהה הפרויקט והרשת שבהם מתארחת נקודת הקצה של היעד.
  2. יוצרים דומיין DNS מקושר לסיומת ה-DNS.

    קישור בין רשתות VPC שכנות (peering) מופעל

    אם בארגון שלכם מופעלת שותפות 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 שכנות (peering) לא מופעל

    אם בארגון שלכם לא מופעל VPC Peering, צריך ליצור אזור DNS Peering עם אזור 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. מספר התווים המקסימלי: 1,024
    • PRODUCER_PROJECT_ID הוא הפרויקט שמכיל את רשת ה-VPC של ספק השירות.
    • PRODUCER_VPC_NETWORK היא רשת ה-VPC בפרויקט הלקוח.
  3. עכשיו, שולחים בקשת API לנקודת הקצה של proxy ל-API ומוודאים אם proxy ל-API הצליח לזהות את שם הדומיין של שרת היעד ולתקשר עם שרת היעד.

צריך לאסוף פרטי אבחון

אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את נתוני האבחון הבאים ואז לפנות אל Cloud Customer Care של Google.

  1. Google Cloud מזהה הפרויקט
  2. ארגון Apigee
  3. גרסה של proxy ל-API
  4. הרשת שבה נוצר הדומיין הפרטי
  5. סיומת DNS של הדומיין הפרטי
  6. הפלט המלא של הפקודה ליצירת דומיין DNS עם שירותי DNS מקבילים