Apigee Edge 문서를 보고 있습니다.
Apigee X 문서로 이동하세요. info
증상
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 Public 및 Private Cloud 사용자 |
| API 제품에 대상 서비스 URI 경로가 누락됨 | 타겟 서비스의 URI 경로가 누락되었거나 API 리소스 아래의 API 제품에 추가되지 않았습니다. | Edge Public 및 Private Cloud 사용자 |
| API 제품에 호스트 이름이 누락됨 | 클라이언트 API 요청에 제공된 호스트 이름이 Apigee 원격 서비스 대상의 API 제품에 누락되어 있습니다. | Edge Public 및 Private Cloud 사용자 |
| 요청 헤더에 API 키가 누락됨 | API 키가 x-api-key HTTP 헤더로 전달되지 않습니다. |
Edge Public 및 Private Cloud 사용자 |
| 잘못된 API 키 | 요청의 일부로 전달된 API 키가 잘못되었습니다. | Edge Public 및 Private Cloud 사용자 |
| Envoy용 Apigee 어댑터가 원격 서비스 API 프록시와 통신할 수 없음 | Envoy용 Apigee 어댑터가 원격 서비스 API 프록시와 통신할 수 없습니다. | Edge Public 및 Private Cloud 사용자 |
| Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없음 | Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없음 | Edge Public 및 Private Cloud 사용자 |
시작하기 전에
- 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 어댑터 로깅에 대한 자세한 내용은 로깅을 참고하세요.
- 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 경로가 누락됨
이 오류는 Envoy 프록시에서 사용하는 특정 API 제품에 타겟의 URI 경로가 지정되지 않은 경우에 발생합니다.
진단
문제를 진단하려면 다음 단계를 따르세요.
- 위의 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 요청 URI를 API 제품에 추가합니다.
- 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)
위의 예에서는 호스트 이름과 포트 조합
httpbin1:8080이 API 제품ENVOY-PRODUCT-1에서 발견되지 않았음을 보여줍니다.- 요청을 승인하는 동안 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]메시지가 표시되는지 확인합니다. 이는 일반적으로 어댑터가 API 키를 가져온 후에 표시되며,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 키를 전송하도록 요청합니다.
- 클라이언트에서 사용하는 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
이 예에서 Apigee Adapter for Envoy는 원격 서버 API 프록시 URL에 제공된 호스트 이름이 오류
no such host에 표시된 대로 유효하지 않기 때문에 remote-service API 프록시와 통신할 수 없습니다 . - Envoy용 Apigee 어댑터 로그에
no such host메시지가 포함된 로그 항목이 있으면 이것이 문제의 원인입니다. 그렇지 않은 경우 원인: Envoy 프록시가 Envoy용 Apigee 어댑터와 통신할 수 없음으로 이동하세요.
해상도
위 오류가 Envoy용 Apigee 어댑터 로그에 표시되면 다음 단계에 따라 문제를 해결하세요.
Envoy용 Apigee 어댑터 구성 파일을 확인하고 지정된 원격 서비스 API 프록시 URL이 유효한지 확인합니다.
그렇지 않으면 Envoy용 Apigee 어댑터를 중지하고 구성 파일에서 remote-service 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: SECRETremote-serviceAPI 프록시가 관련 Edge 환경에 배포되었는지 확인합니다. 그렇지 않은 경우 관련 Edge 환경에remote-serviceAPI 프록시를 배포하고 다시 시도하세요.- Envoy용 Apigee 어댑터와
remote-serviceAPI 프록시 엔드포인트 간의 네트워크 연결을 확인합니다. 네트워크 연결 문제가 발견되면 네트워킹팀에 문의하여 문제를 해결하세요.
원인: 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 '^]'.
- 텔넷에서
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-serviceAPI 프록시에서 추적 세션을 시작합니다. 이 문제를 재현하고 추적 세션 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