การแก้ปัญหา

คุณกำลังดูเอกสารประกอบของ 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 อย่างเป็นระบบคือการทำงานจากเป้าหมายออกไปด้านนอก

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

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

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

Sidecar แบ็กเอนด์

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

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

เข้าถึงเวิร์กโหลดผ่าน Sidecar โดยทำดังนี้

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

หรือหากเปิดใช้ mTLS ของ 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

เกตเวย์ (หรือ Sidecar ส่วนหน้า)

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

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

หรือหากเปิดใช้ mTLS ของ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

คีย์ 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 ของคุณ

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

  1. เริ่มบริการระยะไกลพร้อมการบันทึกที่ debug level ดูการตั้งค่าระดับบันทึกของบริการระยะไกล

    ใช้-l debugในบรรทัดคำสั่ง เช่น

    apigee-remote-service-envoy -l debug
  2. พยายามเข้าถึงเป้าหมายและตรวจสอบบันทึก

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

    Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: []
    Selected: [helloworld]
    Eliminated: [helloworld2 doesn't match path: /hello]
    
  3. การตั้งค่าระดับบันทึกของบริการระยะไกล

    คุณสามารถใช้ Flag บรรทัดคำสั่งเพื่อเริ่มบริการระยะไกลในโหมดการแก้ไขข้อบกพร่องต่อไปนี้โหมดใดโหมดหนึ่งตามลำดับความละเอียด โดยที่ debug มีความละเอียดมากที่สุดและ error มีความละเอียดน้อยที่สุด

    • debug - โหมดการบันทึกแบบละเอียดที่สุด
    • info - ค่าเริ่มต้น
    • warn
    • error - โหมดการบันทึกที่ละเอียดน้อยที่สุด

    เช่น หากต้องการเริ่มบริการที่ระดับ debug ให้ทำดังนี้

    apigee-remote-service-envoy -l debug