การแก้ปัญหา

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

ข้อผิดพลาด Istio 404 (ไม่พบ)

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

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

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

ตัวอย่าง

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

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

ติดตามจุดที่เส้นทางขัดข้อง

อิสติโอมีลักษณะคล้ายหอมใหญ่ (หรือบางทีอาจเป็นยักษา) เพราะมีเลเยอร์ วิธีแก้ไขข้อบกพร่องอย่างเป็นระบบ 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

Sidecar
  • ตรวจสอบว่าได้กำหนดค่า Listener สำหรับจุดตัดแล้ว
  • ตรวจสอบการกำหนดค่า ext-authz

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

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

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

JWT หายไปหรือใช้งานไม่ได้ ระบบไม่ปฏิเสธ

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

คีย์ API ที่ถูกต้องใช้งานไม่ได้

สาเหตุที่เป็นไปได้

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

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

ตรวจสอบผลิตภัณฑ์ 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 ของคุณ

ตรวจสอบบันทึก Remote Service

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

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

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

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

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