คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
พร็อกซี Envoy ทำงานไม่สำเร็จโดยมีข้อผิดพลาด HTTP 403 Forbidden
เมื่อเรียกใช้ผ่าน
อะแดปเตอร์ Apigee สำหรับ Envoy
ข้อความแสดงข้อผิดพลาด
ข้อความแสดงข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 03 Nov 2020 00:20:10 GMT server: istio-envoy
สาเหตุที่เป็นไปได้
พร็อกซี Envoy จะแสดงข้อผิดพลาด HTTP 403
หากเป็นไปตามเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้
เกิดขึ้น:
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
ไม่ได้เปิดใช้ผลิตภัณฑ์ API | ไม่ได้เปิดใช้ผลิตภัณฑ์ API สำหรับสภาพแวดล้อมที่เฉพาะเจาะจง | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ไม่มีเส้นทาง URI บริการเป้าหมายในผลิตภัณฑ์ API | ไม่มีเส้นทาง URI ของบริการเป้าหมายหรือไม่ได้เพิ่มลงในผลิตภัณฑ์ API ภายใต้ API ที่ไม่ซับซ้อน | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API | ชื่อโฮสต์ที่ระบุในคำขอ API ของไคลเอ็นต์ไม่มีในผลิตภัณฑ์ API ภายใต้ Apigee เป้าหมายบริการระยะไกล | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ไม่มีคีย์ API ในส่วนหัวของคำขอ | ไม่ส่งคีย์ API ในส่วนหัว HTTP x-api-key |
ผู้ใช้ Edge สาธารณะและ Private Cloud |
คีย์ API ไม่ถูกต้อง | คีย์ API ที่ส่งผ่านเป็นส่วนหนึ่งของคำขอไม่ถูกต้อง | ผู้ใช้ Edge สาธารณะและ Private Cloud |
อะแดปเตอร์ Apigee สำหรับ Envoy ทำไม่ได้ สื่อสารกับพร็อกซี API บริการระยะไกล | อะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้ | ผู้ใช้ Edge สาธารณะและ Private Cloud |
พร็อกซี Envoy ไม่สามารถสื่อสาร พร้อมอะแดปเตอร์ Apigee สำหรับ Envoy | พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้ | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ก่อนเริ่มต้น
- ยืนยันว่าคุณได้รับข้อความตอบกลับ
403 Forbidden
จาก พร็อกซี Envoy ดังตัวอย่างต่อไปนี้curl -i -H "x-api-key: $API_KEY" http://httpbin:8080/echo HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 12 Jan 2021 08:18:08 GMT server: envoy RBAC: access denied
เปิดใช้บันทึกการแก้ไขข้อบกพร่อง
ตรวจสอบว่าคุณได้เปิดใช้บันทึกการแก้ไขข้อบกพร่องในอะแดปเตอร์ Apigee for Envoy เพื่อบันทึกรายละเอียดเพิ่มเติมเกี่ยวกับ ข้อผิดพลาด หากไม่ใช่ ให้หยุดอะแดปเตอร์ Apigee สำหรับ Envoy แล้วเริ่มอีกครั้งโดยเปิดใช้บันทึกการแก้ไขข้อบกพร่อง โดยใช้คำสั่งต่อไปนี้
apigee-remote-service-envoy -c config.yaml -l debug
สาเหตุ: ไม่ได้เปิดใช้ผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากผลิตภัณฑ์ API ที่ Envoy Proxy ใช้ไม่ได้เปิดใช้ใน สภาพแวดล้อมเฉพาะที่มีการเรียกใช้ API
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
- ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึก Envoy และยืนยันว่าข้อความต่อไปนี้ปรากฏขึ้น
ในส่วน
Authorizing request
ให้ทำดังนี้ วันที่product: API_PRODUCT_NAME not found
ตัวอย่างเอาต์พุตของบันทึกการแก้ไขข้อบกพร่อง:
2021-01-12T08:18:08.124Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:18:08.124Z DEBUG auth/verify_api_key.go:106 fetchToken fetching: 7mQIG... 2021-01-12T08:18:08.589Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:18:08.589Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a0600), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746037188, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:18:08.589Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo target: httpbin:8080 - product: ENVOY-PRODUCT-1 not found
ตัวอย่างข้างต้นแสดงให้เห็นว่าไม่พบผลิตภัณฑ์ API
ENVOY-PRODUCT-1
ใน อะแดปเตอร์ Apigee สำหรับ Envoyโปรดดูข้อมูลเพิ่มเติมเกี่ยวกับอะแดปเตอร์ Apigee สำหรับการบันทึก Envoy ได้ที่ การบันทึก
- หากคุณเห็นข้อความนี้ขณะให้สิทธิ์คำขอ API มีความเป็นไปได้สูงว่า ผลิตภัณฑ์ API ที่ระบุไม่ได้เปิดใช้สำหรับสภาพแวดล้อมที่เฉพาะเจาะจงที่คุณใช้ ในการเรียก API
- โปรดทำตามขั้นตอนต่อไปนี้เพื่อยืนยันสิ่งนี้
- เข้าสู่ระบบ Edge UI
- ในหน้า เผยแพร่ > ผลิตภัณฑ์ API คลิกผลิตภัณฑ์ API เฉพาะที่คุณ ใช้สำหรับกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
- ตรวจสอบว่าสภาพแวดล้อมที่คุณส่งคำขอ API นั้น เปิดใช้ในผลิตภัณฑ์ API
- หากสภาพแวดล้อมที่เฉพาะเจาะจง ไม่ได้เปิดใช้ในผลิตภัณฑ์ API สาเหตุคือ สำหรับปัญหานี้
- หากสภาพแวดล้อมที่เจาะจงเปิดใช้อยู่ ให้ไปที่ สาเหตุ: ไม่มีเส้นทาง URI บริการเป้าหมายในผลิตภัณฑ์ API
ความละเอียด
หากไม่ได้เปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงในผลิตภัณฑ์ API โปรดทำตามขั้นตอนต่อไปนี้เพื่อ แก้ไขปัญหา
- เข้าสู่ระบบ Edge UI
- ในหน้า เผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API ที่คุณใช้ สำหรับการกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
- ในผลิตภัณฑ์ API > หน้าชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
- เปิดใช้งานสภาพแวดล้อมเฉพาะที่คุณต้องการสร้างคำขอ API โดยเลือก กับสภาพแวดล้อมที่เกี่ยวข้อง
- คลิกบันทึก
สาเหตุ: ไม่มีเส้นทาง URI บริการเป้าหมายในผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่มีการระบุเส้นทาง URI ของเป้าหมายในผลิตภัณฑ์ API ที่เฉพาะเจาะจงที่ใช้ โดย Envoy Proxy
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
-
ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึก Envoy และยืนยันว่าข้อความต่อไปนี้ ที่แสดงสำหรับผลิตภัณฑ์ API เฉพาะที่เชื่อมโยงกับเป้าหมายเฉพาะในส่วน
Authorizing request
:no path: REQUEST_URI_PATH
ตัวอย่างเอาต์พุตของบันทึกการแก้ไขข้อบกพร่อง:
2021-01-12T08:09:02.604Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:09:02.605Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:09:02.605Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:09:02.605Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo1 target: httpbin:8080 - product: ENVOY-PRODUCT-1 no path: /echo1 2021-01-12T08:09:02.605Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
เอาต์พุตตัวอย่างจะแสดงข้อความดังนี้
no path: /echo1
ค่านี้บ่งชี้ว่าไม่พบเส้นทาง
/echo1
ในผลิตภัณฑ์ APIENVOY-PRODUCT-1
- หากคุณเห็นข้อความ
no path: REQUEST_URI_PATH
ใน อะแดปเตอร์ Apigee สำหรับบันทึกการแก้ไขข้อบกพร่องของ Envoy ก็เป็นสาเหตุของปัญหานี้ หากไม่ ให้ไปที่ สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API
ความละเอียด
หากไม่ได้เพิ่ม URI คำขอที่เจาะจงลงในผลิตภัณฑ์ API สำหรับเป้าหมายที่เจาะจง ให้ทำดังนี้ ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
- เข้าสู่ระบบ Edge UI
- ในหน้า เผยแพร่ > ผลิตภัณฑ์ API คลิกผลิตภัณฑ์ API เฉพาะที่คุณ ใช้สำหรับกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
- ในผลิตภัณฑ์ API > หน้าชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
- ในแผงทรัพยากร API ให้เพิ่ม URI คำขอ API ไปยังผลิตภัณฑ์ API
- ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy และรอจนกว่าอะแดปเตอร์ Apigee สำหรับ Envoy จะดึงข้อมูลผลิตภัณฑ์ API ที่อัปเดตแล้ว หลังจากนั้นให้ส่งคำขอ API อีกครั้งเพื่อยืนยันการแก้ไข
สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้เพิ่มชื่อโฮสต์เป้าหมายและชุดค่าผสมของพอร์ตลงในรายการ ผลิตภัณฑ์ API ที่ Envoy Proxy ใช้
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึก Envoy และยืนยันว่าข้อความต่อไปนี้ ที่แสดงสำหรับผลิตภัณฑ์ API เฉพาะที่เชื่อมโยงกับเป้าหมายเฉพาะในส่วน
Authorizing request
:no targets: HOSTNAME:PORT
ตัวอย่างเอาต์พุตของบันทึกการแก้ไขข้อบกพร่อง:
2021-01-12T08:12:06.019Z DEBUG auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil) 2021-01-12T08:12:06.019Z DEBUG auth/auth.go:125 using api key from request 2021-01-12T08:12:06.019Z DEBUG auth/auth.go:157 Authenticate success: &auth.Context{Context:(*server.Handle r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"}, Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[] string{""}, APIKey:"7mQIG..."} 2021-01-12T08:12:06.019Z DEBUG product/manager.go:89 Authorizing request: products: [ENVOY-PRODUCT-1] scopes: [] operation: GET /echo target: httpbin1:8080 - product: ENVOY-PRODUCT-1 no targets: httpbin1:8080 2021-01-12T08:12:06.020Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
ตัวอย่างด้านบนแสดงให้เห็นว่าชื่อโฮสต์และพอร์ต
httpbin1:8080
รวมกัน ไม่พบในผลิตภัณฑ์ APIENVOY-PRODUCT-1
- หากบันทึกของอะแดปเตอร์ Apigee สำหรับ Envoy มีรายการที่มีข้อความ
no targets: HOSTNAME:PORT
ขณะให้สิทธิ์คำขอ ค่านี้จะเป็น ของปัญหา หากไม่ ให้ไปที่ สาเหตุ: ไม่มีคีย์ API ในส่วนหัวของคำขอ
ความละเอียด
หากไม่ได้เพิ่มชื่อโฮสต์เป้าหมายและชุดค่าผสมของพอร์ตลงในผลิตภัณฑ์ API ให้ดำเนินการ โดยทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
- เข้าสู่ระบบ Edge UI
- ในหน้า เผยแพร่ > ผลิตภัณฑ์ API คลิกผลิตภัณฑ์ API เฉพาะที่คุณ ใช้สำหรับกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
- ในผลิตภัณฑ์ API > หน้าชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
ในแผงเป้าหมายบริการระยะไกลของ Apigee ให้เพิ่มชื่อโฮสต์เป้าหมายและ พอร์ต และคลิกบันทึก
หากคุณไม่เห็นส่วนเป้าหมายบริการระยะไกล Apigee ใน UI เพิ่มแอตทริบิวต์ที่กำหนดเองลงในผลิตภัณฑ์ API โดยใช้ค่า ชื่อ
apigee-remote-service-targets
และเพิ่ม HOSTNAME:PORT ที่ใช้ Edge API เช่นcurl https://api.enterprise.apigee.com/v1/organizations/$ORG/apiproducts/$ENVOY_PRODUCT \ -X GET \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type:application/json" \ -d \ { "apiResources": [ "/echo", "/verifyApiKey" ], "approvalType": "auto", "attributes": [ { "name": "access", "value": "public" }, { "name": "apigee-remote-service-targets", "value": "localhost:8080" } ], "createdAt": 1610435989556, "createdBy": "---masked---", "description": "", "displayName": "ENVOY-PRODUCT-1", "environments": [ "test" ], "lastModifiedAt": 1612234134060, "lastModifiedBy": "---masked---", "name": "ENVOY-PRODUCT-1", "proxies": [ "remote-service" ], "scopes": [] }
- เมื่องานข้างต้นเสร็จแล้ว ให้ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy และรอจนกว่า อะแดปเตอร์ Apigee สำหรับ Envoy จะดึงข้อมูลผลิตภัณฑ์ API ที่อัปเดต หลังจากนั้น ส่ง API อื่น ขอให้ยืนยันการแก้ไข
สาเหตุ: ไม่มีคีย์ API ในส่วนหัวของคำขอ
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่มีการส่งคีย์ API เป็นส่วนหนึ่งของส่วนหัวของคำขอ
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
- ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy และตรวจสอบว่าคุณเห็น
[missing authentication]
ข้อความใต้Authenticate error
ตัวอย่างเอาต์พุตของบันทึกการแก้ไขข้อบกพร่อง:
2021-01-12T08:20:31.461Z DEBUG auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil) 2021-01-12T08:20:31.461Z DEBUG auth/auth.go:159 Authenticate error: &auth.Context{Context:(*server.Handler) (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication] 2021-01-12T08:20:31.461Z DEBUG server/authorization.go:205 sending denied: UNAUTHENTICATED 2021-01-12T08:20:32.448Z DEBUG server/header_context.go:68 No context header x-apigee-api, using target header : :authority
เอาต์พุตตัวอย่างที่แสดงด้านบนมีข้อความ
[missing authentication]
ข้อความนี้ระบุว่าไม่มีการส่งคีย์ API เป็นส่วนหนึ่งของ ส่วนหัวของคำขอ - หากอะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy มีรายการบันทึกที่มีข้อความ
[missing authentication]
ในส่วนAuthenticate error
พารามิเตอร์นี้ก็จะเป็น สาเหตุของปัญหา หากไม่ ให้ไปที่ สาเหตุ: คีย์ API ไม่ถูกต้อง
ความละเอียด
หากข้อผิดพลาด [missing authentication]
แสดงใน
อะแดปเตอร์ Apigee สำหรับบันทึก Envoy ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
- ตรวจสอบว่าไคลเอ็นต์ได้ส่งคีย์ API โดยใช้ส่วนหัว HTTP
x-api-key
ในหรือไม่ คำขอ API หากไม่มี ให้ขอให้ไคลเอ็นต์ส่งคีย์ API ในส่วนหัว HTTPx-api-key
- ตรวจสอบไฟล์การกำหนดค่า Apigee Adapter สำหรับ Envoy และยืนยันว่าคีย์ API เริ่มต้น
มีการเปลี่ยนชื่อส่วนหัว
x-api-key
เช่น วันที่apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | global: tls: ... tenant: ... auth: target_header: api-key
ในตัวอย่างข้างต้น ชื่อส่วนหัวของคีย์ API เริ่มต้นได้รับการแก้ไขเป็น
api-key
ในกรณีนี้ คุณจะต้องส่งคีย์ API เป็นส่วนหนึ่งของส่วนหัวapi-key
- หากมีการเปลี่ยนชื่อส่วนหัวคีย์ API เริ่มต้น ให้ขอให้ไคลเอ็นต์ใช้ ชื่อส่วนหัวของคีย์ API แล้วส่งคำขอ API อีกครั้งและตรวจสอบว่าสามารถแก้ปัญหาได้หรือไม่
สาเหตุ: คีย์ API ไม่ถูกต้อง
ข้อผิดพลาดนี้จะเกิดขึ้นหากมีการส่งคีย์ API ที่ไม่ถูกต้องเป็นส่วนหนึ่งของส่วนหัวของคำขอ
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
- ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึก Envoy และยืนยันว่าคุณเห็นข้อความ
[permission denied]
ในส่วนAuthenticate error
โดยปกติจะแสดงหลังจากคีย์ API ดึงข้อมูลโดยอะแดปเตอร์ซึ่งระบุโดย ข้อความfetchToken fetching: API_KEY
ตัวอย่างเอาต์พุตของบันทึกการแก้ไขข้อบกพร่อง:
2021-01-12T05:01:07.198Z DEBUG auth/auth.go:98 Authenticate: key: 123, claims: map[string]interface {}(nil) 2021-01-12T05:01:07.198Z DEBUG auth/verify_api_key.go:106 fetchToken fetching: API_KEY 2021-01-12T05:01:09.102Z DEBUG server/header_context.go:68 No context header x-apigee-api, using target header: :authority 2021-01-12T05:01:09.831Z DEBUG auth/auth.go:159 Authenticate error: &auth.Context{Context:(*server.Handler)(0xc0001640c0), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [permission denied] 2021-01-12T05:01:09.832Z DEBUG server/authorization.go:228 sending ok (actual: PERMISSION_DENIED)
ในตัวอย่างนี้ คีย์ API ที่ส่งไปในคำขอ API ไม่ถูกต้อง
- หากอะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy มีรายการบันทึกที่มี
[permission denied]
ในส่วนAuthenticate error
ระบบจะระบุว่า คีย์ API ที่ส่งผ่านเป็นส่วนหนึ่งของคำขอไม่ถูกต้องและเป็นสาเหตุของปัญหา หากไม่ ให้ไปที่ สาเหตุ: อะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้
ความละเอียด
หากระบบพบข้อความ [permission denied]
ในส่วน Authenticate
error
ในบันทึก Apigee Adapter for Envoy ให้ทําตามขั้นตอนต่อไปนี้
เพื่อแก้ไขปัญหา
- ตรวจสอบคีย์ API ที่ส่งในคำขอ API กับค่าคีย์ API ที่พบใน ที่เชื่อมต่อกับผลิตภัณฑ์ API
- หากคีย์ API ที่ไคลเอ็นต์ใช้ไม่ถูกต้อง ให้ขอให้ไคลเอ็นต์ส่งคีย์ API ที่ถูกต้อง
- หากคีย์ API ที่ไคลเอ็นต์ใช้ถูกต้องและคุณยังเห็น HTTP อยู่
ข้อผิดพลาด
403
รายการ โปรดติดต่อทีมสนับสนุนของ Apigee Edge เพื่อตรวจสอบปัญหานี้เพิ่มเติม
สาเหตุ: อะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้
ข้อผิดพลาดนี้จะเกิดขึ้นหากอะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับรีโมตไม่ได้ พร็อกซี API บริการ หากโฮสต์บริการระยะไกลที่กำหนดค่าไว้ไม่ถูกต้อง
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
-
ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึก Envoy และยืนยันว่าคุณเห็นข้อความต่อไปนี้
Error retrieving products: REQUEST_URI: no such host
ตัวอย่างเอาต์พุตของบันทึกการแก้ไขข้อบกพร่อง:
2021-01-12T08:29:06.499Z DEBUG product/manager.go:188 retrieving products from: https://foo/remote-service/products 2021-01-12T08:29:06.505Z ERROR product/manager.go:164 Error retrieving products: GET "https://foo/remote-service/pro ducts": dial tcp: lookup foo on 169.254.169.254:53: no such host github.com/apigee/apigee-remote-service-golib/product.(*manager).start.func1 /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/product/manager.go:164 github.com/apigee/apigee-remote-service-golib/util.(*Looper).Run /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:87 github.com/apigee/apigee-remote-service-golib/util.(*Looper).Start.func1 /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:59
ในตัวอย่างนี้ อะแดปเตอร์ Apigee สำหรับ Envoy ไม่สามารถสื่อสารกับ พร็อกซี API บริการระยะไกล เนื่องจากชื่อโฮสต์ที่ให้ไว้ในพร็อกซี API เซิร์ฟเวอร์ระยะไกล URL ไม่ถูกต้องตามที่ระบุโดยข้อผิดพลาด
no such host
- หากบันทึกของอะแดปเตอร์ Apigee สำหรับ Envoy มีรายการบันทึกที่มีข้อความ
no such host
แสดงว่านี่คือสาเหตุของปัญหา หากไม่ ให้ไปที่ สาเหตุ: พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้
ความละเอียด
หากข้อผิดพลาดข้างต้นแสดงในบันทึก Envoy อะแดปเตอร์ Apigee ให้ดำเนินการดังนี้ ในการแก้ไขปัญหานี้:
ตรวจสอบไฟล์การกำหนดค่า Apigee สำหรับ Envoy แล้วตรวจสอบว่า URL พร็อกซีของ API บริการระยะไกล ถูกต้อง
หากไม่เห็น ให้หยุดอะแดปเตอร์ Apigee สำหรับ Envoy แล้วแก้ไข URL พร็อกซี API บริการระยะไกลใน โดยใช้ไฟล์การกำหนดค่า เริ่มต้น Apigee Adapter สำหรับ Envoy จากนั้นส่งคำขอ API อีกรายการและ ยืนยันการแก้ไข
ตัวอย่างการกำหนดค่า
apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: internal_api: https://istioservices.apigee.net/edgemicro remote_service_api: https://ORG-ENV.apigee.net/remote-service org_name: ORG env_name: ENV key: KEY secret: SECRET
- ยืนยันว่ามีการใช้พร็อกซี
remote-service
API ใน Edge ที่เกี่ยวข้องแล้ว ของคุณ หากไม่มี ให้ใช้พร็อกซีremote-service
API ใน Edge ที่เกี่ยวข้อง ของคุณ แล้วลองอีกครั้ง - ยืนยันการเชื่อมต่อเครือข่ายระหว่างอะแดปเตอร์ Apigee for Envoy กับ
ปลายทางของพร็อกซี API
remote-service
หากมีการเชื่อมต่อเครือข่าย พบปัญหา โปรดติดต่อทีมเครือข่ายของคุณและพยายามแก้ไขปัญหา
สาเหตุ: พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
ตรวจสอบว่าคุณได้เปิดใช้บันทึกการแก้ไขข้อบกพร่องใน Envoy แล้ว หากไม่ ให้หยุด Envoy แล้วเริ่มต้นใหม่ กำลังเปิดใช้บันทึกการแก้ไขข้อบกพร่อง จากนั้นส่งคำขอ API อื่น
การติดตั้งใช้งานแบบสแตนด์อโลน
envoy -c envoy-config.yaml -l debug
การติดตั้งใช้งานตาม Kubernetes/Istio:
kubectl -n=istio-system get pods kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
- ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy และยืนยันว่ามีรายการบันทึกที่มีข้อความดังนี้
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
แล้วตามด้วย
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
ตัวอย่างเอาต์พุตของบันทึกการแก้ไขข้อบกพร่อง:
[2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C4] connecting to 127.0.0.1:5000 [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C4] connection in progress [2021-03-23 05:44:41.868][1303661][debug][http2] [external/envoy/source/common/http/http2/codec_impl.cc:1173] [C4] updating connection-level initial window size to 268435456 [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C4] delayed connection error: 111 [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C4] closing socket: 0 [2021-03-23 05:44:41.869][1303661][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C4] disconnect. resetting 0 pending requests [2021-03-23 05:44:41.869][1303661][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C4] client disconnected, failure reason: [2021-03-23 05:44:41.869][1303661][debug][router] [external/envoy/source/common/router/router.cc:1031] [C0][S6149963213555558594] upstream reset: reset reason: connection failure, transport failure reason: [2021-03-23 05:44:41.869][1303661][debug][http] [external/envoy/source/common/http/async_client_impl.cc:100] async http request response headers (end_stream=true): ':status', '200' 'content-type', 'application/grpc' 'grpc-status', '14' 'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection failure'
ตัวอย่างด้านบนแสดงให้เห็นว่า Envoy ไม่สามารถสื่อสารกับ อะแดปเตอร์ Apigee สำหรับ Envoy เนื่องจากเหตุผลคือ
connection failure
connection failure
เกิดได้จากหลายสาเหตุ เรามาดูแต่ละสถานการณ์กัน
สถานการณ์ที่ 1: กระบวนการของอะแดปเตอร์ไม่ทำงาน
หากกระบวนการของอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ทำงาน ข้อผิดพลาดนี้ก็อาจเกิดขึ้นได้
- ตรวจสอบว่ากระบวนการของอะแดปเตอร์ Apigee สำหรับ Envoy ทำงานอยู่โดยการเรียกใช้โค้ดต่อไปนี้
คำสั่ง หากกระบวนการของอะแดปเตอร์ Apigee for Envoy ทำงานอยู่ ผลลัพธ์จะเป็นดังนี้
ควรระบุรายการนั้นๆ
ps -ef | grep apigee-remote-service-envoy
- ถ้าไม่ทำงาน นั่นเป็นสาเหตุของปัญหา
ความละเอียด
- หากกระบวนการของอะแดปเตอร์ Apigee for Envoy ไม่ได้ทำงานอยู่ ให้เริ่ม อะแดปเตอร์ Apigee สำหรับ Envoy
- ส่งคำขอ API อีกรายการและยืนยันว่าปัญหาได้รับการแก้ไขแล้วหรือไม่
สถานการณ์ที่ 2: กระบวนการของอะแดปเตอร์ไม่รอการเชื่อมต่อจากพอร์ตที่ระบุ
หากกระบวนการของอะแดปเตอร์ Apigee for Envoy ไม่ได้ฟังอยู่ในพอร์ตนั้น ข้อผิดพลาดนี้ก็อาจเกิดขึ้นได้
หากกระบวนการของอะแดปเตอร์ Apigee for Envoy ทำงานอยู่ ให้ตรวจสอบว่ามีซ็อกเก็ตกำลังฟังอยู่
พอร์ต 5000: APIGEE_ENVOY_ADAPTER_HOST:5000
คุณสามารถเรียกใช้
คำสั่ง netstat
ที่จะยืนยันข้อมูลนี้
sudo netstat -lnp | grep 5000
ตัวอย่างเอาต์พุต:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
หากพอร์ต 5000 ไม่พบ Socket ก็อาจเป็นสาเหตุของปัญหาได้
ความละเอียด
- หยุดอะแดปเตอร์ Apigee สำหรับ Envoy และเริ่มใหม่อีกครั้ง
- ส่งคำขอ API อีกรายการและยืนยันว่าปัญหาได้รับการแก้ไขแล้วหรือไม่
สถานการณ์ที่ 3: การเชื่อมต่อเครือข่ายระหว่าง Envoy และอะแดปเตอร์ Apigee สำหรับ Envoy
- ยืนยันการเชื่อมต่อเครือข่ายระหว่าง Envoy กับอะแดปเตอร์ Apigee สำหรับ Envoy โดยทำดังนี้
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
กรณีที่ Telnet สร้างการเชื่อมต่อ TCP กับอะแดปเตอร์ Apigee สำหรับ Envoy ได้ เอาต์พุตซึ่งมีลักษณะคล้ายกับรายการต่อไปนี้จะปรากฏขึ้น
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- หากคุณสังเกตเห็นข้อผิดพลาด
Connection timed out
ใน telnet แสดงว่า เกิดปัญหาการเชื่อมต่อเครือข่ายระหว่าง Envoy กับอะแดปเตอร์ Apigee สำหรับ Envoy
ความละเอียด
หากคุณพบปัญหาการเชื่อมต่อเครือข่ายระหว่าง Envoy กับอะแดปเตอร์ Apigee สำหรับ Envoy โปรด ติดต่อทีมเครือข่ายของคุณและพยายามแก้ไขปัญหา
หากยังคงพบปัญหา ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
หากปัญหายังคงอยู่หลังจากทำตามวิธีการข้างต้น ให้รวบรวมการวินิจฉัยต่อไปนี้ จากนั้นติดต่อฝ่ายสนับสนุนของ Apigee Edge
-
ผลิตภัณฑ์ Apigee ที่ใช้:
ตัวอย่าง: Apigee Edge Cloud, Apigee OPDK, Apigeeไฮบริด, Apigee X
- องค์กรและสภาพแวดล้อม Apigee
การอ่านคำจำกัดความของผลิตภัณฑ์ API โดยใช้ Edge API
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
ข้อมูลอ้างอิง: Apigee Edge API
เริ่มเซสชันการติดตามในพร็อกซี API
remote-service
โดยใช้ UI ของ Apigee Edge จำลองปัญหานี้และแชร์ไฟล์ XML ของเซสชันการติดตามข้อมูลอ้างอิง: การใช้เครื่องมือการติดตาม | Apigee Edge
อะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy (บันทึกทั้งหมดที่เกี่ยวข้องกับระยะเวลาที่ระบุ)
การติดตั้งใช้งานแบบสแตนด์อโลน
# by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
การติดตั้งใช้งานตาม Kubernetes/Istio:
kubectl -n=apigee get pods kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
- คำขอ API ที่ส่งไปยังพร็อกซี Envoy โดยใช้คำสั่ง
curl
(เอาต์พุตทั้งหมดของคำสั่งcurl
): วันที่curl -v ENVOY_PROXY_ENDPOINT
- คำขอ API ที่ส่งไปยังบริการเป้าหมายโดยใช้คำสั่ง
curl
(คำขอ เอาต์พุตของคำสั่งcurl
): วันที่curl -v TARGET_SERVICE_ENDPOINT