Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Triệu chứng
Proxy Envoy không thành công với lỗi HTTP 403 Forbidden
khi được gọi qua
Bộ chuyển đổi Apigee dành cho 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ẽ báo lỗi HTTP 403
nếu một trong các điều kiện sau xảy ra
xảy ra:
Nguyên nhân | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Sản phẩm API chưa được bật | Sản phẩm API không được bật cho môi trường cụ thể. | Người dùng Edge công khai và riêng tư |
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 không được thêm vào sản phẩm API trong API của chúng tôi. | Người dùng Edge công khai và riêng tư |
Thiếu tên máy chủ trong sản phẩm API | Sản phẩm API trong mục Apigee thiếu tên máy chủ được cung cấp trong yêu cầu API của ứng dụng mục tiêu dịch vụ từ xa. | Người dùng Edge công khai và riêng tư |
Thiếu khoá API trong tiêu đề của yêu cầu | Khoá API không được chuyển vào tiêu đề HTTP x-api-key . |
Người dùng Edge công khai và riêng tư |
Khoá API không hợp lệ | Khoá API được chuyển dưới dạng một phần của yêu cầu không hợp lệ. | Người dùng Edge công khai và riêng tư |
Bộ chuyển đổi Apigee dành cho Envoy không thể giao tiếp bằng proxy API dịch vụ từ xa | Bộ chuyển đổi Apigee dành cho Envoy không thể kết nối với proxy API dịch vụ từ xa. | Người dùng Edge công khai và riêng tư |
Proxy của đại diện không thể giao tiếp với Bộ chuyển đổi chuyên trách về Apigee | proxy của Envoy không thể kết nối với bộ chuyển đổi Apigee dành cho Envoy | Người dùng Edge công khai và riêng tư |
Trước khi bắt đầu
- Xác minh rằng bạn nhận được tin nhắn phản hồi
403 Forbidden
từ Proxy đại diện. 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:
Hãy đảm bảo rằng bạn đã bật nhật ký gỡ lỗi trong Bộ chuyển đổi Apigee để Envoy thu thập thêm thông tin chi tiết về lỗi. Nếu không, hãy dừng Bộ chuyển đổi Apigee cho 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: Sản phẩm API chưa được bật
Lỗi này sẽ xảy ra nếu Sản phẩm API cụ thể được Proxy sử dụng không được bật trong môi trường cụ thể nơi 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 sự cố:
- Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
- Kiểm tra Bộ chuyển đổi Apigee cho nhật ký của Envoy và xác minh rằng thông báo sau đây xuất hiện
trong mục
Authorizing request
:product: API_PRODUCT_NAME not found
Kết quả của nhật ký gỡ lỗi mẫu:
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-1
trong Bộ chuyển đổi Apigee dành cho Đại sứ.Để biết thêm thông tin về Bộ chuyển đổi Apigee dùng để ghi nhật ký cho Envoy, hãy xem Ghi nhật ký.
- Nếu bạn thấy thông báo này trong khi cho phép yêu cầu API, thì rất có thể thông báo này cho biết Sản phẩm API cụ thể không được bật cho môi trường cụ thể mà bạn thực hiện 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 Edge UI.
- Trên thẻ Xuất bản > Trang 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 Bộ chuyển đổi Apigee cho Envoy.
- Xác minh rằng môi trường cụ thể mà bạn gửi yêu cầu API bật trong sản phẩm API.
- Nếu môi trường cụ thể không được bật trong Sản phẩm API, thì đó là nguyên nhân cho 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ụ mục tiêu 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 Edge UI.
- Trên thẻ Xuất bản > Trang sản phẩm API, nhấp vào sản phẩm API cụ thể mà bạn đã sử dụng để định cấu hình Bộ chuyển đổi Apigee cho Envoy.
- Trên sản phẩm API > Tên sản phẩm, hãy nhấp vào Chỉnh sửa.
- Bật môi trường cụ thể mà bạn muốn thực hiện 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ể được sử dụng bởi Người đại diện.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán sự cố:
- Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
-
Kiểm tra Bộ chuyển đổi Apigee cho nhật ký của Envoy và xác minh rằng thông báo sau là được hiển thị cho Sản phẩm API cụ thể được liên kết với mục tiêu cụ thể trong phần
Authorizing request
:no path: REQUEST_URI_PATH
Kết quả của nhật ký gỡ lỗi mẫu:
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)
Kết quả mẫu cho thấy thông báo:
no path: /echo1
Mã này cho biết không tìm thấy đường dẫn
/echo1
trong sản phẩm APIENVOY-PRODUCT-1
- Nếu bạn thấy thông báo
no path: REQUEST_URI_PATH
trong Bộ chuyển đổi Apigee dành cho nhật ký gỡ lỗi của Envoy, thì đó là nguyên nhân của vấn đề này. Nếu không, hãy chuyển đến Nguyên nhân: Thiếu tên máy chủ 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 Sản phẩm API cho mục tiêu cụ thể, thì hãy thực hiện các bước sau để giải quyết vấn đề:
- Đăng nhập vào Edge UI.
- Trên thẻ Xuất bản > Trang 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 Bộ chuyển đổi Apigee cho Envoy.
- Trên sản phẩm API > Tên sản phẩm, hãy nhấp vào 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 Bộ chuyển đổi Apigee dành cho nhật ký của Envoy và đợi đến khi Bộ chuyển đổi Apigee 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 tổ hợp tên máy chủ mục tiêu và cổng không được thêm vào Sản phẩm API do Envoy Proxy sử dụng.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán sự cố:
- Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
Kiểm tra Bộ chuyển đổi Apigee cho nhật ký của Envoy và xác minh rằng thông báo sau là được hiển thị cho Sản phẩm API cụ thể được liên kết với mục tiêu cụ thể trong phần
Authorizing request
:no targets: HOSTNAME:PORT
Kết quả của nhật ký gỡ lỗi mẫu:
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 tổ hợp tên máy chủ và cổng
httpbin1:8080
không tìm thấy trong sản phẩm APIENVOY-PRODUCT-1
.- Nếu nhật ký của Đối tác Apigee chứa một mục có thông báo
no targets: HOSTNAME:PORT
trong khi uỷ quyền cho yêu cầu, thì đây là nguyên nhân của vấn đề. Nếu không, hãy chuyển đến Nguyên nhân: Thiếu khoá API trong tiêu đề của yêu cầu.
Độ phân giải
Nếu tổ hợp tên máy chủ mục tiêu và cổng không được thêm vào sản phẩm API, hãy thực hiện các bước sau đây để giải quyết vấn đề:
- Đăng nhập vào Edge UI.
- Trên thẻ Xuất bản > Trang 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 Bộ chuyển đổi Apigee cho Envoy.
- Trên sản phẩm API > Tên sản phẩm, hãy nhấp vào Chỉnh sửa.
Trong ngăn Mục tiêu dịch vụ từ xa Apigee, hãy thêm tên máy chủ mục tiêu và cổng và nhấp vào Lưu.
Nếu bạn không thấy phần Mục tiêu dịch vụ từ xa Apigee trong giao diện người dùng, thêm thuộc tính tùy chỉnh vào sản phẩm API bằng thuộc tính đặt tên
apigee-remote-service-targets
rồi thêm HOSTNAME:PORT bằng API Edge. 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 nhiệm vụ nêu trên, hãy giám sát Bộ chuyển đổi Apigee dành cho nhật ký của Envoy và đợi cho đến khi Bộ chuyển đổi Apigee for Envoy tìm nạp sản phẩm API mới cập nhật. Sau đó, hãy gửi một API khác yêu cầu 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 chuyể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 sự cố:
- Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
- Kiểm tra Bộ chuyển đổi Apigee cho nhật ký của Envoy và xác minh rằng bạn thấy
[missing authentication]
tin nhắn trongAuthenticate error
.Kết quả của nhật ký gỡ lỗi mẫu:
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
Kết quả mẫu ở trên có thông báo
[missing authentication]
. Thông báo này cho biết rằng khoá API không được chuyển như một phần của tiêu đề của yêu cầu. - Nếu nhật ký của Nhóm chuyển đổi Apigee dành cho Envoy chứa một mục nhập nhật ký có thông báo
[missing authentication]
trong mụcAuthenticate error
, thì đây là nguyên nhân của vấn đề. Nếu không, hãy chuyển đế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
Bộ chuyển đổi Apigee dành cho nhật ký của 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 hay chưa bằng cách sử dụng tiêu đề HTTP
x-api-key
trong yêu cầu API. 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 của Bộ chuyển đổi Apigee cho Envoy và xác minh rằng khoá API mặc định
tên tiêu đề
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-key
Trong 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 chuyển Khoá API dưới dạng một phần của tiêu đềapi-key
. - Nếu tên tiêu đề khoá API mặc định đã thay đổi, hãy yêu cầu ứng dụng sử dụng Tên tiêu đề của khoá API rồi gửi một yêu cầu API khác, rồi xác minh xem việc đó 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 chuyể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 sự cố:
- Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
- Kiểm tra Bộ chuyển đổi Apigee cho nhật ký của 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 Bộ chuyển đổi tìm nạp Khoá API, được biểu thị bằng thông báofetchToken fetching: API_KEY
.Kết quả của nhật ký gỡ lỗi mẫu:
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ý của Nhóm chuyển đổi Apigee dành cho Envoy chứa một mục nhập nhật ký có
[permission denied]
ở mụcAuthenticate error
, thì mã này cho biết rằng Khoá API được chuyể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 của sự cố. Nếu không, hãy chuyển đến Nguyên nhân: Trình chuyển đổi Apigee dành cho 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]
tại mục Authenticate
error
trong Bộ chuyển đổi Apigee dành cho nhật ký của Envoy, hãy làm theo 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 so với giá trị khoá API được tìm thấy trong đượ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 thấy HTTP
403
, vui lòng liên hệ với Bộ phận hỗ trợ Apigee Edge để điều tra thêm về vấn đề này.
Nguyên nhân: Bộ chuyển đổi Apigee 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 Bộ chuyển đổi Apigee for Envoy không thể kết nối với điều khiển từ xa dịch vụ proxy API nếu máy chủ lưu trữ dịch vụ từ xa được định cấu hình là không hợp lệ.
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán sự cố:
- Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
-
Kiểm tra Bộ chuyển đổi Apigee cho nhật ký của Envoy và xác minh rằng bạn thấy thông báo sau:
Error retrieving products: REQUEST_URI: no such host
Kết quả của nhật ký gỡ lỗi mẫu:
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, Bộ chuyển đổi Apigee for Envoy không thể giao tiếp với proxy API dịch vụ từ xa vì tên máy chủ được cung cấp trong Proxy API của máy chủ từ xa URL không hợp lệ như được chỉ ra bởi lỗi
no such host
. - Nếu Bộ chuyển đổi Apigee dành cho nhật ký của Envoy có chứa một mục 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 Nguyên nhân: Proxy của 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 Bộ chuyển đổi Apigee dành cho nhật ký của Envoy, hãy thực hiện như sau các bước để giải quyết vấn đề:
Kiểm tra tệp cấu hình Apigee Adapter cho Envoy và xác minh rằng URL proxy của API dịch vụ từ xa là hợp lệ.
Nếu không, hãy dừng Bộ chuyển đổi Apigee cho Envoy, sửa URL proxy API dịch vụ từ xa trong tệp cấu hình, khởi động Bộ chuyển đổi Apigee cho Envoy rồi 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 Edge liên quan môi trường. Nếu không, hãy triển khai proxy APIremote-service
trong Edge liên quan môi trường xung quanh và thử lại. - Xác minh kết nối mạng giữa Bộ chuyển đổi Apigee for Envoy và
Điểm cuối proxy API
remote-service
. Có kết nối mạng nào không sự cố đã được phát hiện, hãy liên hệ với nhóm mạng của bạn và cố gắng giải quyết sự cố.
Nguyên nhân: Proxy của Envoy không thể giao tiếp với bộ chuyển đổi Apigee for Envoy
Chẩn đoán
Hãy thực hiện các bước sau để chẩn đoán sự cố:
Đả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 bắt đầu lạ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
Hoạt động 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 Bộ chuyển đổi Apigee dành cho nhật ký của Envoy và xác minh rằng có một mục nhập nhật ký với thông báo này:
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
sau đó là:
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
Kết quả của nhật ký gỡ lỗi mẫu:
[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ể liên lạc với Bộ chuyển đổi Apigee dành cho Đại sứ vì lý do
connection failure
. connection failure
có thể do nhiều nguyên nhân. Hãy cùng xem từng trường hợp.
Trường hợp 1: Quy trình bộ chuyển đổi không chạy
Nếu quy trình của Bộ chuyển đổi Apigee dành cho Chuyên gia sản phẩm không chạy, thì lỗi này có thể xảy ra.
- Xác minh rằng quy trình của Bộ chuyển đổi Apigee dành cho Envoy đang chạy bằng cách thực thi lệnh sau đây
. Nếu quy trình Adapter for Envoy (Bộ chuyển đổi Apigee dành cho Chuyên gia) đang chạy, thì kết quả của những thay đổi sau
sẽ liệt kê lệnh đó.
ps -ef | grep apigee-remote-service-envoy
- Nếu tiện ích không chạy thì đó là nguyên nhân của vấn đề.
Độ phân giải
- Nếu quy trình của Bộ chuyển đổi Apigee dành cho Chuyên viên tiếp thị không chạy, hãy bắt đầu Bộ chuyển đổi Apigee dành cho Đại sứ.
- Hãy gửi một yêu cầu API khác và xác minh xem vấn đề đã được khắc phục hay chưa.
Trường hợp 2: Quy trình của bộ chuyển đổi không theo dõi trên cổng cụ thể
Nếu Bộ chuyển đổi Apigee cho quy trình Chuyên viên không nghe trên cổng cụ thể, thì lỗi này có thể xảy ra.
Nếu quy trình của Bộ chuyển đổi Apigee dành cho Envoy đang chạy, hãy xác minh rằng có một ổ cắm đang nghe
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
Kết quả mẫu:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
Nếu không có cổng nghe trên cổng 5000, đó có thể là nguyên nhân gây ra sự cố này.
Độ phân giải
- Hãy dừng Bộ chuyển đổi Apigee cho Envoy rồi bắt đầu lại.
- Hãy gửi một yêu cầu API khác và xác minh xem vấn đề đã được khắc phục hay chưa.
Tình huống số 3: Khả năng kết nối mạng giữa Envoy và Bộ chuyển đổi Apigee dành cho Envoy
- Xác minh kết nối mạng giữa Envoy và Bộ chuyển đổi Apigee cho Envoy:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
Liệu telnet có thể kết nối TCP với Bộ chuyển đổi Apigee dành cho Envoy hay không kết quả tương tự như sau sẽ được hiển thị:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- Nếu bạn nhận thấy lỗi
Connection timed out
với telnet, thì điều đó cho biết Đã xảy ra vấn đề về kết nối mạng giữa Envoy và Apigee Adapter for Envoy.
Độ phân giải
Nếu bạn gặp vấn đề về khả năng kết nối mạng giữa Envoy và Bộ chuyển đổi Apigee for Envoy, vui lòng tương tác với nhóm mạng và cố gắng giải quyết vấn đề.
Nếu sự cố vẫn tiếp diễn, hãy chuyển đế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 sự cố vẫn tiếp diễn sau khi làm theo các hướng dẫn trên, hãy thu thập thông tin chẩn đoán sau rồi liên hệ với Bộ phận hỗ trợ Apigee Edge:
-
Sản phẩm Apigee đã dùng:
Ví dụ: Apigee Edge Cloud, Apigee OPDK, kết hợp Apigee, Apigee X
- Tổ chức và môi trường Apigee
Đọc định nghĩa sản phẩm API bằng API Edge:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
Tài liệu tham khảo: API Apigee Edge
Bắt đầu một phiên theo dõi trong proxy API
remote-service
bằng cách sử dụng Giao diện người dùng Apigee Edge. Tái tạo sự cố này và chia sẻ tệp XML của phiên Theo dõi.Bộ chuyển đổi Apigee dành cho nhật ký của Envoy (toàn bộ nhật ký 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
Hoạt động 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
- Yêu cầu API được gửi đến proxy Envoy bằng lệnh
curl
(kết quả đầy đủ của lệnhcurl
):curl -v ENVOY_PROXY_ENDPOINT
- Yêu cầu API được gửi đến dịch vụ đích bằng lệnh
curl
(lệnh hoàn chỉnh kết quả của lệnhcurl
):curl -v TARGET_SERVICE_ENDPOINT