Khắc phục sự cố

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Lỗi 404 (Không tìm thấy) của Istio

Việc gỡ lỗi 404 (Không tìm thấy) trên Istio có thể gây khó chịu. Hy vọng điều này sẽ giúp bạn bắt đầu theo dõi nơi có thể xảy ra sự cố.

Xung đột Cổng nối ký tự đại diện

Chỉ có thể có một định nghĩa Cổng sử dụng giá trị máy chủ lưu trữ "*" đại diện. Nếu bạn đã triển khai bất kỳ thứ gì khác có chứa Cổng có ký tự đại diện, thì các lệnh gọi của ứng dụng sẽ gặp lỗi với trạng thái 404.

Ví dụ:

$ istioctl get gateways
GATEWAY NAME         HOSTS     NAMESPACE   AGE
bookinfo-gateway     *         default     20s
httpbin-gateway      *         default     3s

Nếu vậy, bạn cần xoá hoặc thay đổi một trong các cổng xung đột.

Theo dõi vị trí xảy ra lỗi trên tuyến đường

Istio giống như một củ hành (hoặc có lẽ là một con quỷ khổng lồ), nó có nhiều lớp. Cách gỡ lỗi 404 một cách có hệ thống là xử lý từ mục tiêu ra ngoài.

Tải công việc phụ trợ

Xác minh rằng bạn có thể truy cập vào khối lượng công việc từ vùng chứa phụ:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl localhost:80/headers

Tệp trợ giúp phụ trợ

Đặt địa chỉ dịch vụ và lấy địa chỉ IP của nhóm tải.

SERVICE=httpbin.default.svc.cluster.local:80
  POD_IP=$(kubectl get pod $WORKLOAD_POD -o jsonpath='{.status.podIP}')

Truy cập vào tải thông qua sidecar:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v http://$SERVICE/headers --resolve "$SERVICE:$POD_IP"

Hoặc nếu bạn bật mTLS của Istio:

kubectl exec $WORKLOAD_POD -c istio-proxy -- curl -v https://$SERVICE/headers --resolve "$SERVICE:$POD_IP" --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

Cổng (hoặc một sidecar giao diện người dùng)

Truy cập dịch vụ từ cổng:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v http://$SERVICE/header

Hoặc nếu bạn bật mTLS của Istio:

kubectl -n istio-system exec $GATEWAY_POD -- curl -v https://$SERVICE/headers --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem --insecure

Thiếu số liệu phân tích

Nếu bạn không thấy số liệu phân tích trong giao diện người dùng Analytics, hãy cân nhắc những nguyên nhân có thể xảy ra sau đây:

  • Quá trình tiếp nhận của Apigee có thể bị chậm trễ vài phút
  • Nhật ký truy cập gRPC của Envoy chưa được định cấu hình đúng cách
  • Envoy không kết nối được với Dịch vụ từ xa
  • Dịch vụ từ xa không tải lên được

Khoá API bị thiếu hoặc không hợp lệ không bị từ chối

Nếu quá trình xác thực khoá API không hoạt động đúng cách, hãy cân nhắc những nguyên nhân có thể xảy ra sau đây:

Proxy trực tiếp

Kiểm tra cấu hình ext-authz.

Sidecar
  • Đảm bảo rằng trình nghe được định cấu hình để chặn.
  • Kiểm tra cấu hình ext-authz.

Yêu cầu không hợp lệ đang được kiểm tra và cho phép

  • Đã định cấu hình Dịch vụ từ xa để mở khi thất bại
  • Envoy chưa được định cấu hình để kiểm tra RBAC

Để biết thông tin về cách giải quyết các vấn đề này, hãy tham khảo chủ đề sau đây trong tài liệu về Envoy: Uỷ quyền bên ngoài và tham khảo thông tin về thuộc tính failure_mode_allow. Thuộc tính này cho phép bạn thay đổi hành vi của bộ lọc khi gặp lỗi.

JWT bị thiếu hoặc không hợp lệ không bị từ chối

Nguyên nhân có thể là do bạn chưa định cấu hình bộ lọc JWT Envoy.

Khoá API hợp lệ không hoạt động

Nguyên nhân có thể xảy ra

  • Envoy không kết nối được với dịch vụ từ xa
  • Thông tin đăng nhập của bạn không hợp lệ
  • Sản phẩm API Apigee chưa được định cấu hình cho mục tiêu và môi trường

Các bước khắc phục sự cố

Kiểm tra Sản phẩm API của bạn trên Apigee

  • Tính năng này có được bật cho môi trường của bạn (thử nghiệm so với sản xuất) không?

    Sản phẩm phải được liên kết với cùng một môi trường như Dịch vụ từ xa của bạn.

  • Có bị ràng buộc với mục tiêu mà bạn đang truy cập không?

    Kiểm tra phần Mục tiêu dịch vụ từ xa của Apigee. Xin lưu ý rằng tên dịch vụ phải là tên máy chủ đủ điều kiện. Nếu đó là một dịch vụ Istio, tên sẽ có dạng như helloworld.default.svc.cluster.localcode> – đại diện cho dịch vụ helloworld trong không gian tên default.

  • Đường dẫn tài nguyên có khớp với yêu cầu của bạn không?

    Xin lưu ý rằng một đường dẫn như / hoặc /** sẽ khớp với mọi đường dẫn. Bạn cũng có thể dùng ký tự đại diện "*" hoặc "**" để so khớp.

  • Bạn có Ứng dụng dành cho nhà phát triển không?

    Sản phẩm API phải được liên kết với một Ứng dụng nhà phát triển để kiểm tra các khoá của sản phẩm.

Kiểm tra yêu cầu của bạn

  • Bạn có đang truyền Consumer Key trong x-api-key header không

    Ví dụ:

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • Bạn có đang sử dụng Khoá người dùng phù hợp không?

    Đảm bảo rằng Thông tin đăng nhập từ Ứng dụng mà bạn đang sử dụng được phê duyệt cho Sản phẩm API của bạn.

Kiểm tra nhật ký Dịch vụ từ xa

  1. Bắt đầu Dịch vụ từ xa bằng cách ghi nhật ký tại debug level. Xem phần Đặt cấp độ nhật ký dịch vụ từ xa.

    Sử dụng lựa chọn -l debug trên dòng lệnh. Ví dụ:

    apigee-remote-service-envoy -l debug
  2. Cố gắng truy cập vào mục tiêu và kiểm tra nhật ký

    Kiểm tra nhật ký để tìm một dòng có dạng như sau:

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]
    
  3. Thiết lập cấp độ nhật ký dịch vụ từ xa

    Bằng cách sử dụng cờ dòng lệnh, bạn có thể khởi động dịch vụ từ xa ở một trong các chế độ gỡ lỗi sau đây, theo thứ tự chi tiết, trong đó debug là chi tiết nhất và error là ít chi tiết nhất:

    • debug – Chế độ ghi nhật ký chi tiết nhất.
    • info – Mặc định.
    • warn
    • error – Chế độ ghi nhật ký ít chi tiết nhất.

    Ví dụ: để bắt đầu dịch vụ ở cấp debug:

    apigee-remote-service-envoy -l debug