การแก้ปัญหา

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

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

การแก้ไขข้อบกพร่องของข้อผิดพลาด 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 ของข้อมูลวิเคราะห์ ให้พิจารณาสาเหตุที่เป็นไปได้ต่อไปนี้

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ผลิตภัณฑ์ต้องผูกกับสภาพแวดล้อมเดียวกับบริการระยะไกล

  • ผลิตภัณฑ์ผูกกับเป้าหมายที่คุณกำลังเข้าถึงอยู่หรือไม่

    ตรวจสอบส่วนเป้าหมายบริการระยะไกลของ Apigee โปรดจำไว้ว่าชื่อบริการต้องเป็นa ชื่อโฮสต์แบบสมบูรณ์ในตัวเอง หากเป็นบริการ 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]