Southbound PSC 대상의 Apigee 연결 문제

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

증상

Apigee와 Private Service Connect(PSC)로 연결된 Southbound 대상 서비스 간의 네트워크 연결 문제가 발생합니다.

오류 메시지

Apigee와 대상 서비스 간의 네트워크 연결 문제 또는 TCP 제한 시간 초과 시 503 오류 응답이 표시되고 디버그 세션을 만들 경우 아래와 유사한 오류가 표시됩니다.

{"fault":{"faultstring":"The Service is temporarily unavailable","detail":{"errorcode":"messaging.adaptors.http.flow.ServiceUnavailable","reason":"TARGET_CONNECT_TIMEOUT"}}}

가능한 원인

원인 설명
서비스 연결과 Apigee 인스턴스의 리전이 다름 Apigee 인스턴스 리전과 서비스 연결 리전이 다릅니다.
대상 프로젝트의 PSC 서브넷에 대한 인그레스 방화벽 규칙이 누락됨 대상 프로젝트에서 PSC 서브넷 범위의 IP 주소와 포트를 허용하는 인그레스 방화벽 규칙이 있는지 확인합니다.
대상 프로젝트의 서비스 연결 구성이 잘못됨 대상 프로젝트에서 서비스 연결을 확인합니다.
Apigee의 엔드포인트 연결 상태가 잘못됨 Apigee에서 엔드포인트 연결을 확인합니다.
TargetEndpoint와 ILB에 구성된 포트 불일치 API 프록시의 TargetEndpoint가 대상 프로젝트에서 내부 부하 분산기(ILB)로 노출되는 동일한 포트를 사용하고 있는지 확인합니다.

원인: 서비스 연결과 Apigee 인스턴스의 리전이 서로 다름

진단

  1. 다음 방법 중 하나를 사용하여 Apigee 인스턴스 리전을 확인합니다.

    1. 기본 Apigee UI 사용:
      1. Apigee UI에 로그인합니다.
      2. 관리 > 인스턴스를 클릭합니다.
      3. 인스턴스를 클릭합니다.
      4. 인스턴스 세부정보 창에서 런타임 호스팅 위치를 확인합니다.
    2. Google Cloud 콘솔에서 Apigee UI를 사용합니다.
      1. Google Cloud 콘솔에서 Apigee 인스턴스 페이지로 이동합니다.

        Apigee 인스턴스로 이동

      2. 인스턴스를 클릭합니다.
      3. 인스턴스 세부정보 창에서 런타임 호스팅 위치를 확인합니다.
    3. API 호출을 사용합니다.
      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances"
      

      여기서 ORG_NAME은 마이그레이션의 이름입니다. 예를 들면 example-apigee-support입니다.

      다음과 비슷한 결과가 반환됩니다. 런타임 호스팅 위치는 아래 location에 표시된 값입니다. 예를 들면 asia-northeast1입니다.

      "instances": [
        {
          "name": "asia-northeast1",
          "location": "asia-northeast1",
          "host": "10.117.0.2",
          "port": "443",
          "createdAt": "1628150049760",
          "lastModifiedAt": "1682139265367",
          "diskEncryptionKeyName": "projects/apigee-x-support-apac-05/locations/asia-northeast1/keyRings/phanim-disk-key-1/cryptoKeys/phanim-disk-key-ring-1",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_20",
          "runtimeVersion": "1-9-0-apigee-25",
          "consumerAcceptList": [
            "example-apigee-support",
            "example-neg-project"
          ],
          "serviceAttachment": "projects/xb363132eb41cb643p-tp/regions/asia-northeast1/serviceAttachments/apigee-asia-northeast1-yp9o"
        }
  2. API 호출을 사용하여 엔드포인트 연결 리전을 확인합니다.
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"
    

    각 항목의 의미는 다음과 같습니다.

    • ORG_NAME은 조직의 이름입니다. 예를 들면 example-apigee-support입니다.
    • ENDPOINT_ATTACHMENT_NAME은 엔드포인트 연결의 이름입니다. 예를 들면 example-ea입니다.

    다음과 비슷한 결과가 반환됩니다. 엔드포인트 연결 리전은 아래 location에 표시된 값입니다. 예를 들면 asia-northeast1입니다.

    {
      "name": "organizations/example-apigee-support/endpointAttachments/example-ea",
      "location": "asia-northeast1",
      "host": "7.0.4.2",
      "state": "ACTIVE",
      "connectionState": "ACCEPTED",
      "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend"
    }
    
  3. Cloud 콘솔을 사용하여 서비스 연결 리전을 확인합니다.
    1. Google Cloud 콘솔에서 Private Service Connect 페이지로 이동합니다.

      Private Service Connect로 이동

    2. 위치의 리전 열을 확인합니다.

해결 방법

Apigee 인스턴스, 엔드포인트 연결, 서비스 연결 리전이 동일한지 확인합니다. 예를 들어 asia-northeast1입니다.

제한사항에 설명된 대로 전역 액세스는 지원되지 않습니다. 즉, 서비스 연결과 엔드포인트 연결이 같은 리전에 있어야 합니다. 예를 들어 Apigee 인스턴스가 us-west1 리전에 있으면 us-east2 또는 다른 리전에 있는 인스턴스에 연결할 수 없습니다.

리전이 다른 경우 Apigee와 대상 서비스 간의 연결 문제가 표시됩니다.

원인: 대상 프로젝트에서 PSC 서브넷에 대한 인그레스 방화벽 규칙이 누락됨

진단

PSC 서브넷 범위의 IP 주소가 대상 서비스에 연결하도록 허용하는 대상 프로젝트의 방화벽 규칙을 확인합니다.

  1. Google Cloud 콘솔에서 방화벽 페이지로 이동합니다.

    방화벽으로 이동

  2. VPC 방화벽 규칙 창에서 다음 예시와 같은 규칙이 있는지 확인합니다.
    • 경로: 인그레스
    • 일치 시 작업: 허용
    • 소스 필터: IPv4/IPv6 범위
    • IP 범위: PSC 서브넷을 설명하는 다음 gcloud 명령어로 가져올 수 있는 PSC 서브넷(ipCidrRange)의 IP 주소 범위입니다.
      gcloud compute networks subnets describe PSC_SUBNET_NAME --region=REGION

      각 항목의 의미는 다음과 같습니다.

      • PSC_SUBNET_NAME은 PCS 서브넷 이름입니다. 예를 들면 pscsub입니다.
      • REGION은 위치입니다. 예를 들면 asia-northeast1입니다.

      다음과 비슷한 결과가 반환됩니다.

      creationTimestamp: '2023-04-19T03:33:29.371-07:00'
      fingerprint: 1JPKY66teTg=
      gatewayAddress: 10.10.0.1
      id: '5645967773396008342'
      ipCidrRange: 10.10.0.0/24
      kind: compute#subnetwork
      name: pscsub
      network: https://www.googleapis.com/compute/v1/projects/target-project/global/networks/default
      privateIpGoogleAccess: false
      privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
      purpose: PRIVATE_SERVICE_CONNECT
      ....
    • 프로토콜 및 포트: 대상 서비스 구성에 따라 나열되어 있어야 합니다.
  3. 예를 들면 다음과 같습니다.

해결 방법

방화벽 규칙이 없으면 서비스 연결 만들기 2단계에 설명된 대로 PSC 서브넷을 만듭니다.

원인: 대상 프로젝트의 서비스 연결 구성이 잘못됨

진단

다음 방법 중 하나를 사용하여 서비스 연결 리전을 확인합니다.

  1. Cloud 콘솔 사용:
    1. Google Cloud 콘솔에서 Private Service Connect 페이지로 이동합니다.

      Private Service Connect로 이동

    2. 게시된 서비스를 클릭합니다.
    3. 서비스를 클릭합니다.
    4. 위치의 리전 행을 확인합니다.

  2. gcloud command 사용
      gcloud compute service-attachments describe SERVICE_ATTACHMENT --region=REGION

    각 항목의 의미는 다음과 같습니다.

    • SERVICE_ATTACHMENT는 서비스 연결 이름입니다. 예를 들면 gkebackend입니다.
    • REGION은 위치입니다. 예를 들면 asia-northeast1입니다.

    다음과 비슷한 결과가 반환됩니다.

    connectedEndpoints:
    - endpoint: https://www.googleapis.com/compute/v1/projects/xb363132eb41cb643p-tp/regions/asia-northeast1/forwardingRules/example-ea
      pscConnectionId: '6816512648152066'
      status: ACCEPTED
    connectionPreference: ACCEPT_AUTOMATIC
    creationTimestamp: '2023-04-19T05:09:09.941-07:00'
    description: ''
    enableProxyProtocol: false
    fingerprint: 0BZDAZ3zDCs=
    id: '4503680255626733322'
    kind: compute#serviceAttachment
    name: gkebackend
    natSubnets:
    - https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/subnetworks/pscsub
    pscServiceAttachmentId:
      high: '21570167574103266'
      low: '4503680255626733322'
    region: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1
    selfLink: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend
    targetService: https://www.googleapis.com/compute/v1/projects/target-project/regions/asia-northeast1/forwardingRules/k8s2-tcp-b65prv8v-default-ilb-svc-tv2s6klz

해결 방법

  1. connectedEndpoints.endpoint 값이 Apigee의 테넌트 프로젝트를 참조하고 상태가 ACCEPTED인지 확인합니다. Apigee Organizations API를 사용하여 테넌트 프로젝트를 찾을 수 있습니다.
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME"

    여기서 ORG_NAME은 마이그레이션의 이름입니다. 예를 들면 example-apigee-support입니다.

    다음과 비슷한 결과가 반환됩니다. ID는 apigeeProjectId라는 필드에 있습니다. 예를 들면 xb363132eb41cb643p-tp입니다.

    {
      "name": "example-apigee-support",
      "createdAt": "1628148440954",
      "lastModifiedAt": "1650563608527",
      "environments": [
      "dev"
      ],
      "properties": {
        "property": [
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          },
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          }
        ]
      },
        "analyticsRegion": "asia-northeast1",
        "authorizedNetwork": "default",
        "runtimeType": "CLOUD",
        "subscriptionType": "PAID",
        "caCertificate": "CERTIFICATE_NUMBER",
        "runtimeDatabaseEncryptionKeyName": "projects/example-apigee-support/locations/asia-northeast1/keyRings/phanim-key-ring-1/cryptoKeys/phanim-app-key-1",
        "projectId": "example-apigee-support",
        "state": "ACTIVE",
        "billingType": "SUBSCRIPTION",
        "addonsConfig": {
        "advancedApiOpsConfig": {},
        "integrationConfig": {},
        "monetizationConfig": {}
        },
    "apigeeProjectId": "xb363132eb41cb643p-tp"
    }
    
  2. Southbound 네트워킹 패턴, 연결 확인 및 관리에 설명된 것처럼 서비스 연결엔드포인트 연결과 연결되어 있어야 합니다. 1단계의 UI에서 다음을 확인합니다.
    1. 서브넷 행은 PSC 서브넷을 참조합니다. 예를 들면 pscsub입니다.
    2. 대상 행은 대상 백엔드에 대해 올바른 내부 부하 분산기를 참조합니다.

원인: Apigee의 엔드포인트 연결 상태가 잘못됨

진단

API 호출을 사용하여 Apigee의 엔드포인트 연결을 확인합니다.

  curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/endpointAttachments/ENDPOINT_ATTACHMENT_NAME"

각 항목의 의미는 다음과 같습니다.

  • ORG_NAME은 조직의 이름입니다. 예를 들면 example-apigee-support입니다.
  • ENDPOINT_ATTACHMENT_NAME은 엔드포인트 연결의 이름입니다. 예를 들면 example-ea입니다.

다음과 비슷한 결과가 반환됩니다.

  {
    "name": "organizations/example-apigee-support/endpointAttachments/example-ea",
    "location": "asia-northeast1",
    "host": "7.0.4.2",
    "state": "ACTIVE",
    "connectionState": "ACCEPTED",
    "serviceAttachment": "projects/target-project/regions/asia-northeast1/serviceAttachments/gkebackend"
  }

해결 방법

다음을 확인합니다.

  • stateACTIVE입니다.
  • connectionStateACCEPTED입니다.
  • serviceAttachment는 올바른 대상 프로젝트 및 서비스 연결 이름을 나타냅니다.

원인: TargetEndpoint 및 ILB에 구성된 포트 불일치

진단

  1. 대상 프로젝트에서 Cloud 콘솔을 사용하여 전달 규칙이 노출하는 포트를 찾습니다.
    1. Google Cloud 콘솔에서 Private Service Connect 페이지로 이동합니다.

      Private Service Connect로 이동

    2. 게시된 서비스를 클릭합니다.
    3. 서비스를 클릭합니다. 다음 예시와 같이 포트 80이 노출됩니다.

해결 방법

동일한 포트 80이 API 프록시의 TargetEndpoint에 있는 포트인지 확인합니다.

이를 확인하려면 API 프록시로 이동하여 TargetEndpoint URL을 확인합니다.

  1. 기본 Apigee UI 사용:
    1. Apigee UI에 로그인합니다.
    2. 개발 > API 프록시를 클릭합니다.
    3. 프록시를 클릭합니다.
    4. 개발을 클릭합니다.
    5. XML 창에서 다음 사항을 확인하세요.
      <HTTPTargetConnection>
        <URL>http://7.0.4.2:80</URL>
      </HTTPTargetConnection>
  2. Google Cloud 콘솔에서 Apigee UI를 사용합니다.
    1. Google Cloud 콘솔에서 Apigee 페이지로 이동합니다.

      Apigee로 이동

    2. 프록시 개발 영역에서 API 프록시를 클릭합니다.
    3. 프록시를 클릭합니다.
    4. 개발을 클릭합니다.
    5. XML 창에서 다음 사항을 확인하세요.
        <HTTPTargetConnection>
          <URL>http://7.0.4.2:80</URL>
        </HTTPTargetConnection>

진단 정보 수집 필요

위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Apigee 지원팀에 연락합니다.

  • Apigee 조직
  • 문제가 발생한 환경 및 API 프록시
  • 다운로드한 디버그 세션(위 정보를 모두 제공함)
  • 사용 중인 엔드포인트 연결
  • 대상 프로젝트 및 서비스 연결