TARGET_CONNECT_HOST_NOT_REACHABLE 오류로 API 요청 실패

ApigeeApigee Hybrid 문서입니다.
이 주제에 해당하는 Apigee Edge 문서가 없습니다.

증상

API 요청이 TARGET_CONNECT_HOST_NOT_REACHABLE 오류와 함께 실패합니다.

오류 메시지

이 문제가 발생하면 HTTP 503 응답 상태 코드 및 다음 오류와 함께 API 요청이 실패합니다.

{"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 요청을 보냅니다.

    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 프록시 정의를 확인하고 정의된 대상 호스트 이름을 찾습니다.
  2. 지정된 대상 호스트 이름이 잘못되었거나 잘못된 문자가 포함된 경우 그에 따라 수정하고, 새 버전의 프록시를 만들고 이 프록시를 배포합니다.

원인: DNS 피어링이 구성되지 않음

진단

  1. 다음 Apigee API를 호출하여 Apigee 조직이 VPC 네트워크와 피어링되어 있는지 확인합니다.
    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/$ORG" | jq .authorizedNetwork

    예를 들면 다음과 같습니다.

    TOKEN=$(gcloud auth print-access-token)
    curl -H "Authorization: Bearer $TOKEN" "https://apigee.googleapis.com/v1/organizations/example-org/" | jq .authorizedNetwork

    응답:

    "projects/example-org/global/networks/shared-vpc1"

    Apigee 조직이 VPC와 피어링되지 않았고 Private Service Connect(PSC)를 사용하는 경우에는 이 Apigee 조직에 대해 이 시나리오가 적용되지 않습니다.

  2. 이 대상 서버 도메인 이름이 내부적으로 구성되었는지 여부를 고객 측의 API 프록시 개발자에게 확인하세요. 그렇지 않으면 이 시나리오가 적용되지 않습니다.
  3. 대상 엔드포인트가 호스팅되는 프로젝트 ID 및 네트워크를 찾습니다.
  4. peered-dns-domains list 명령어를 실행하여 위 네트워크에서 생성된 DNS 피어링을 나열합니다.
    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.

    위 명령어로 관련 DNS 서픽스의 DNS 피어링 항목이 나열되지 않으면 그것이 이 문제의 이유일 수 있습니다. 해결에 표시된 안내에 따라 문제를 해결하세요.

해결 방법

  1. 대상 엔드포인트가 호스팅되는 DNS 서픽스, 프로젝트 ID, 네트워크를 기록해 둡니다.
  2. peered-dns-domains create gcloud 명령어를 사용해서 DNS 서픽스에 대해 피어링된 DNS 도메인을 만듭니다. 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.
  3. 이제 API 프록시 엔드포인트에 API 요청을 보내고 API 프록시가 대상 서버 도메인 이름을 확인하고 대상 서버와 통신할 수 있는지 여부를 확인합니다.
    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

진단 정보 수집 필요

위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Google Cloud Customer Care에 문의하세요.

  1. Google Cloud 프로젝트 ID
  2. Apigee 조직
  3. API 프록시 및 버전
  4. 비공개 도메인이 생성되는 네트워크
  5. 비공개 도메인의 DNS 서픽스
  6. 피어링된 DNS 도메인 생성 명령어의 전체 출력