Apigee 및 Apigee 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 인스턴스의 리전이 서로 다름
진단
-
다음 방법 중 하나를 사용하여 Apigee 인스턴스 리전을 확인합니다.
- 기본 Apigee UI 사용:
- Apigee UI에 로그인합니다.
- 관리 > 인스턴스를 클릭합니다.
- 인스턴스를 클릭합니다.
- 인스턴스 세부정보 창에서 런타임 호스팅 위치를 확인합니다.
- Google Cloud 콘솔에서 Apigee UI를 사용합니다.
-
Google Cloud 콘솔에서 Apigee 인스턴스 페이지로 이동합니다.
- 인스턴스를 클릭합니다.
- 인스턴스 세부정보 창에서 런타임 호스팅 위치를 확인합니다.
-
-
API 호출을 사용합니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "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" }
- 기본 Apigee UI 사용:
-
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" }
- ORG_NAME은 조직의 이름입니다.
예를 들면
-
Cloud 콘솔을 사용하여 서비스 연결 리전을 확인합니다.
-
Google Cloud 콘솔에서 Private Service Connect 페이지로 이동합니다.
- 위치의 리전 열을 확인합니다.
-
해결 방법
Apigee 인스턴스, 엔드포인트 연결, 서비스 연결 리전이 동일한지 확인합니다. 예를 들어 asia-northeast1
입니다.
제한사항의 설명대로 전역 액세스는 지원되지 않습니다. 즉, 서비스 연결과 엔드포인트 연결이 같은 리전에 있어야 합니다. 예를 들어 Apigee 인스턴스가 us-west1
리전에 있으면 us-east2
또는 다른 리전에 있는 인스턴스에 연결할 수 없습니다.
리전이 다르면 Apigee와 대상 서비스 사이에 연결 문제가 발생합니다.
원인: 대상 프로젝트의 PSC 서브넷에 대한 인그레스 방화벽 규칙이 누락됨
진단
대상 프로젝트에서 PSC 서브넷 범위의 IP addres가 대상 서비스에 연결하도록 허용하는 방화벽 규칙을 확인합니다.
-
Google Cloud 콘솔에서 방화벽 페이지로 이동합니다.
-
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 ....
-
PSC_SUBNET_NAME은 PCS 서브넷 이름입니다.
예를 들면
- 프로토콜 및 포트: 대상 서비스 구성에 따라 나열되어야 합니다.
예를 들면 다음과 같습니다.
해결 방법
방화벽 규칙이 없으면 서비스 연결 만들기 2단계에 설명된 대로 PSC 서브넷을 만듭니다.
원인: 대상 프로젝트의 서비스 연결 구성이 잘못됨
진단
다음 방법 중 하나를 사용하여 서비스 연결 리전을 확인합니다.
- Cloud 콘솔 사용:
-
Google Cloud 콘솔에서 Private Service Connect 페이지로 이동합니다.
- 게시된 서비스를 클릭합니다.
- 서비스를 클릭합니다.
- 위치의 리전 행을 확인합니다.
-
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
-
SERVICE_ATTACHMENT는 서비스 연결 이름입니다.
예를 들면
해결 방법
-
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" }
-
Southbound 네트워킹 패턴, 연결 확인 및 관리에 설명된 것처럼 서비스 연결이 엔드포인트 연결과 연결되어 있어야 합니다.
1단계의 UI에서 다음을 확인합니다.
-
서브넷 행은 PSC 서브넷을 참조합니다. 예를 들면
pscsub
입니다. - 대상 행은 대상 백엔드에 대해 올바른 내부 부하 분산기를 참조합니다.
-
서브넷 행은 PSC 서브넷을 참조합니다. 예를 들면
원인: 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" }
해결 방법
다음을 확인합니다.
state
은ACTIVE
입니다.connectionState
은ACCEPTED
입니다.-
serviceAttachment
는 올바른 대상 프로젝트 및 서비스 연결 이름을 나타냅니다.
원인: TargetEndpoint 및 ILB에 구성된 포트 불일치
진단
- 대상 프로젝트에서 Cloud 콘솔을 사용하여 전달 규칙이 노출하는 포트를 찾습니다.
-
Google Cloud 콘솔에서 Private Service Connect 페이지로 이동합니다.
- 게시된 서비스를 클릭합니다.
- 서비스를 클릭합니다. 다음 예시와 같이 포트 80이 노출됩니다.
-
해결 방법
동일한 포트 80이 API 프록시의 TargetEndpoint
에 있는 포트인지 확인합니다.
이를 확인하려면 API 프록시로 이동하고 TargetEndpoint
URL을 확인합니다.
- 기본 Apigee UI 사용:
- Apigee UI에 로그인합니다.
- 개발 > API 프록시를 클릭합니다.
- 프록시를 클릭합니다.
- 개발을 클릭합니다.
- XML 창에서 다음을 확인하세요.
<HTTPTargetConnection> <URL>http://7.0.4.2:80</URL> </HTTPTargetConnection>
- Google Cloud 콘솔에서 Apigee UI를 사용합니다.
-
Google Cloud 콘솔에서 Apigee 페이지로 이동합니다.
- 프록시 개발 영역에서 API 프록시를 클릭합니다.
- 프록시를 클릭합니다.
- 개발을 클릭합니다.
- XML 창에서 다음을 확인하세요.
<HTTPTargetConnection> <URL>http://7.0.4.2:80</URL> </HTTPTargetConnection>
-
진단 정보 수집 필요
위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Google Cloud Customer Care에 문의하세요.
- Apigee 조직
- 문제가 발생한 환경 및 API 프록시
- 다운로드한 디버그 세션(위 정보를 모두 제공함)
- 사용 중인 엔드포인트 연결
- 대상 프로젝트 및 서비스 연결