<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
다음을 통해 호출 시 HTTP 403 Forbidden
오류와 함께 Envoy 프록시가 실패함
Envoy용 Apigee 어댑터
오류 메시지
다음과 같은 오류 메시지가 표시됩니다.
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 03 Nov 2020 00:20:10 GMT server: istio-envoy
가능한 원인
다음 조건 중 하나가 발생하면 Envoy 프록시에서 HTTP 403
오류가 발생합니다.
발생:
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
API 제품이 사용 설정되지 않음 | API 제품이 특정 환경에 사용 설정되지 않았습니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
API 제품에 대상 서비스 URI 경로가 누락되었습니다. | 대상 서비스의 URI 경로가 누락되었거나 API의 API 제품에 추가되지 않았습니다. 리소스를 배포합니다 | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
API 제품에 호스트 이름 누락 | 클라이언트 API 요청에 제공된 호스트 이름이 Apigee의 API 제품에 누락되었습니다. 원격 서비스 대상을 나타냅니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
요청 헤더에 API 키가 누락됨 | API 키는 x-api-key HTTP 헤더로 전달되지 않습니다. |
에지 퍼블릭 및 프라이빗 클라우드 사용자 |
잘못된 API 키 | 요청의 일부로 전달된 API 키가 잘못되었습니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
Envoy용 Apigee 어댑터는 원격 서비스 API 프록시와 통신 | Envoy용 Apigee 어댑터가 원격 서비스 API 프록시와 통신할 수 없습니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
Envoy 프록시가 통신할 수 없음 Envoy용 Apigee 어댑터 사용 | Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없습니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
시작하기 전에
- 다음에서
403 Forbidden
응답 메시지가 수신되고 있는지 확인합니다. Envoy 프록시 예:curl -i -H "x-api-key: $API_KEY" http://httpbin:8080/echo HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 12 Jan 2021 08:18:08 GMT server: envoy RBAC: access denied
디버그 로그를 사용 설정합니다.
자세한 내용을 캡처하려면 Envoy용 Apigee 어댑터에서 디버그 로그를 사용 설정했는지 확인하세요. 표시합니다. 그렇지 않은 경우 Envoy용 Apigee 어댑터를 중지했다가 다시 시작하여 디버그 로그를 사용 설정합니다. 사용하여 다음 명령어를 실행합니다.
apigee-remote-service-envoy -c config.yaml -l debug
원인: API 제품이 사용 설정되지 않았습니다.
이 오류는 Envoy 프록시에서 사용하는 특정 API 제품이 API 호출이 호출되는 특정 환경에 적용됩니다
진단
다음 단계에 따라 문제를 진단합니다.
- 위의 2단계에서 설명한 대로 디버그 로그를 사용 설정합니다.
- Envoy 로그용 Apigee 어댑터를 확인하고 다음 메시지가 표시되는지 확인합니다.
섹션
Authorizing request
아래에서 다음을 수행합니다.product: API_PRODUCT_NAME not found
샘플 디버그 로그 출력:
2021-01-12T08:18:08.124Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:18:08.124Z DEBUG auth/verify_api_key.go:106 fetchToken fetching: 7mQIG... 2021-01-12T08:18:08.589Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:18:08.589Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a0600), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746037188, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:18:08.589Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo target: httpbin:8080 - product: ENVOY-PRODUCT-1 not found
위의 예는 다음에서 API 제품
ENVOY-PRODUCT-1
을 찾을 수 없음을 보여줍니다. Envoy용 Apigee 어댑터Envoy 로깅용 Apigee 어댑터에 대한 자세한 내용은 다음을 참조하세요. 로깅.
- API 요청을 승인하는 동안 이 메시지가 나타나면 특정 API 제품이 현재 실행 중인 특정 환경에 대해 사용 설정되지 않았음을 API 호출하기
- 이를 확인하려면 다음 단계를 따르세요.
<ph type="x-smartling-placeholder">
- </ph>
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 사용 중인 특정 API 제품을 클릭합니다. Envoy용 Apigee 어댑터를 구성하는 데 사용됩니다.
- API 요청을 하는 특정 환경이 API 제품에서 사용 설정되어 있습니다.
- API 제품에서 특정 환경이 사용 설정되지 않은 것이 원인입니다. 을 참조하세요.
- 특정 환경이 이미 사용 설정되어 있으면 <ph type="x-smartling-placeholder"></ph> 원인: API 제품에 대상 서비스 URI 경로가 없습니다.
해상도
API 제품에서 특정 환경이 사용 설정되지 않은 경우 다음 단계를 수행하여 문제 해결:
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 사용한 특정 API 제품을 클릭합니다. Envoy용 Apigee 어댑터 구성
- API 제품 > 제품 이름 페이지에서 수정을 클릭합니다.
- 다음을 선택하여 API 요청을 할 특정 환경을 사용 설정합니다. 체크박스를 선택합니다.
- 저장을 클릭합니다.
원인: API 제품에 대상 서비스 URI 경로가 누락되었습니다.
이 오류는 대상의 URI 경로가 사용된 특정 API 제품에 지정되지 않은 경우 발생합니다. Envoy Proxy에서 실행합니다
진단
다음 단계에 따라 문제를 진단합니다.
- 위의 2단계에서 설명한 대로 디버그 로그를 사용 설정합니다.
-
Envoy 로그용 Apigee 어댑터를 확인하고 다음 메시지가 섹션 아래에 특정 대상과 연결된 특정 API 제품에 대해 표시됩니다.
Authorizing request
:no path: REQUEST_URI_PATH
샘플 디버그 로그 출력:
2021-01-12T08:09:02.604Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:09:02.605Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:09:02.605Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:09:02.605Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo1 target: httpbin:8080 - product: ENVOY-PRODUCT-1 no path: /echo1 2021-01-12T08:09:02.605Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
샘플 출력은 다음 메시지를 보여줍니다.
no path: /echo1
API 제품에서 경로
/echo1
을 찾을 수 없음을 나타냅니다.ENVOY-PRODUCT-1
no path: REQUEST_URI_PATH
메시지가 표시되면 Envoy 디버그 로그용 Apigee 어댑터가 문제의 원인입니다. 그렇지 않은 경우 다음으로 이동하세요. 원인: API 제품에 호스트 이름이 누락되었습니다.
해상도
특정 요청 URI가 특정 대상의 API 제품에 추가되지 않으면 다음 단계를 따라 문제를 해결하세요.
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 사용 중인 특정 API 제품을 클릭합니다. Envoy용 Apigee 어댑터를 구성하는 데 사용됩니다.
- API 제품 > 제품 이름 페이지에서 수정을 클릭합니다.
- API 리소스 창에서 API 제품에 API 요청 URI를 추가합니다.
- Envoy 로그용 Apigee 어댑터를 모니터링하고 Envoy용 Apigee 어댑터가 나올 때까지 기다립니다. 업데이트된 API 제품을 가져옵니다. 그런 다음 다른 API 요청을 전송하여 수정 내용을 확인합니다.
원인: API 제품에 호스트 이름 누락
이 오류는 대상 호스트 이름과 포트 조합이 지정된 Envoy 프록시에서 사용하는 API 제품입니다.
진단
다음 단계에 따라 문제를 진단합니다.
- 위의 2단계에서 설명한 대로 디버그 로그를 사용 설정합니다.
Envoy 로그용 Apigee 어댑터를 확인하고 다음 메시지가 섹션 아래에 특정 대상과 연결된 특정 API 제품에 대해 표시됩니다.
Authorizing request
:no targets: HOSTNAME:PORT
샘플 디버그 로그 출력:
2021-01-12T08:12:06.019Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:12:06.019Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:12:06.019Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:12:06.019Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo target: httpbin1:8080 - product: ENVOY-PRODUCT-1 no targets: httpbin1:8080 2021-01-12T08:12:06.020Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
위의 예는 호스트 이름과 포트 조합
httpbin1:8080
을 보여줍니다. API 제품ENVOY-PRODUCT-1
에서 을(를) 찾을 수 없습니다.- 요청을 승인하는 동안 Envoy 로그용 Apigee 어댑터에
no targets: HOSTNAME:PORT
메시지가 있는 항목이 포함된 경우 문제를 일으킬 수 있습니다 그렇지 않은 경우 다음으로 이동하세요. 원인: 요청 헤더에 API 키가 없습니다.
해상도
대상 호스트 이름과 포트 조합이 API 제품에 추가되지 않은 경우 다음 단계에 따라 문제를 해결하세요.
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 사용 중인 특정 API 제품을 클릭합니다. Envoy용 Apigee 어댑터를 구성하는 데 사용됩니다.
- API 제품 > 제품 이름 페이지에서 수정을 클릭합니다.
Apigee 원격 서비스 대상 창에서 대상 호스트 이름을 추가합니다. 포트를 선택하고 저장을 클릭합니다.
UI에 Apigee 원격 서비스 대상 섹션이 표시되지 않으면 다음 명령어로 API 제품에 맞춤 속성을 추가합니다. 이름을
apigee-remote-service-targets
로 지정하고 Edge API를 사용한 HOSTNAME:PORT 값 예를 들면 다음과 같습니다.curl https://api.enterprise.apigee.com/v1/organizations/$ORG/apiproducts/$ENVOY_PRODUCT \ -X GET \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type:application/json" \ -d \ { "apiResources": [ "/echo", "/verifyApiKey" ], "approvalType": "auto", "attributes": [ { "name": "access", "value": "public" }, { "name": "apigee-remote-service-targets", "value": "localhost:8080" } ], "createdAt": 1610435989556, "createdBy": "---masked---", "description": "", "displayName": "ENVOY-PRODUCT-1", "environments": [ "test" ], "lastModifiedAt": 1612234134060, "lastModifiedBy": "---masked---", "name": "ENVOY-PRODUCT-1", "proxies": [ "remote-service" ], "scopes": [] }
<ph type="x-smartling-placeholder">- 위의 작업이 완료되면 Envoy 로그용 Apigee 어댑터를 모니터링하고 Envoy용 Apigee 어댑터가 업데이트된 API 제품을 가져옵니다. 그런 다음 다른 API를 전송합니다. 수정 확인을 요청합니다
원인: 요청 헤더에 API 키 누락
이 오류는 API 키가 요청 헤더의 일부로 전달되지 않는 경우에 발생합니다.
진단
다음 단계에 따라 문제를 진단합니다.
- 위의 2단계에서 설명한 대로 디버그 로그를 사용 설정합니다.
- Envoy 로그용 Apigee 어댑터를 확인하고
Authenticate error
아래의[missing authentication]
메시지 섹션으로 이동합니다.샘플 디버그 로그 출력:
2021-01-12T08:20:31.461Z DEBUG auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil) 2021-01-12T08:20:31.461Z DEBUG auth/auth.go:159 Authenticate error: &auth.Context{Context:(*server.Handler) (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication] 2021-01-12T08:20:31.461Z DEBUG server/authorization.go:205 sending denied: UNAUTHENTICATED 2021-01-12T08:20:32.448Z DEBUG server/header_context.go:68 No context header x-apigee-api, using target header : :authority
위의 샘플 출력에는
[missing authentication]
메시지가 있습니다. 이 메시지는 API 키가 요청 헤더에 사용하세요 - Envoy 로그용 Apigee 어댑터의 섹션 아래에
[missing authentication]
라는 메시지가 있는 로그 항목이 포함된 경우Authenticate error
입니다. 문제의 원인을 자세히 알아보세요 그렇지 않은 경우 다음으로 이동하세요. 원인: API 키가 잘못되었습니다.
해상도
[missing authentication]
오류가 표시된 경우
Envoy 로그용 Apigee 어댑터를 사용하려면 다음 단계를 수행하여 문제를 해결하세요.
- 클라이언트가 HTTP 헤더
x-api-key
을 사용하여 API 키를 전송했는지 확인합니다. API 요청에 대응합니다 그렇지 않은 경우 클라이언트에게 HTTP 헤더의 API 키를 전송하도록 요청합니다.x-api-key
- Envoy 구성 파일용 Apigee 어댑터 및 기본 API 키 확인
예를 들어 다음과 같이 헤더 이름
x-api-key
이(가) 변경되었습니다.apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | global: tls: ... tenant: ... auth: target_header: api-key
위 예에서 기본 API 키 헤더 이름이
api-key
이 경우 API 키를 헤더의 일부로 전달해야 합니다.api-key
- 기본 API 키 헤더 이름이 변경된 경우 업데이트된 API 키 헤더 이름을 지정하고 다른 API 요청을 보내 문제가 해결되는지 확인합니다.
원인: 잘못된 API 키
이 오류는 요청 헤더의 일부로 잘못된 API 키가 전달되었을 때 발생합니다.
진단
다음 단계에 따라 문제를 진단합니다.
- 위의 2단계에서 설명한 대로 디버그 로그를 사용 설정합니다.
- Envoy 로그용 Apigee 어댑터를 확인하고 메시지가 표시되는지 확인합니다.
[permission denied]
Authenticate error
섹션 아래에 있습니다. 이는 일반적으로fetchToken fetching: API_KEY
메시지샘플 디버그 로그 출력:
2021-01-12T05:01:07.198Z DEBUG auth/auth.go:98 Authenticate: key: 123, claims: map[string]interface {}(nil) 2021-01-12T05:01:07.198Z DEBUG auth/verify_api_key.go:106 fetchToken fetching: API_KEY 2021-01-12T05:01:09.102Z DEBUG server/header_context.go:68 No context header x-apigee-api, using target header: :authority 2021-01-12T05:01:09.831Z DEBUG auth/auth.go:159 Authenticate error: &auth.Context{Context:(*server.Handler)(0xc0001640c0), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [permission denied] 2021-01-12T05:01:09.832Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
이 예에서 API 요청에 전송된 API 키가 잘못되었습니다.
- Envoy 로그용 Apigee 어댑터의
Authenticate error
섹션 아래에[permission denied]
가 있는 로그 항목이 있으면 다음을 나타냅니다. 요청의 일부로 전달된 API 키가 유효하지 않으며 이것이 문제의 원인입니다. 그렇지 않은 경우 다음으로 이동하세요. 원인: Envoy용 Apigee 어댑터 원격 서비스 API 프록시와 통신할 수 없습니다.
해상도
Envoy 로그용 Apigee 어댑터의 Authenticate
error
섹션에 [permission denied]
메시지가 표시되면 다음 단계를 수행합니다.
다음 단계를 따르세요.
- API 요청에서 전송된 API 키와 API 제품에 연결된 애플리케이션입니다.
- 클라이언트에서 사용하는 API 키가 유효하지 않은 경우 유효한 API 키를 보내도록 클라이언트에 요청하세요.
- 클라이언트에서 사용하는 API 키가 유효하고 HTTP가 계속 표시되는 경우
403
오류가 발생했습니다. 자세히 조사하려면 Apigee Edge 지원팀에 문의하세요.
원인: Envoy용 Apigee 어댑터가 원격 서비스 API 프록시와 통신할 수 없습니다.
이 오류는 Envoy용 Apigee 어댑터가 원격 애플리케이션과 통신할 수 없는 경우에 발생합니다. 구성된 원격 서비스 호스트가 잘못된 경우 서비스 API 프록시
진단
다음 단계에 따라 문제를 진단합니다.
- 위의 2단계에서 설명한 대로 디버그 로그를 사용 설정합니다.
-
Envoy 로그용 Apigee 어댑터를 확인하고 다음 메시지가 표시되는지 확인합니다.
Error retrieving products: REQUEST_URI: no such host
샘플 디버그 로그 출력:
2021-01-12T08:29:06.499Z DEBUG product/manager.go:188 retrieving products from: https://foo/remote-service/products 2021-01-12T08:29:06.505Z ERROR product/manager.go:164 Error retrieving products: GET "https://foo/remote-service/pro ducts": dial tcp: lookup foo on 169.254.169.254:53: no such host github.com/apigee/apigee-remote-service-golib/product.(*manager).start.func1 /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/product/manager.go:164 github.com/apigee/apigee-remote-service-golib/util.(*Looper).Run /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:87 github.com/apigee/apigee-remote-service-golib/util.(*Looper).Start.func1 /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:59
이 예시에서 Envoy용 Apigee 어댑터는 원격 서버 API 프록시에 제공된 호스트 이름이기 때문입니다. URL이 유효하지 않습니다(
no such host
오류에서 표시). - Envoy 로그용 Apigee 어댑터에
no such host
메시지가 있는 로그 항목이 포함된 경우 이로 인해 문제가 발생한 것입니다. 그렇지 않은 경우 다음으로 이동하세요. <ph type="x-smartling-placeholder"></ph> 원인: Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없습니다.
해상도
Envoy 로그용 Apigee 어댑터에 위의 오류가 표시되면 다음을 수행합니다. 문제 해결 단계:
Envoy 구성 파일용 Apigee 어댑터를 확인하고 지정된 원격 서비스 API 프록시 URL이 올바릅니다.
그렇지 않은 경우 Envoy용 Apigee 어댑터를 중지하고 Envoy용 Apigee 어댑터를 시작한 다음 다른 API 요청을 보내면 문제 해결 여부를 확인합니다
샘플 구성:
apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: internal_api: https://istioservices.apigee.net/edgemicro remote_service_api: https://ORG-ENV.apigee.net/remote-service org_name: ORG env_name: ENV key: KEY secret: SECRET
remote-service
API 프록시가 관련 Edge에 배포되었는지 확인 환경입니다 그렇지 않은 경우 관련 Edge에remote-service
API 프록시를 배포합니다. 다시 시도해 보세요- Envoy용 Apigee 어댑터와
remote-service
API 프록시 엔드포인트입니다. 네트워크에 연결되어 있는 경우 네트워킹 팀에 문의하여 문제를 해결하세요.
원인: Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없습니다.
진단
다음 단계에 따라 문제를 진단합니다.
Envoy에서 디버그 로그를 사용 설정했는지 확인합니다. 그렇지 않으면 Envoy를 중지하고 다시 시작합니다. 디버그 로그 사용 설정 그런 다음 다른 API 요청을 보냅니다.
독립형 배포:
envoy -c envoy-config.yaml -l debug
Kubernetes/Istio 기반 배포:
kubectl -n=istio-system get pods kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
- Envoy 로그용 Apigee 어댑터를 확인하고 다음 메시지가 있는 로그 항목이 있는지 확인합니다.
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
이어서 다음과 같이 진행됩니다.
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
샘플 디버그 로그 출력:
[2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C4] connecting to 127.0.0.1:5000 [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C4] connection in progress [2021-03-23 05:44:41.868][1303661][debug][http2] [external/envoy/source/common/http/http2/codec_impl.cc:1173] [C4] updating connection-level initial window size to 268435456 [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C4] delayed connection error: 111 [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C4] closing socket: 0 [2021-03-23 05:44:41.869][1303661][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C4] disconnect. resetting 0 pending requests [2021-03-23 05:44:41.869][1303661][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C4] client disconnected, failure reason: [2021-03-23 05:44:41.869][1303661][debug][router] [external/envoy/source/common/router/router.cc:1031] [C0][S6149963213555558594] upstream reset: reset reason: connection failure, transport failure reason: [2021-03-23 05:44:41.869][1303661][debug][http] [external/envoy/source/common/http/async_client_impl.cc:100] async http request response headers (end_stream=true): ':status', '200' 'content-type', 'application/grpc' 'grpc-status', '14' 'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection failure'
위의 예는 Envoy가
connection failure
사유로 인해 Envoy용 Apigee 어댑터입니다. connection failure
은 여러 가지 이유로 발생할 수 있습니다. 각 시나리오를 살펴보겠습니다.
시나리오 #1: 어댑터 프로세스가 실행되지 않음
Envoy용 Apigee 어댑터 프로세스가 실행되고 있지 않으면 이 오류가 발생할 수 있습니다.
- 다음을 실행하여 Envoy용 Apigee 어댑터 프로세스가 실행 중인지 확인합니다.
명령어와 함께 사용하면 됩니다 Envoy용 Apigee 어댑터 프로세스가 실행 중인 경우의 결과는 다음과 같습니다.
명령에 나열됩니다.
ps -ef | grep apigee-remote-service-envoy
- 실행되고 있지 않다면 문제의 원인입니다.
해상도
- Envoy용 Apigee 어댑터 프로세스가 실행되고 있지 않으면 Envoy용 Apigee 어댑터
- API를 다시 요청하고 문제가 해결되었는지 확인합니다.
시나리오 #2: 어댑터 프로세스가 특정 포트에서 수신 대기하지 않음
Envoy용 Apigee 어댑터 프로세스가 특정 포트에서 리슨하지 않는 경우 이 오류가 발생할 수 있습니다.
Envoy용 Apigee 어댑터 프로세스가 실행 중인 경우 수신 대기 중인 소켓이 있는지 확인합니다.
포트 5000: APIGEE_ENVOY_ADAPTER_HOST:5000
Cloud Shell에서
netstat
명령어를 사용하여 다음을 확인합니다.
sudo netstat -lnp | grep 5000
샘플 출력:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
포트 5000에서 수신 대기하는 소켓이 없는 경우 이 문제가 발생한 것일 수 있습니다.
해상도
- Envoy용 Apigee 어댑터를 중지했다가 다시 시작합니다.
- API를 다시 요청하고 문제가 해결되었는지 확인합니다.
시나리오 #3: Envoy와 Envoy용 Apigee 어댑터 간의 네트워크 연결
- Envoy와 Envoy용 Apigee 어댑터 간의 네트워크 연결을 확인합니다.
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
telnet이 Envoy용 Apigee 어댑터에 TCP를 연결할 수 있는지 여부 다음과 비슷한 출력이 표시됩니다.
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- telnet 사용 시
Connection timed out
오류가 발생하면 Envoy와 Envoy용 Apigee 어댑터 간에 네트워크 연결 문제가 있습니다.
해상도
Envoy와 Envoy용 Apigee 어댑터 간에 네트워크 연결 문제가 있는 경우 네트워킹 팀을 참여시켜 문제를 해결하십시오.
문제가 계속되면 진단 정보를 수집해야 합니다.
진단 정보 수집 필요
위의 안내를 따른 후에도 문제가 지속되면 다음 진단 자료를 수집하세요. 다음 Apigee Edge 지원팀에 문의하세요.
-
사용된 Apigee 제품:
예: Apigee Edge Cloud, Apigee OPDK, Apigee Hybrid, Apigee X
- Apigee 조직 및 환경
Edge API를 사용하여 읽은 API 제품 정의입니다.
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
참조: Apigee Edge API
다음을 사용하여
remote-service
API 프록시에서 트레이스 세션을 시작합니다. Apigee Edge UI입니다. 이 문제를 재현하고 추적 세션 XML 파일을 공유하세요.Envoy 로그용 Apigee 어댑터 (지정된 기간과 관련된 전체 로그)
독립형 배포:
# by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
Kubernetes/Istio 기반 배포:
kubectl -n=apigee get pods kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
curl
명령어를 사용하여 Envoy 프록시에 전송된 API 요청 (curl
명령어의 전체 출력):curl -v ENVOY_PROXY_ENDPOINT
curl
명령어를 사용하여 대상 서비스로 전송되는 API 요청 (전체curl
명령어의 출력)curl -v TARGET_SERVICE_ENDPOINT