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

    예를 들어 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"
  2. 이 대상 서버 도메인 이름이 내부적으로 구성되었는지 여부를 고객 측의 API 프록시 개발자에게 확인하세요. 그렇지 않으면 이 시나리오가 적용되지 않습니다.
  3. 대상 엔드포인트가 호스팅되는 프로젝트 ID 및 네트워크를 찾습니다.
  4. 위 네트워크에서 생성된 DNS 피어링을 나열합니다. Apigee 조직이 VPC 네트워크와 피어링되었는지 여부에 따라 아래 단계를 따르세요.

    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 피어링이 사용 설정되지 않음

    조직에서 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 피어링 사용 설정

    조직에 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 피어링이 사용 설정되지 않음

    조직에서 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는 프로듀서 VPC 네트워크가 포함된 프로젝트입니다.
    • PRODUCER_VPC_NETWORK는 고객 프로젝트의 VPC 네트워크입니다.
  3. 이제 API 프록시 엔드포인트에 API 요청을 보내고 API 프록시가 대상 서버 도메인 이름을 확인하고 대상 서버와 통신할 수 있는지 여부를 확인합니다.

진단 정보 수집 필요

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

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