คุณกำลังดูเอกสารประกอบ 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
- ตรวจสอบว่าได้กำหนดค่า 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.local
code> - ซึ่งแสดงถึงบริการ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]