การแก้ปัญหา

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

ข้อผิดพลาด Istio 404 (Not Found)

การแก้ไขข้อบกพร่อง 404 (ไม่พบ) ใน Istio อาจเป็นเรื่องน่าหงุดหงิด เราหวังว่าวิธีนี้จะช่วยให้คุณเริ่มติดตามสิ่งที่ผิดปกติได้

เกตเวย์ไวลด์การ์ดขัดแย้งกัน

มีคําจํากัดความของเกตเวย์ที่ใช้ค่าโฮสต์ไวลด์การ์ด "*" ได้เพียง 1 รายการเท่านั้น หากคุณติดตั้งใช้งานอย่างอื่นที่มีเกตเวย์ไวลด์การ์ดแล้ว การเรียกไคลเอ็นต์จะล้มเหลวโดยมีสถานะ 404

ตัวอย่าง

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

หากเป็นเช่นนั้น คุณจะต้องลบหรือเปลี่ยนแปลงเกตเวย์ใดเกตเวย์หนึ่งที่ขัดแย้งกัน

ติดตามจุดที่เส้นทางใช้งานไม่ได้

Istio มีลักษณะคล้ายหอมหัวใหญ่ (หรืออาจจะเป็นยักษา) โดยมีชั้นต่างๆ วิธีแก้ไขข้อบกพร่อง 404 อย่างเป็นระบบคือการทำงานออกจากเป้าหมาย

ภาระงานแบ็กเอนด์

ยืนยันว่าคุณเข้าถึงภาระงานจากไฟล์ช่วยเหลือได้ โดยทำดังนี้

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

ไฟล์ช่วยเหลือแบ็กเอนด์

ตั้งค่าที่อยู่สำหรับรับบริการและรับที่อยู่ IP ของพ็อดภาระงาน

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

เข้าถึงภาระงานผ่านไฟล์ช่วยเหลือได้ดังนี้

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

หรือหากเปิดใช้ Istio mTLS ไว้ ให้ทำดังนี้

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

เกตเวย์ (หรือไฟล์ช่วยเหลือของฟรอนท์เอนด์)

เข้าถึงบริการจากเกตเวย์ได้ดังนี้

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

หรือหากเปิดใช้ Istio mTLS ไว้ ให้ทำดังนี้

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

ไม่มีข้อมูลวิเคราะห์

หากคุณไม่เห็นข้อมูลวิเคราะห์ใน UI ของ Analytics ให้ลองพิจารณาสาเหตุที่เป็นไปได้ต่อไปนี้

  • การใช้งาน Apigee อาจล่าช้า 2-3 นาที
  • กำหนดค่าบันทึกการเข้าถึง gRPC ของ Envoy ไม่ถูกต้อง
  • Envoy ไม่สามารถเข้าถึงบริการระยะไกล
  • บริการระยะไกลอัปโหลดไม่สำเร็จ

ไม่มีคีย์ API ไม่ถูกต้องหรือคีย์ API ไม่ถูกปฏิเสธ

หากการตรวจสอบคีย์ API ทำงานไม่ถูกต้อง ให้พิจารณาสาเหตุที่เป็นไปได้ต่อไปนี้

พร็อกซีโดยตรง

ตรวจสอบการกำหนดค่าของ ext-authz

ไฟล์ช่วยเหลือ
  • ตรวจสอบว่าได้กำหนดค่า Listener สำหรับการสกัดกั้นแล้ว
  • ตรวจสอบการกำหนดค่าของ ext-authz

ระบบกำลังตรวจสอบและอนุญาตคำขอที่ไม่ถูกต้อง

  • กำหนดค่าบริการระยะไกลสำหรับการเปิดไม่สำเร็จ
  • ไม่ได้กำหนดค่า Envoy สำหรับการตรวจสอบ RBAC

โปรดดูข้อมูลเกี่ยวกับวิธีแก้ไขปัญหาเหล่านี้ในหัวข้อเอกสารประกอบจาก Envoy ต่อไปนี้ การให้สิทธิ์ภายนอก และดูข้อมูลเกี่ยวกับพร็อพเพอร์ตี้ failure_mode_allow พร็อพเพอร์ตี้นี้ช่วยให้คุณเปลี่ยนลักษณะการทำงานของตัวกรองเมื่อพบข้อผิดพลาดได้

JWT ที่สูญหายหรือไม่ถูกต้องซึ่งไม่ถูกปฏิเสธ

สาเหตุที่เป็นไปได้คือไม่มีการกำหนดค่าตัวกรอง Envoy JWT

คีย์ API ที่ถูกต้องล้มเหลว

สาเหตุที่น่าจะเป็น

  • Envoy เข้าถึงบริการระยะไกลไม่ได้
  • ข้อมูลเข้าสู่ระบบของคุณไม่ถูกต้อง
  • ไม่ได้กำหนดค่าผลิตภัณฑ์ Apigee API สำหรับเป้าหมายและสภาพแวดล้อม

ขั้นตอนการแก้ปัญหา

ตรวจสอบผลิตภัณฑ์ API ของคุณใน Apigee

  • มีการเปิดใช้สำหรับสภาพแวดล้อมของคุณไหม (ทดสอบเทียบกับเวอร์ชันที่ใช้งานจริง)

    ผลิตภัณฑ์ต้องเชื่อมโยงกับสภาพแวดล้อมเดียวกันกับบริการระยะไกลของคุณ

  • การกำหนดเป้าหมายเชื่อมโยงกับเป้าหมายที่คุณกำลังเข้าถึงหรือไม่

    ตรวจสอบส่วนเป้าหมายบริการระยะไกลของ Apigee โปรดทราบว่าชื่อบริการต้องเป็นชื่อโฮสต์แบบเต็ม หากเป็นบริการ Istio ชื่อจะเป็น helloworld.default.svc.cluster.localcode> ซึ่งแสดงบริการ helloworld ในเนมสเปซ default

  • เส้นทางทรัพยากรตรงกับคำขอของคุณไหม

    โปรดทราบว่าเส้นทางอย่างเช่น / หรือ /** จะตรงกับเส้นทางใดก็ได้ คุณยังใช้ไวลด์การ์ด "*" หรือ "**" สำหรับการจับคู่ได้ด้วย

  • คุณมีแอปนักพัฒนาซอฟต์แวร์ไหม

    ผลิตภัณฑ์ API ต้องเชื่อมโยงกับแอปนักพัฒนาซอฟต์แวร์เพื่อตรวจสอบคีย์

ตรวจสอบคำขอของคุณ

  • คุณส่งคีย์ผู้บริโภคใน x-api-key header หรือไม่

    ตัวอย่าง

    curl http://localhost/hello -H "x-api-key: wwTcvmHvQ7Dui2qwj43GlKJAOwmo"
  • คุณใช้คีย์ผู้บริโภคที่ดีหรือไม่

    ตรวจสอบว่าข้อมูลเข้าสู่ระบบจากแอปที่คุณใช้อยู่ได้รับอนุมัติสำหรับผลิตภัณฑ์ API ของคุณ

ตรวจสอบบันทึกบริการระยะไกล

  • เริ่มต้นบริการระยะไกลด้วยการบันทึกที่ debug level

    ใช้ตัวเลือก -l debug ในบรรทัดคำสั่ง

  • พยายามเข้าถึงเป้าหมายและตรวจสอบบันทึก

    ตรวจสอบบันทึกเพื่อหาบรรทัดที่มีลักษณะดังนี้

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]