Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Dấu hiệu
Envoy Proxy gặp lỗi HTTP 403 Forbidden khi được gọi thông qua Apigee Adapter for Envoy.
Thông báo lỗi
Thông báo lỗi sau đây sẽ xuất hiện:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 03 Nov 2020 00:20:10 GMT server: istio-envoy
Các nguyên nhân có thể
Proxy Envoy sẽ đưa ra lỗi HTTP 403 nếu một trong các điều kiện sau xảy ra:
| Nguyên nhân | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
|---|---|---|
| Chưa bật sản phẩm API | Chưa bật sản phẩm API cho môi trường cụ thể. | Người dùng Edge Public Cloud và Private Cloud |
| Thiếu đường dẫn URI dịch vụ mục tiêu trong Sản phẩm API | Đường dẫn URI của dịch vụ mục tiêu bị thiếu hoặc chưa được thêm vào sản phẩm API trong phần tài nguyên API. | Người dùng Edge Public Cloud và Private Cloud |
| Thiếu tên máy chủ lưu trữ trong Sản phẩm API | Tên máy chủ được cung cấp trong yêu cầu API của ứng dụng bị thiếu trong sản phẩm API trong mục đích dịch vụ từ xa của Apigee. | Người dùng Edge Public Cloud và Private Cloud |
| Thiếu khoá API trong tiêu đề của yêu cầu | Khoá API không được truyền trong tiêu đề HTTP x-api-key. |
Người dùng Edge Public Cloud và Private Cloud |
| Khoá API không hợp lệ | Khoá API được truyền dưới dạng một phần của yêu cầu là không hợp lệ. | Người dùng Edge Public Cloud và Private Cloud |
| Apigee Adapter for Envoy không thể giao tiếp với proxy API dịch vụ từ xa | Apigee Adapter for Envoy không giao tiếp được với proxy API dịch vụ từ xa. | Người dùng Edge Public Cloud và Private Cloud |
| Proxy Envoy không thể giao tiếp với Apigee Adapter for Envoy | Proxy Envoy không thể giao tiếp với Apigee Adapter for Envoy | Người dùng Edge Public Cloud và Private Cloud |
Trước khi bắt đầu
- Xác minh rằng bạn đang nhận được thông báo phản hồi
403 Forbiddentừ proxy Envoy. Ví dụ: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
Bật nhật ký gỡ lỗi:
Đảm bảo bạn đã bật nhật ký gỡ lỗi trong Apigee Adapter for Envoy để ghi lại thêm thông tin chi tiết về lỗi. Nếu không, hãy dừng Apigee Adapter for Envoy rồi khởi động lại, bật nhật ký gỡ lỗi bằng lệnh sau:
apigee-remote-service-envoy -c config.yaml -l debug
Nguyên nhân: Chưa bật sản phẩm API
Lỗi này sẽ xảy ra nếu Sản phẩm API cụ thể mà Envoy Proxy sử dụng không được bật trong môi trường cụ thể mà các lệnh gọi API được gọi.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán vấn đề:
- Bật nhật ký gỡ lỗi như giải thích trong bước 2 ở trên.
- Kiểm tra nhật ký Apigee Adapter for Envoy và xác minh rằng thông báo sau đây xuất hiện trong phần
Authorizing request:product: API_PRODUCT_NAME not found
Ví dụ về đầu ra của nhật ký gỡ lỗi:
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
Ví dụ trên cho thấy không tìm thấy sản phẩm API
ENVOY-PRODUCT-1trong Apigee Adapter for Envoy.Để biết thêm thông tin về hoạt động ghi nhật ký của Apigee Adapter for Envoy, hãy xem phần Ghi nhật ký.
- Nếu bạn thấy thông báo này trong khi uỷ quyền cho yêu cầu API, thì rất có thể thông báo này cho biết rằng Sản phẩm API cụ thể không được bật cho một môi trường cụ thể mà bạn đang thực hiện các lệnh gọi API.
- Hãy thực hiện các bước sau để xác minh điều này:
- Đăng nhập vào Giao diện người dùng Edge.
- Trên trang Phát hành > Sản phẩm API, hãy nhấp vào sản phẩm API cụ thể mà bạn đã dùng để định cấu hình Apigee Adapter for Envoy.
- Xác minh rằng môi trường cụ thể mà bạn đang thực hiện các yêu cầu API đã được bật trong sản phẩm API.
- Nếu bạn chưa bật môi trường cụ thể trong Sản phẩm API, thì đó là nguyên nhân gây ra vấn đề này.
- Nếu môi trường cụ thể đã được bật, hãy chuyển đến Nguyên nhân: Thiếu đường dẫn URI dịch vụ đích trong Sản phẩm API.
Độ phân giải
Nếu môi trường cụ thể không được bật trong sản phẩm API, hãy thực hiện các bước sau để giải quyết vấn đề:
- Đăng nhập vào Giao diện người dùng Edge.
- Trên trang Phát hành > Sản phẩm API, hãy nhấp vào sản phẩm API cụ thể mà bạn đã dùng để định cấu hình Apigee Adapter for Envoy.
- Trên trang API products > Product name (Sản phẩm API > Tên sản phẩm), hãy nhấp vào Edit (Chỉnh sửa).
- Bật môi trường cụ thể mà bạn muốn thực hiện các yêu cầu API bằng cách chọn hộp đánh dấu môi trường có liên quan.
- Nhấp vào Lưu.
Nguyên nhân: Thiếu đường dẫn URI dịch vụ mục tiêu trong sản phẩm API
Lỗi này sẽ xảy ra nếu đường dẫn URI của mục tiêu không được chỉ định trong Sản phẩm API cụ thể mà Envoy Proxy sử dụng.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán vấn đề:
- Bật nhật ký gỡ lỗi như giải thích trong bước 2 ở trên.
-
Kiểm tra nhật ký Apigee Adapter for Envoy và xác minh rằng thông báo sau đây xuất hiện cho Sản phẩm API cụ thể được liên kết với một mục tiêu cụ thể trong phần
Authorizing request:no path: REQUEST_URI_PATH
Ví dụ về đầu ra của nhật ký gỡ lỗi:
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)
Đầu ra mẫu cho thấy thông báo:
no path: /echo1
Điều này cho biết không tìm thấy đường dẫn
/echo1trong sản phẩm APIENVOY-PRODUCT-1. - Nếu bạn thấy thông báo
no path: REQUEST_URI_PATHtrong nhật ký gỡ lỗi Apigee Adapter for Envoy, thì đó là nguyên nhân gây ra vấn đề này. Nếu không, hãy chuyển đến phần Nguyên nhân: Thiếu tên máy chủ lưu trữ trong sản phẩm API.
Độ phân giải
Nếu URI yêu cầu cụ thể không được thêm vào API Product cho mục tiêu cụ thể, hãy thực hiện các bước sau để giải quyết vấn đề:
- Đăng nhập vào Giao diện người dùng Edge.
- Trên trang Phát hành > Sản phẩm API, hãy nhấp vào sản phẩm API cụ thể mà bạn đã dùng để định cấu hình Apigee Adapter for Envoy.
- Trên trang API products > Product name (Sản phẩm API > Tên sản phẩm), hãy nhấp vào Edit (Chỉnh sửa).
- Trong ngăn Tài nguyên API, hãy thêm URI yêu cầu API vào sản phẩm API.
- Theo dõi nhật ký Apigee Adapter for Envoy và đợi cho đến khi Apigee Adapter for Envoy tìm nạp sản phẩm API đã cập nhật. Sau đó, hãy gửi một yêu cầu API khác để xác minh bản sửa lỗi.
Nguyên nhân: Thiếu tên máy chủ trong sản phẩm API
Lỗi này sẽ xảy ra nếu bạn không thêm tổ hợp tên máy chủ và cổng đích vào Sản phẩm API cụ thể mà Envoy Proxy sử dụng.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán vấn đề:
- Bật nhật ký gỡ lỗi như giải thích trong bước 2 ở trên.
Kiểm tra nhật ký Apigee Adapter for Envoy và xác minh rằng thông báo sau đây xuất hiện cho Sản phẩm API cụ thể được liên kết với một mục tiêu cụ thể trong phần
Authorizing request:no targets: HOSTNAME:PORT
Ví dụ về đầu ra của nhật ký gỡ lỗi:
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)
Ví dụ trên cho thấy rằng tổ hợp tên máy chủ lưu trữ và cổng
httpbin1:8080không có trong sản phẩm APIENVOY-PRODUCT-1.- Nếu nhật ký Apigee Adapter for Envoy chứa một mục có thông báo
no targets: HOSTNAME:PORTtrong khi uỷ quyền cho yêu cầu, thì đây là nguyên nhân gây ra vấn đề. Nếu không, hãy chuyển đến phần Nguyên nhân: Thiếu khoá API trong tiêu đề của yêu cầu.
Độ phân giải
Nếu bạn chưa thêm tổ hợp tên máy chủ và cổng mục tiêu vào sản phẩm API, hãy thực hiện các bước sau để giải quyết vấn đề:
- Đăng nhập vào Giao diện người dùng Edge.
- Trên trang Phát hành > Sản phẩm API, hãy nhấp vào sản phẩm API cụ thể mà bạn đã dùng để định cấu hình Apigee Adapter for Envoy.
- Trên trang API products > Product name (Sản phẩm API > Tên sản phẩm), hãy nhấp vào Edit (Chỉnh sửa).
Trong ngăn Apigee remote service targets (Mục tiêu dịch vụ từ xa của Apigee), hãy thêm tên máy chủ mục tiêu và cổng, rồi nhấp vào Save (Lưu).
Nếu bạn không thấy phần Apigee remote service targets (Mục tiêu dịch vụ từ xa của Apigee) trong giao diện người dùng, hãy thêm một thuộc tính tùy chỉnh vào sản phẩm API có tên
apigee-remote-service-targetsvà thêm giá trị HOSTNAME:PORT bằng Edge API. Ví dụ: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": [] }- Sau khi hoàn tất tác vụ trên, hãy theo dõi nhật ký Apigee Adapter for Envoy và đợi cho đến khi Apigee Adapter for Envoy tìm nạp sản phẩm API đã cập nhật. Sau đó, hãy gửi một yêu cầu API khác để xác minh bản sửa lỗi.
Nguyên nhân: Thiếu khoá API trong tiêu đề của yêu cầu
Lỗi này sẽ xảy ra nếu Khoá API không được truyền dưới dạng một phần của tiêu đề yêu cầu.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán vấn đề:
- Bật nhật ký gỡ lỗi như giải thích trong bước 2 ở trên.
- Kiểm tra nhật ký Apigee Adapter for Envoy và xác minh rằng bạn thấy thông báo
[missing authentication]trong phầnAuthenticate error.Ví dụ về đầu ra của nhật ký gỡ lỗi:
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
Đầu ra mẫu ở trên có thông báo
[missing authentication]. Thông báo này cho biết khoá API không được truyền dưới dạng một phần của tiêu đề của yêu cầu. - Nếu nhật ký Apigee Adapter for Envoy chứa một mục nhập nhật ký có thông báo
[missing authentication]trong phầnAuthenticate error, thì đây là nguyên nhân gây ra vấn đề. Nếu không, hãy chuyển đến phần Nguyên nhân: Khoá API không hợp lệ.
Độ phân giải
Nếu lỗi [missing authentication] xuất hiện trong nhật ký Apigee Adapter for Envoy, hãy thực hiện các bước sau để giải quyết vấn đề:
- Kiểm tra xem ứng dụng đã gửi khoá API bằng tiêu đề HTTP
x-api-keytrong yêu cầu API hay chưa. Nếu không, hãy yêu cầu ứng dụng gửi khoá API trong tiêu đề HTTPx-api-key. - Kiểm tra tệp cấu hình Apigee Adapter for Envoy và xác minh rằng tên tiêu đề khoá API mặc định
x-api-keyđã được thay đổi, ví dụ:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | global: tls: ... tenant: ... auth: target_header: api-keyTrong ví dụ trên, tên tiêu đề Khoá API mặc định đã được sửa đổi thành
api-key. Trong trường hợp này, bạn cần truyền Khoá API trong phần đầuapi-key. - Nếu tên tiêu đề khoá API mặc định đã thay đổi, hãy yêu cầu ứng dụng khách sử dụng tên tiêu đề khoá API mới cập nhật và gửi một yêu cầu API khác, đồng thời xác minh xem yêu cầu đó có giải quyết được vấn đề hay không.
Nguyên nhân: Khoá API không hợp lệ
Lỗi này sẽ xảy ra nếu Khoá API không hợp lệ được truyền dưới dạng một phần của tiêu đề của yêu cầu.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán vấn đề:
- Bật nhật ký gỡ lỗi như giải thích trong bước 2 ở trên.
- Kiểm tra nhật ký Apigee Adapter for Envoy và xác minh rằng bạn thấy thông báo
[permission denied]trong phầnAuthenticate error. Thông báo này thường xuất hiện sau khi Khoá API được Adapter tìm nạp, được biểu thị bằng thông báofetchToken fetching: API_KEY.Ví dụ về đầu ra của nhật ký gỡ lỗi:
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)
Trong ví dụ này, khoá API được gửi trong yêu cầu API không hợp lệ.
- Nếu nhật ký Apigee Adapter for Envoy chứa một mục nhập nhật ký có
[permission denied]trong phầnAuthenticate error, thì điều đó có nghĩa là khoá API được truyền dưới dạng một phần của yêu cầu không hợp lệ và là nguyên nhân gây ra vấn đề. Nếu không, hãy chuyển đến phần Nguyên nhân: Apigee Adapter for Envoy không thể giao tiếp với proxy API dịch vụ từ xa.
Độ phân giải
Nếu bạn thấy thông báo [permission denied] trong phần Authenticate
error trong nhật ký Apigee Adapter for Envoy, hãy thực hiện các bước sau để giải quyết vấn đề:
- Kiểm tra khoá API được gửi trong yêu cầu API dựa trên giá trị khoá API có trong ứng dụng được kết nối với sản phẩm API.
- Nếu khoá API mà ứng dụng sử dụng không hợp lệ, hãy yêu cầu ứng dụng gửi khoá API hợp lệ.
- Nếu khoá API mà ứng dụng sử dụng là hợp lệ và bạn vẫn gặp lỗi
403HTTP, vui lòng liên hệ với Nhóm hỗ trợ Apigee Edge để điều tra thêm về vấn đề này.
Nguyên nhân: Apigee Adapter for Envoy không thể giao tiếp với proxy API dịch vụ từ xa
Lỗi này sẽ xảy ra nếu Apigee Adapter for Envoy không thể giao tiếp với Remote Service API Proxy nếu máy chủ dịch vụ từ xa được định cấu hình không hợp lệ.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán vấn đề:
- Bật nhật ký gỡ lỗi như giải thích trong bước 2 ở trên.
-
Kiểm tra nhật ký của Apigee Adapter for Envoy và xác minh rằng bạn thấy thông báo sau:
Error retrieving products: REQUEST_URI: no such host
Ví dụ về đầu ra của nhật ký gỡ lỗi:
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
Trong ví dụ này, Apigee Adapter for Envoy không thể giao tiếp với API remote-service vì tên máy chủ được cung cấp trong URL của API Proxy trên máy chủ từ xa không hợp lệ như được chỉ ra bởi lỗi
no such host. - Nếu nhật ký Apigee Adapter for Envoy chứa một mục nhập nhật ký có thông báo
no such host, thì đây là nguyên nhân gây ra vấn đề. Nếu không, hãy chuyển đến phần Nguyên nhân: Proxy Envoy không thể giao tiếp với Apigee Adapter for Envoy.
Độ phân giải
Nếu các lỗi trên xuất hiện trong nhật ký Apigee Adapter for Envoy, hãy thực hiện các bước sau để giải quyết vấn đề:
Kiểm tra tệp cấu hình Apigee Adapter for Envoy và xác minh rằng URL của API proxy remote-service đã cho là hợp lệ.
Nếu không, hãy dừng Apigee Adapter for Envoy, sửa URL của proxy API dịch vụ từ xa trong tệp cấu hình, khởi động Apigee Adapter for Envoy, gửi một yêu cầu API khác và xác minh bản sửa lỗi.
Cấu hình mẫu:
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- Xác minh rằng proxy API
remote-serviceđược triển khai trong môi trường Edge có liên quan. Nếu không, hãy triển khai proxy APIremote-servicetrong môi trường Edge có liên quan rồi thử lại. - Xác minh khả năng kết nối mạng giữa Apigee Adapter for Envoy và điểm cuối của proxy API
remote-service. Nếu bạn phát hiện thấy vấn đề về kết nối mạng, hãy liên hệ với nhóm mạng của bạn và cố gắng giải quyết vấn đề.
Nguyên nhân: Proxy Envoy không thể giao tiếp với Apigee Adapter for Envoy
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán vấn đề:
Đảm bảo bạn đã bật nhật ký gỡ lỗi trong Envoy. Nếu không, hãy dừng Envoy rồi khởi động lại, đồng thời bật nhật ký gỡ lỗi. Sau đó, hãy gửi một yêu cầu API khác.
Triển khai độc lập:
envoy -c envoy-config.yaml -l debug
Triển khai dựa trên 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
- Kiểm tra nhật ký Apigee Adapter for Envoy và xác minh rằng có một mục nhập nhật ký có thông báo:
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
sau đó là:
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
Ví dụ về đầu ra của nhật ký gỡ lỗi:
[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'
Ví dụ trên cho thấy Envoy không thể giao tiếp với Apigee Adapter for Envoy vì lý do
connection failure. - Biểu tượng
connection failurecó thể xuất hiện vì nhiều lý do. Hãy xem xét từng trường hợp.
Tình huống 1: Quy trình của bộ chuyển đổi không chạy
Nếu quy trình Apigee Adapter for Envoy không chạy, thì lỗi này có thể xảy ra.
- Xác minh rằng quy trình Apigee Adapter for Envoy đang chạy bằng cách thực thi lệnh sau. Nếu quy trình Apigee Adapter for Envoy đang chạy, kết quả của lệnh sau sẽ liệt kê quy trình đó.
ps -ef | grep apigee-remote-service-envoy
- Nếu không chạy, thì đó là nguyên nhân gây ra vấn đề.
Độ phân giải
- Nếu quy trình Apigee Adapter for Envoy không chạy, hãy khởi động Apigee Adapter for Envoy.
- Gửi một yêu cầu khác đến API và xác minh xem vấn đề đã được khắc phục hay chưa.
Tình huống 2: Quy trình bộ chuyển đổi không nghe trên cổng cụ thể
Nếu quy trình Apigee Adapter for Envoy không theo dõi trên cổng cụ thể, thì có thể xảy ra lỗi này.
Nếu quy trình Apigee Adapter for Envoy đang chạy, hãy xác minh rằng có một socket đang nghe trên cổng 5000: APIGEE_ENVOY_ADAPTER_HOST:5000. Bạn có thể chạy lệnh netstat để xác minh điều này:
sudo netstat -lnp | grep 5000
Đầu ra mẫu:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
Nếu không có socket nào đang nghe trên cổng 5000, thì đó có thể là nguyên nhân gây ra vấn đề này.
Độ phân giải
- Dừng Apigee Adapter for Envoy rồi khởi động lại.
- Gửi một yêu cầu khác đến API và xác minh xem vấn đề đã được khắc phục hay chưa.
Tình huống 3: Khả năng kết nối mạng giữa Envoy và Apigee Adapter for Envoy
- Xác minh khả năng kết nối mạng giữa Envoy và Apigee Adapter for Envoy:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
Nếu telnet có thể tạo một kết nối TCP đến Apigee Adapter for Envoy, thì một đầu ra tương tự như sau sẽ xuất hiện:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- Nếu bạn thấy lỗi
Connection timed outbằng telnet, thì điều đó cho thấy có vấn đề về khả năng kết nối mạng giữa Envoy và Apigee Adapter for Envoy.
Độ phân giải
Nếu bạn gặp bất kỳ vấn đề nào về khả năng kết nối mạng giữa Envoy và Apigee Adapter for Envoy, vui lòng liên hệ với nhóm mạng của bạn và cố gắng giải quyết vấn đề.
Nếu vấn đề vẫn tiếp diễn, hãy chuyển đến phần Phải thu thập thông tin chẩn đoán.
Phải thu thập thông tin chẩn đoán
Nếu vấn đề vẫn tiếp diễn sau khi bạn làm theo hướng dẫn ở trên, hãy thu thập thông tin chẩn đoán sau đây rồi liên hệ với Nhóm hỗ trợ Apigee Edge:
-
Sản phẩm Apigee được sử dụng:
Ví dụ: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X
- Tổ chức và môi trường Apigee
Định nghĩa sản phẩm API được đọc bằng Edge API:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
Tài liệu tham khảo: Apigee Edge API
Bắt đầu một phiên theo dõi trong proxy API
remote-servicebằng giao diện người dùng Apigee Edge. Tái hiện vấn đề này và chia sẻ tệp XML của phiên theo dõi.Tài liệu tham khảo: Sử dụng công cụ Theo dõi | Apigee Edge
Nhật ký Apigee Adapter for Envoy (nhật ký đầy đủ liên quan đến khoảng thời gian nhất định)
Triển khai độc lập:
# by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
Triển khai dựa trên Kubernetes/Istio:
kubectl -n=apigee get pods kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
- Một yêu cầu API được gửi đến proxy Envoy bằng lệnh
curl(đầu ra hoàn chỉnh của lệnhcurl):curl -v ENVOY_PROXY_ENDPOINT
- Một yêu cầu API được gửi đến dịch vụ mục tiêu bằng lệnh
curl(toàn bộ đầu ra của lệnhcurl):curl -v TARGET_SERVICE_ENDPOINT