Proxy Envoy không thành công với lỗi HTTP 403 Forbidden trong Apigee Adapter for Envoy

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

  1. 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
    
  2. 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ố:

  1. Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
  2. 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ý.

  3. 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.
  4. Hãy thực hiện các bước sau để xác minh điều này:
    1. Đăng nhập vào Edge UI.
    2. 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.
    3. 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.
    4. 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.
  5. 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 đề:

  1. Đăng nhập vào Edge UI.
  2. 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.
  3. Trên sản phẩm API > Tên sản phẩm, hãy nhấp vào Chỉnh sửa.
  4. 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.
  5. 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ố:

  1. Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
  2. 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 API ENVOY-PRODUCT-1

  3. 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 đề:

  1. Đăng nhập vào Edge UI.
  2. 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.
  3. Trên sản phẩm API > Tên sản phẩm, hãy nhấp vào Chỉnh sửa.
  4. 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.
  5. 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ố:

  1. Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
  2. 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 API ENVOY-PRODUCT-1.

  3. 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 đề:

  1. Đăng nhập vào Edge UI.
  2. 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.
  3. Trên sản phẩm API > Tên sản phẩm, hãy nhấp vào Chỉnh sửa.
  4. 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": []
    }
    
  5. 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ố:

  1. Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
  2. 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 trong Authenticate 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.

  3. 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ục Authenticate 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 đề:

  1. 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 đề HTTP x-api-key.
  2. 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.

  3. 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ố:

  1. Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
  2. 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ần Authenticate 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áo fetchToken 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ệ.

  3. 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ục Authenticate 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 đề:

  1. 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.
  2. 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ệ.
  3. 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ố:

  1. Bật nhật ký gỡ lỗi như đã giải thích trong bước 2 ở trên.
  2. 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 .

  3. 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 đề:

  1. 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
          
  2. 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 API remote-service trong Edge liên quan môi trường xung quanh và thử lại.
  3. 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ố:

  1. Đả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
    
  2. 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.

  3. 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.

  1. 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
    
  2. Nếu tiện ích không chạy thì đó là nguyên nhân của vấn đề.

Độ phân giải

  1. 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ứ.
  2. 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

  1. Hãy dừng Bộ chuyển đổi Apigee cho Envoy rồi bắt đầu lại.
  2. 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

  1. 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 '^]'.
    
  2. 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:

  1. Sản phẩm Apigee đã dùng:

    Ví dụ: Apigee Edge Cloud, Apigee OPDK, kết hợp Apigee, Apigee X

  2. Tổ chức và môi trường Apigee
  3. Đọ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

  4. 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.

    Tham khảo: Sử dụng công cụ Theo dõi | Ứng dụng Apigee Edge

  5. 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
  6. Yêu cầu API được gửi đến proxy Envoy bằng lệnh curl (kết quả đầy đủ của lệnh curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. 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ệnh curl):
    curl -v TARGET_SERVICE_ENDPOINT