คุณกำลังดูเอกสารประกอบของ 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]