คุณกำลังดูเอกสารประกอบของ 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การกำหนดค่า
- ตรวจสอบว่าได้กำหนดค่า 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 ของคุณ
ตรวจสอบบันทึกของบริการระยะไกล
- เริ่มบริการระยะไกลพร้อมการบันทึกที่
debug levelดูการตั้งค่าระดับบันทึกของบริการระยะไกลใช้
-l debugในบรรทัดคำสั่ง เช่นapigee-remote-service-envoy -l debug
- พยายามเข้าถึงเป้าหมายและตรวจสอบบันทึก
ตรวจสอบบันทึกเพื่อหาบรรทัดที่มีลักษณะดังนี้
Resolve api: helloworld.default.svc.cluster.local, path: /hello, scopes: [] Selected: [helloworld] Eliminated: [helloworld2 doesn't match path: /hello]
debug- โหมดการบันทึกแบบละเอียดที่สุดinfo- ค่าเริ่มต้นwarnerror- โหมดการบันทึกที่ละเอียดน้อยที่สุด
การตั้งค่าระดับบันทึกของบริการระยะไกล
คุณสามารถใช้ Flag บรรทัดคำสั่งเพื่อเริ่มบริการระยะไกลในโหมดการแก้ไขข้อบกพร่องต่อไปนี้โหมดใดโหมดหนึ่งตามลำดับความละเอียด โดยที่ debug มีความละเอียดมากที่สุดและ error มีความละเอียดน้อยที่สุด
เช่น หากต้องการเริ่มบริการที่ระดับ debug ให้ทำดังนี้
apigee-remote-service-envoy -l debug