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
Envoy Proxy không hoạt động với lỗi HTTP 403 Forbidden
khi được gọi thông qua Apigee Adapter for Envoy (Bộ chuyển đổi API dành cho Envoy).
Thông báo lỗi
Thông báo lỗi sau đây 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:
Nguyên nhân | Nội dung 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 chưa được bật cho môi trường cụ thể. | Người dùng Edge Public 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 không được thêm vào sản phẩm API trong tài nguyên API. | Người dùng Edge Public và Private Cloud |
Thiếu tên máy chủ trong sản phẩm API | Thiếu tên máy chủ được cung cấp trong yêu cầu API ứng dụng trong sản phẩm API thuộc mục tiêu dịch vụ từ xa của Apigee. | Người dùng Edge Public và Private Cloud |
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 Public và Private Cloud |
Khoá API không hợp lệ | Khoá API được truyền trong yêu cầu không hợp lệ. | Người dùng Edge Public và Private Cloud |
Apigee Adapter for Envoy không thể giao tiếp với proxy API dịch vụ từ xa | Bộ chuyển đổi Apigee for Envoy không thể giao tiếp với proxy API dịch vụ từ xa. | Người dùng Edge Public và Private Cloud |
Proxy đại diện không thể liên lạc với Bộ chuyển đổi Apigee dành cho Envoy | Proxy của đối tác không thể liên lạc với Bộ chuyển đổi Apigee dành cho Đối tác | Người dùng Edge Public 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 Forbidden
từ 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 rằng bạn đã bật tính năng nhật ký gỡ lỗi trong Apigee Adapter for Envoy (Bộ chuyển đổi Apigee dành cho 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 dành 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 một 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
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 (Bộ chuyển đổi Apigee dành cho đại diện) 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
Mẫu kết quả 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-1
trong bộ chuyển đổi Apigee dành cho Envoy.Để biết thêm thông tin về Bộ chuyển đổi Apigee dùng để ghi nhật ký 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 yêu cầu API, thì rất có thể là Sản phẩm API cụ thể đó chưa được bật cho một môi trường cụ thể mà bạn đang thực hiện lệnh gọi API.
- 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 Publish > API products (Xuất bản > 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 đang đưa ra các yêu cầu API đã được 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ì đó chính là nguyên nhân gây ra sự cố 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 Giao diện người dùng Edge.
- Trên trang Publish > API products (Xuất bản > 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 trang 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 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
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 bộ chuyển đổi Apigee dành cho nhật ký 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
Mẫu kết quả 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)
Kết quả mẫu cho thấy thông báo:
no path: /echo1
Lỗi 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 nhật ký gỡ lỗi của Apigee Adapter for Envoy (Trình chuyển đổi Apigee dành cho Envoy), thì đó chính là nguyên nhân của sự cố này. Nếu không, hãy chuyển đến phầ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ể, 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 Publish > API products (Xuất bản > 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 trang Sản phẩm API > Tên sản phẩm, hãy nhấp vào Chỉnh sửa.
- Trong ngăn API resources (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ý Envoy và đợi cho đến khi bộ chuyển đổi Apigee cho 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 kết quả khắc phục.
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 cụ thể mà Envoy Proxy sử dụng.
Chẩn đoán
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 bộ chuyển đổi Apigee dành cho nhật ký 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
Mẫu kết quả 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ủ và cổng
httpbin1:8080
không được tìm thấy trong sản phẩm APIENVOY-PRODUCT-1
.- Nếu nhật ký Apigee Adapter for Envoy chứa một mục nhập có thông báo
no targets: HOSTNAME:PORT
trong khi cho phép yêu cầu, thì đây chính là nguyên nhân của sự cố. Nếu không, hãy chuyển đến phần Nguyên nhân: Thiếu khoá API trong tiêu đề yêu cầu.
Độ phân giải
Nếu tổ hợp tên máy chủ và cổng mục tiêu không được thêm 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 Publish > API products (Xuất bản > 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 trang Sản phẩm API > Tên sản phẩm, hãy nhấp vào Chỉnh sửa.
Trong ngăn API Apigee remote service target (Mục tiêu dịch vụ từ xa API), hãy thêm tên máy chủ và cổng mục tiêu rồi nhấp vào Save (Lưu).
Nếu bạn không thấy mục Apigee từ xa target (Mục tiêu dịch vụ từ xa API) trong giao diện người dùng, hãy thêm một thuộc tính tuỳ chỉnh vào sản phẩm API có tên
apigee-remote-service-targets
rồi thêm giá trị 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 tác vụ trên, hãy theo dõi nhật ký Apigee Adapter for Envoy (Bộ chuyển đổi Apigee cho Envoy) và đợi cho đế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 kết quả khắc phục.
Nguyên nhân: Thiếu khoá API trong tiêu đề 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 đề yêu cầu.
Chẩn đoán
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 (Bộ chuyển đổi Apigee dành cho đại diện) và xác minh rằng bạn thấy thông báo
[missing authentication]
trong phầnAuthenticate error
.Mẫu kết quả 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
Kết quả mẫu hiển thị ở 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 truyền dưới dạng một phần của tiêu đề 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 điệp
[missing authentication]
trong phầnAuthenticate error
, thì đây chính là nguyên nhân của 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ý của Apigee Adapter for Envoy (Bộ chuyển đổi Apigee dành cho đại diện), hãy thực hiện các bước sau để khắc phục vấn đề:
- Kiểm tra xem ứng dụng đã gửi khoá API hay chưa bằ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 Bộ chuyển đổi Apigee dành cho Envoy và xác minh rằng tên tiêu đề của 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-key
Trong ví dụ trên, tên tiêu đề của 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 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 đề khoá API đã cập nhật, đồng thời gửi một yêu cầu API khác và xác minh xem vấn đề 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 đề yêu cầu.
Chẩn đoán
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 (Bộ chuyển đổi Apigee dành cho đại diện) và xác minh rằng bạn thấy thông báo
[permission denied]
trong phầnAuthenticate error
. Thông tin này thường hiển thị sau khi Trình chuyển đổi tìm nạp Khoá API và được biểu thị bằng thông báofetchToken fetching: API_KEY
.Mẫu kết quả 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ì tức là Khoá API được truyền trong yêu cầu không hợp lệ và chính là nguyên nhân của sự cố. Nếu không, hãy truy cập 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.
Độ phân giải
Nếu bạn thấy thông báo [permission denied]
ở phần Authenticate
error
trong nhật ký Apigee Adapter for Envoy (Bộ chuyển đổi Apigee dành cho đại diện), hãy làm theo các bước sau để khắc phục vấn đề:
- Kiểm tra khoá API được gửi trong yêu cầu API với giá trị khoá API tìm thấy 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à nếu bạn vẫn gặp lỗi HTTP
403
, vui lòng liên hệ với Bộ phận hỗ trợ API Edge để điều tra thêm.
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 cho Envoy không thể giao tiếp với Proxy API dịch vụ từ xa nếu máy chủ lưu trữ dịch vụ từ xa được định cấu hình không hợp lệ.
Chẩn đoán
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 bộ chuyển đổi Apigee dành cho nhật ký Envoy và xác minh rằng bạn thấy thông báo sau:
Error retrieving products: REQUEST_URI: no such host
Mẫu kết quả 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, Bộ chuyển đổi Apigee cho 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 URL proxy API máy chủ từ xa không hợp lệ như được biểu thị do lỗi
no such host
. - Nếu nhật ký Apigee Adapter for Envoy chứa mục nhập nhật ký có thông báo
no such host
, thì đây chính là nguyên nhân của vấn đề. Nếu không, hãy chuyển đến Nguyên nhân: Proxy Envoy không thể giao tiếp với Bộ chuyển đổi Apigee dành cho Envoy.
Độ phân giải
Nếu các lỗi trên xuất hiện trong nhật ký của Apigee Adapter for Envoy (Bộ chuyển đổi Apigee dành cho sinh viên), hãy thực hiện các bước sau để khắc phục vấn đề:
Kiểm tra tệp cấu hình Bộ chuyển đổi Apigee dành cho Envoy và xác minh rằng URL proxy API dịch vụ từ xa đã cung cấp là hợp lệ.
Nếu không, hãy dừng Apigee Adapter for Envoy, sửa URL proxy API dịch vụ từ xa trong tệp cấu hình, khởi động Apigee Adapter for Envoy rồi gửi một yêu cầu API khác và xác minh kết quả khắc phục.
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 chưa, hãy triển khai proxy APIremote-service
trong 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 Bộ chuyển đổi Apigee for Envoy và điểm cuối của proxy API
remote-service
. Nếu phát hiện thấy bất kỳ vấn đề nào về kết nối mạng, hãy liên hệ với nhóm kết nối 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 Bộ chuyển đổi Apigee dành cho Envoy
Chẩn đoán
Thực hiện các bước sau để chẩn đoán vấn đề:
Đảm bảo bạn đã bật tính năng nhật ký gỡ lỗi trong Envoy. Nếu không, hãy dừng Envoy rồi khởi động lại, bật nhật ký gỡ lỗi. Sau đó, hãy gửi một yêu cầu API khác.
Hoạt động triển khai độc lập:
envoy -c envoy-config.yaml -l debug
Hoạt động triển khai dựa trên CRM/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ý của Apigee Adapter for Envoy (Bộ chuyển đổi Apigee) và xác minh rằng có một mục nhập nhật ký kèm theo thông báo:
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
Tiếp theo là:
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
Mẫu kết quả 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 bộ chuyển đổi Apigee dành cho Envoy vì lý do
connection failure
. - Có nhiều lý do dẫn đến
connection failure
. Hãy cùng xem xét từng trường hợp.
Trường hợp 1: Quy trình của bộ chuyển đổi không chạy
Nếu quy trình Bộ chuyển đổi Apigee cho Envoy không chạy, thì lỗi này có thể xảy ra.
- Xác minh rằng quy trình Bộ chuyển đổi Apigee cho Envoy đang chạy bằng cách thực thi lệnh sau. Nếu quy trình Bộ chuyển đổi Apigee cho Envoy đang chạy, kết quả của lệnh sau sẽ liệt kê quy trình này.
ps -ef | grep apigee-remote-service-envoy
- Nếu trang web không chạy thì đó chính là nguyên nhân của vấn đề.
Độ phân giải
- Nếu quy trình Bộ chuyển đổi Apigee cho Envoy không chạy, hãy khởi động Bộ chuyển đổi Apigee dành cho Envoy.
- 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 lắng nghe trên cổng cụ thể
Nếu quy trình Bộ chuyển đổi Apigee cho Envoy không lắng nghe trên cổng cụ thể, thì lỗi này có thể xảy ra.
Nếu quy trình Apigee Adapter for Envoy (Bộ chuyển đổi Apigee cho Envoy) đang chạy, hãy xác minh rằng có một ổ cắm đ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
Ví dụ về mã được tạo:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
Nếu không có ổ cắm 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 bộ chuyển đổi Apigee dành cho Envoy rồi khởi động 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.
Trường hợp 3: Kết nối mạng giữa Envoy và bộ chuyển đổi Apigee của Envoy
- Xác minh 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ể kết nối TCP với bộ chuyển đổi Apigee cho Envoy, thì một kết quả tương tự như sau sẽ hiển thị:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- Nếu bạn quan sát thấy lỗi
Connection timed out
với telnet, thì tức là có sự cố kết nối mạng giữa Envoy và Apigee Adapter for Envoy (Bộ chuyển đổi 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 hỗ trợ 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 sự cố vẫn tiếp diễn sau khi 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 Bộ phận hỗ trợ Apigee:
-
Sản phẩm Apigee đã được sử dụng:
Ví dụ: Apigee Edge Cloud, Apigee OPDK, Apigee kết hợp, Apigee X
- Môi trường và tổ chức 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: Apigee Edge API
Bắt đầu phiên theo dõi trong proxy API
remote-service
bằng giao diện người dùng Apigee Edge. Tái hiện sự cố này và chia sẻ tệp XML của phiên truy vết.Tài liệu tham khảo: Sử dụng công cụ Theo dõi | Apigee Edge
Bộ chuyển đổi Apigee dành cho nhật ký Envoy (nhật ký hoàn chỉnh liên quan đến khoảng thời gian nhất định)
Hoạt động 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 CRM/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 tới 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ụ mục tiêu bằng lệnh
curl
(kết quả đầy đủ của lệnhcurl
):curl -v TARGET_SERVICE_ENDPOINT