현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
증상
Envoy용 Apigee 어댑터를 통해 호출할 때 Envoy 프록시가 HTTP 403 Forbidden
오류와 함께 실패합니다.
오류 메시지
다음과 같은 오류 메시지가 표시됩니다.
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 제품이 특정 환경에 사용 설정되지 않았습니다. | Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
API 제품에 대상 서비스 URI 경로가 없습니다. | 대상 서비스의 URI 경로가 누락되었거나 API 리소스의 API 제품에 추가되지 않았습니다. | Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
API 제품에 호스트 이름 누락 | 클라이언트 API 요청에 지정된 호스트 이름이 Apigee 원격 서비스 대상의 API 제품에 없습니다. | Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
요청 헤더에 API 키 누락 | API 키는 x-api-key HTTP 헤더에 전달되지 않습니다. |
Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
잘못된 API 키 | 요청의 일부로 전달된 API 키가 잘못되었습니다. | Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
Envoy용 Apigee 어댑터가 원격 서비스 API 프록시와 통신할 수 없음 | Envoy용 Apigee 어댑터가 원격 서비스 API 프록시와 통신할 수 없습니다. | Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없음 | Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없습니다. | Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
시작하기 전에
- Envoy 프록시에서
403 Forbidden
응답 메시지를 받는지 확인합니다. 예: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 어댑터에 대한 자세한 내용은 Logging을 참조하세요.
- API 요청을 승인하는 동안 이 메시지가 표시되면 API를 호출하는 특정 환경에 해당 API 제품이 사용 설정되지 않았음을 나타냅니다.
- 이를 확인하려면 다음 단계를 따르세요.
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 Envoy용 Apigee 어댑터를 구성하는 데 사용한 특정 API 제품을 클릭합니다.
- API 요청을 하는 특정 환경이 API 제품에서 사용 설정되어 있는지 확인합니다.
- API 제품에 특정 환경이 사용 설정되지 않은 경우 이로 인해 이 문제가 발생합니다.
- 특정 환경이 이미 사용 설정된 경우 원인: API 제품에 대상 서비스 URI 경로 누락으로 이동하세요.
해상도
API 제품에 특정 환경이 사용 설정되지 않은 경우 다음 단계를 수행하여 문제를 해결하세요.
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 Envoy용 Apigee 어댑터를 구성하는 데 사용한 특정 API 제품을 클릭합니다.
- API 제품 > 제품 이름 페이지에서 수정을 클릭합니다.
- 관련 환경 체크박스를 선택하여 API를 요청할 특정 환경을 사용 설정합니다.
- 저장을 클릭합니다.
원인: API 제품에 대상 서비스 URI 경로가 누락되었습니다.
이 오류는 대상의 URI 경로가 Envoy 프록시에서 사용하는 특정 API 제품에 지정되지 않은 경우에 발생합니다.
진단
문제를 진단하려면 다음 단계를 따르세요.
- 위의 2단계에 설명된 대로 디버그 로그를 사용 설정합니다.
-
Envoy 로그용 Apigee 어댑터를 확인하고
Authorizing request
섹션에서 특정 대상에 연결된 특정 API 제품에 대해 다음 메시지가 표시되는지 확인합니다.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 제품
ENVOY-PRODUCT-1
에서 경로/echo1
를 찾을 수 없음을 나타냅니다. - Envoy 디버그 로그용 Apigee 어댑터에
no path: REQUEST_URI_PATH
메시지가 표시되면 이 문제의 원인입니다. 그렇지 않은 경우 원인: API 제품에 호스트 이름이 누락됨으로 이동하세요.
해상도
특정 요청 URI가 특정 대상의 API 제품에 추가되지 않으면 다음 단계를 수행하여 문제를 해결합니다.
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 Envoy용 Apigee 어댑터를 구성하는 데 사용한 특정 API 제품을 클릭합니다.
- API 제품 > 제품 이름 페이지에서 수정을 클릭합니다.
- API 리소스 창에서 API 제품에 API 요청 URI를 추가합니다.
- Envoy 로그용 Apigee 어댑터를 모니터링하고 Envoy용 Apigee 어댑터가 업데이트된 API 제품을 가져올 때까지 기다립니다. 그런 다음 다른 API 요청을 전송하여 수정사항을 확인하세요.
원인: API 제품에 호스트 이름이 누락되었습니다.
이 오류는 대상 호스트 이름과 포트 조합이 Envoy 프록시에서 사용하는 특정 API 제품에 추가되지 않은 경우에 발생합니다.
진단
문제를 진단하려면 다음 단계를 따르세요.
- 위의 2단계에 설명된 대로 디버그 로그를 사용 설정합니다.
Envoy 로그용 Apigee 어댑터를 확인하고
Authorizing request
섹션에서 특정 대상에 연결된 특정 API 제품에 대해 다음 메시지가 표시되는지 확인합니다.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)
위의 예시는 API 제품
ENVOY-PRODUCT-1
에서 호스트 이름 및 포트 조합httpbin1:8080
을 찾을 수 없음을 보여줍니다.- 요청을 승인하는 동안 Envoy 로그용 Apigee 어댑터에
no targets: HOSTNAME:PORT
메시지가 포함된 항목이 포함되면 이 항목이 문제의 원인입니다. 그렇지 않은 경우 원인: 요청 헤더에 API 키 누락으로 이동합니다.
해상도
대상 호스트 이름과 포트 조합이 API 제품에 추가되지 않은 경우 다음 단계를 따라 문제를 해결하세요.
- Edge UI에 로그인합니다.
- 게시 > API 제품 페이지에서 Envoy용 Apigee 어댑터를 구성하는 데 사용한 특정 API 제품을 클릭합니다.
- API 제품 > 제품 이름 페이지에서 수정을 클릭합니다.
Apigee 원격 서비스 대상 창에서 대상 호스트 이름과 포트를 추가하고 저장을 클릭합니다.
UI에 Apigee 원격 서비스 대상 섹션이 표시되지 않으면 이름이
apigee-remote-service-targets
인 API 제품에 커스텀 속성을 추가하고 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": [] }
- 위 작업이 완료되면 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 어댑터의
Authenticate error
섹션에[missing authentication]
라는 메시지가 있는 로그 항목이 포함되어 있으면 이것이 문제의 원인입니다. 그렇지 않으면 원인: 잘못된 API 키로 이동합니다.
해상도
Envoy 로그용 Apigee 어댑터에 [missing authentication]
오류가 표시되면 다음 단계를 수행하여 문제를 해결합니다.
- 클라이언트가 API 요청에서 HTTP 헤더
x-api-key
를 사용하여 API 키를 전송했는지 확인합니다. 그렇지 않은 경우 클라이언트에 HTTP 헤더x-api-key
의 API 키를 전송하도록 요청합니다. - 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 어댑터를 확인하고
Authenticate error
섹션에[permission denied]
메시지가 표시되는지 확인합니다. 일반적으로fetchToken fetching: API_KEY
메시지로 표시되는 어댑터에서 API 키를 가져온 후에 표시됩니다.샘플 디버그 로그 출력:
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 키를 전송하도록 요청합니다.
- 클라이언트에서 사용하는 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
오류로 표시된 대로 유효하지 않으므로 원격 서비스 API 프록시와 통신할 수 없습니다 . - Envoy 로그용 Apigee 어댑터에
no such host
메시지가 있는 로그 항목이 포함되면 이 문제로 인해 문제가 발생한 것입니다. 그렇지 않은 경우 원인: Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없습니다로 이동합니다.
해상도
위의 오류가 Envoy 로그용 Apigee 어댑터에 표시되면 다음 단계를 수행하여 문제를 해결합니다.
Envoy용 Apigee 어댑터 구성 파일을 확인하고 지정된 원격 서비스 API 프록시 URL이 유효한지 확인하세요.
그렇지 않은 경우 Envoy용 Apigee 어댑터를 중지하고 구성 파일에서 원격 서비스 API 프록시 URL을 수정한 후 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'
위의 예시는
connection failure
으로 인해 Envoy가 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
)이 있는지 확인합니다. 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
Apigee Edge UI를 사용하여
remote-service
API 프록시에서 트레이스 세션을 시작합니다. 이 문제를 재현하고 추적 세션 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
명령어(curl
명령어의 전체 출력)를 사용하여 Envoy 프록시에 전송된 API 요청:curl -v ENVOY_PROXY_ENDPOINT
curl
명령어 (curl
명령어의 전체 출력)를 사용하여 대상 서비스에 전송된 API 요청입니다.curl -v TARGET_SERVICE_ENDPOINT