Khắc phục sự cố

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

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

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

Xung đột cổng vào ký tự đại diện

Chỉ có thể có một định nghĩa Cổng vào sử dụng ký tự đại diện "*" máy chủ lưu trữ. Nếu bạn đã đã triển khai bất kỳ thứ gì khác bao gồm Cổng ký tự đại diện, các lệnh gọi ứng dụng sẽ không thành công 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 sẽ cần phải xoá hoặc thay đổi một trong các cổng vào xung đột.

Theo dõi nơi tuyến đường bị lỗi

Istio giống như một củ hành (hoặc có thể là một Yêu tinh), nó có nhiều lớp. Một cách gỡ lỗi có hệ thống 404 là hướng ra ngoài mục tiêu.

Khối lượng 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ừ tệp trợ giúp:

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

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

Đặt địa chỉ dịch vụ của bạn và lấy địa chỉ IP của nhóm khối lượng công việc.

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

Truy cập vào khối lượng công việc thông qua trợ giúp:

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

Hoặc nếu Istio mTLS đã được bật:

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 vào (hoặc một tệp trợ giúp giao diện người dùng)

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

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

Hoặc nếu Istio mTLS đã được bật:

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 xem xét những nguyên nhân có thể sau đây:

  • Lượng dữ liệu để cung cấp Apigee có thể bị trễ vài phút
  • Nhật ký truy cập gRPC của Envoy không được định cấu hình đúng cách
  • Đặc phái viên không thể kết nối 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 tính năng xác thực khoá API không hoạt động đúng cách, hãy xem xét những nguyên nhân sau đây:

Proxy trực tiếp

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

Sidecar
  • Hãy đảm bảo định cấu hình trình nghe để chặn.
  • Kiểm tra cấu hình ext-authz.

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

  • Dịch vụ từ xa được định cấu hình khi không mở được
  • Đại diện chưa được định cấu hình để kiểm tra RBAC

Để biết thông tin về cách giải quyết những vấn đề này, hãy tham khảo tài liệu sau đây của Đại sứ chủ đề: Uỷ quyền bên ngoài, và tham khảo thông tin về thuộc tính failure_mode_allow. Cơ sở lưu trú này cho phép bạn thay đổi hành vi của bộ lọc đối với 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ộ lọc Envoy JWT chưa được định cấu hình.

Không nhập được khoá API hợp lệ

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

  • Người đại diện không thể kết nối 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 thiết lập 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 chính thức) không?

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

  • Có liên quan đến mục tiêu mà bạn đang truy cập không?

    Xem phần Mục tiêu dịch vụ từ xa Apigee. Hãy nhớ rằng tên dịch vụ phải là tên máy chủ đủ điều kiện. Nếu đó là dịch vụ của Istio, tên sẽ có dạng như sau 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?

    Hãy nhớ 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ể sử dụng '*' hoặc '**' ký tự đại diện để 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 dành cho nhà phát triển để có thể kiểm tra khoá của sản phẩm đó.

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

  • Bạn có đang truyền Khoá người dùng 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 tiêu dùng tốt không?

    Đảm bảo Thông tin đăng nhập của ứng dụng 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 tuỳ 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 của bạn và kiểm tra nhật ký

    Kiểm tra nhật ký để tìm 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. Đặt cấp độ nhật ký dịch vụ từ xa

    Khi sử dụng cờ dòng lệnh, bạn có thể khởi động dịch vụ từ xa bằng một trong các lệnh gỡ lỗi sau các chế độ, theo thứ tự độ chi tiết, trong đó debug là chi tiết nhất và error là í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ý chi tiết nhất.

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

    apigee-remote-service-envoy -l debug