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

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

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

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

  3. 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.
  4. Thực hiện các bước sau để xác minh điều này:
    1. Đăng nhập vào Giao diện người dùng Edge.
    2. 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.
    3. 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.
    4. 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.
  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 Giao diện người dùng Edge.
  2. 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.
  3. Trên trang 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 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ể 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 đề:

  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 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 API ENVOY-PRODUCT-1.

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

  1. Đăng nhập vào Giao diện người dùng Edge.
  2. 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.
  3. Trên trang 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 API resources (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ý 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 đề:

  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 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 API ENVOY-PRODUCT-1.

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

  1. Đăng nhập vào Giao diện người dùng Edge.
  2. 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.
  3. Trên trang 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 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": []
    }
    
  5. 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 đề:

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

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

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

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

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

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

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

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

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

  1. 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
          
  2. 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 API remote-service trong môi trường Edge có liên quan rồi thử lại.
  3. 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 đề:

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

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

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

Độ phân giải

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

  1. Dừng bộ chuyển đổi Apigee dành cho Envoy rồi khởi động 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.

Trường hợp 3: Kết nối mạng giữa Envoy và bộ chuyển đổi Apigee của Envoy

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

  1. Sản phẩm Apigee đã được sử dụng:

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

  2. Môi trường và tổ chức 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: Apigee Edge API

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

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