คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
ลักษณะปัญหา
พร็อกซี Envoy ล้มเหลวโดยมีข้อผิดพลาด HTTP 403 Forbidden เมื่อเรียกใช้ผ่าน
Apigee Adapter for 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 Public และ Private Cloud |
| ไม่มีเส้นทาง URI ของบริการเป้าหมายในผลิตภัณฑ์ API | ไม่มีเส้นทาง URI ของบริการเป้าหมายหรือไม่ได้เพิ่มลงในผลิตภัณฑ์ API ภายใต้ทรัพยากร API | ผู้ใช้ Edge Public และ Private Cloud |
| ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API | ชื่อโฮสต์ที่ระบุในคำขอ API ของไคลเอ็นต์ไม่มีอยู่ในผลิตภัณฑ์ API ในส่วนเป้าหมายบริการระยะไกลของ Apigee | ผู้ใช้ Edge Public และ Private Cloud |
| ไม่มีคีย์ API ในส่วนหัวของคำขอ | ไม่ได้ส่งคีย์ API ในส่วนหัว HTTP x-api-key |
ผู้ใช้ Edge Public และ Private Cloud |
| คีย์ API ไม่ถูกต้อง | คีย์ API ที่ส่งเป็นส่วนหนึ่งของคำขอไม่ถูกต้อง | ผู้ใช้ Edge Public และ Private Cloud |
| Apigee Adapter for Envoy ไม่สามารถ สื่อสารกับพร็อกซี API ของบริการระยะไกล | Apigee Adapter for Envoy สื่อสารกับพร็อกซี API ของบริการระยะไกลไม่ได้ | ผู้ใช้ Edge Public และ Private Cloud |
| พร็อกซี Envoy สื่อสารกับ Apigee Adapter for Envoy ไม่ได้ | พร็อกซี Envoy สื่อสารกับ Apigee Adapter for Envoy ไม่ได้ | ผู้ใช้ Edge Public และ 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 Adapter สำหรับ Envoy เพื่อบันทึกรายละเอียดเพิ่มเติมเกี่ยวกับ ข้อผิดพลาด หากไม่ ให้หยุด Apigee Adapter สำหรับ Envoy แล้วเริ่มอีกครั้งโดยเปิดใช้บันทึกการแก้ไขข้อบกพร่อง โดยใช้คำสั่งต่อไปนี้
apigee-remote-service-envoy -c config.yaml -l debug
สาเหตุ: ไม่ได้เปิดใช้ผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้เปิดใช้ผลิตภัณฑ์ API ที่เฉพาะเจาะจงซึ่งใช้โดย Envoy Proxy ใน สภาพแวดล้อมที่เฉพาะเจาะจงซึ่งมีการเรียกใช้ API
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
- ตรวจสอบบันทึกของ Apigee Adapter สำหรับ Envoy และยืนยันว่าข้อความต่อไปนี้แสดง
ในส่วน
Authorizing requestproduct: 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 Adapter for Envoyดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึกของ Apigee Adapter for Envoy ได้ที่ การบันทึก
- หากเห็นข้อความนี้ขณะให้สิทธิ์คำขอ API แสดงว่าผลิตภัณฑ์ API ที่เฉพาะเจาะจงไม่ได้เปิดใช้สำหรับสภาพแวดล้อมที่คุณทำการเรียก API
- โปรดทำตามขั้นตอนต่อไปนี้เพื่อยืนยัน
- เข้าสู่ระบบ Edge UI
- ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API ที่คุณใช้กำหนดค่า Apigee Adapter สำหรับ Envoy
- ตรวจสอบว่าสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งคุณใช้ส่งคำขอ API นั้น เปิดใช้ในผลิตภัณฑ์ API แล้ว
- หากไม่ได้เปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงในผลิตภัณฑ์ API นั่นคือสาเหตุ ของปัญหานี้
- หากเปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงแล้ว ให้ไปที่ สาเหตุ: ไม่มีเส้นทาง URI ของบริการเป้าหมายในผลิตภัณฑ์ API
ความละเอียด
หากไม่ได้เปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงในผลิตภัณฑ์ API ให้ทำตามขั้นตอนต่อไปนี้เพื่อ แก้ไขปัญหา
- เข้าสู่ระบบ Edge UI
- ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API ที่คุณใช้ เพื่อกำหนดค่า Apigee Adapter สำหรับ Envoy
- ในหน้าผลิตภัณฑ์ API > ชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
- เปิดใช้สภาพแวดล้อมที่ต้องการส่งคำขอ API โดยเลือก ช่องทําเครื่องหมายสภาพแวดล้อมที่เกี่ยวข้อง
- คลิกบันทึก
สาเหตุ: ไม่มีเส้นทาง URI ของบริการเป้าหมายในผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้ระบุเส้นทาง URI ของเป้าหมายในผลิตภัณฑ์ API ที่เฉพาะเจาะจงซึ่งใช้โดย Envoy Proxy
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
-
ตรวจสอบบันทึกของ Apigee Adapter สำหรับ 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 Adapter สำหรับ Envoy แสดงว่าข้อความดังกล่าวเป็นสาเหตุของปัญหานี้ หากไม่เป็นเช่นนั้น ให้ไปที่ สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API
ความละเอียด
หากไม่ได้เพิ่ม URI ของคำขอที่เฉพาะเจาะจงลงในผลิตภัณฑ์ API สำหรับเป้าหมายที่เฉพาะเจาะจง ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
- เข้าสู่ระบบ Edge UI
- ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API ที่คุณใช้กำหนดค่า Apigee Adapter สำหรับ Envoy
- ในหน้า API Products > Product Name ให้คลิกแก้ไข
- ในบานหน้าต่างทรัพยากร API ให้เพิ่ม URI คำขอ API ลงในผลิตภัณฑ์ API
- ตรวจสอบบันทึกของ Apigee Adapter for Envoy และรอจนกว่า Apigee Adapter for Envoy จะดึงข้อมูลผลิตภัณฑ์ API ที่อัปเดตแล้ว หลังจากนั้น ให้ส่งคำขอ API อีกครั้งเพื่อยืนยันการแก้ไข
สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้เพิ่มชุดชื่อโฮสต์และพอร์ตเป้าหมายลงใน ผลิตภัณฑ์ API ที่เฉพาะเจาะจงซึ่งใช้โดย Envoy Proxy
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
ตรวจสอบบันทึกของ Apigee Adapter สำหรับ Envoy และยืนยันว่าข้อความต่อไปนี้ แสดงสำหรับผลิตภัณฑ์ API ที่เฉพาะเจาะจงซึ่งเชื่อมโยงกับเป้าหมายที่เฉพาะเจาะจงในส่วน
Authorizing requestno 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 Adapter for Envoy มีรายการที่มีข้อความ
no targets: HOSTNAME:PORTขณะให้สิทธิ์คำขอ แสดงว่านี่คือสาเหตุของปัญหา หากไม่เป็นเช่นนั้น ให้ไปที่ สาเหตุ: ไม่มีคีย์ API ในส่วนหัวของคำขอ
ความละเอียด
หากไม่ได้เพิ่มชุดค่าผสมชื่อโฮสต์และพอร์ตเป้าหมายลงในผลิตภัณฑ์ API ให้ทำตาม ขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
- เข้าสู่ระบบ Edge UI
- ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API ที่คุณใช้กำหนดค่า Apigee Adapter สำหรับ 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 Adapter for Envoy และรอจนกว่า Apigee Adapter for Envoy จะดึงข้อมูลผลิตภัณฑ์ API ที่อัปเดตแล้ว หลังจากนั้น ให้ส่งคำขอ API อีกครั้งเพื่อยืนยันการแก้ไข
สาเหตุ: ไม่มีคีย์ API ในส่วนหัวของคำขอ
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้ส่งคีย์ API เป็นส่วนหนึ่งของส่วนหัวของคำขอ
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
- ตรวจสอบบันทึกของ Apigee Adapter for 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 Adapter for Envoy มีรายการบันทึกที่มีข้อความ
[missing authentication]ในส่วนAuthenticate errorแสดงว่านี่คือสาเหตุของปัญหา หากไม่เป็นเช่นนั้น ให้ไปที่ สาเหตุ: คีย์ API ไม่ถูกต้อง
ความละเอียด
หากข้อผิดพลาด [missing authentication] แสดงใน
บันทึกของ Apigee Adapter สำหรับ 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 Adapter for Envoy และยืนยันว่าคุณเห็นข้อความ
[permission denied]ในส่วนAuthenticate errorโดยปกติแล้วข้อความนี้จะแสดงหลังจากที่ Adapter ดึงข้อมูลคีย์ 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 Adapter สำหรับ Envoy มีรายการบันทึกที่มี
[permission denied]ในAuthenticate errorส่วน แสดงว่า คีย์ API ที่ส่งเป็นส่วนหนึ่งของคำขอไม่ถูกต้องและเป็นสาเหตุของปัญหา หากไม่ ให้ไปที่ สาเหตุ: Apigee Adapter for Envoy สื่อสารกับพร็อกซี API ของบริการระยะไกลไม่ได้
ความละเอียด
หากเห็นข้อความ [permission denied] ในส่วน Authenticate
error ในบันทึกของ Apigee Adapter สำหรับ Envoy ให้ทำตามขั้นตอนต่อไปนี้
เพื่อแก้ไขปัญหา
- ตรวจสอบคีย์ API ที่ส่งในคำขอ API กับค่าคีย์ API ที่พบใน แอปพลิเคชันที่เชื่อมต่อกับผลิตภัณฑ์ API
- หากคีย์ API ที่ไคลเอ็นต์ใช้ไม่ถูกต้อง ให้ขอให้ไคลเอ็นต์ส่งคีย์ API ที่ถูกต้อง
- หากคีย์ API ที่ไคลเอ็นต์ใช้ถูกต้องและคุณยังเห็นข้อผิดพลาด HTTP
403โปรดติดต่อทีมสนับสนุนของ Apigee Edge เพื่อตรวจสอบเพิ่มเติม
สาเหตุ: Apigee Adapter for Envoy สื่อสารกับพร็อกซี API ของบริการระยะไกลไม่ได้
ข้อผิดพลาดนี้จะเกิดขึ้นหาก Apigee Adapter สำหรับ Envoy สื่อสารกับพร็อกซี API ของบริการระยะไกลไม่ได้ในกรณีที่โฮสต์บริการระยะไกลที่กำหนดค่าไม่ถูกต้อง
การวินิจฉัย
ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ด้านบน
-
ตรวจสอบบันทึกของ Apigee Adapter for 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 Adapter สำหรับ Envoy สื่อสารกับพร็อกซี API ของ remote-service ไม่ได้เนื่องจากชื่อโฮสต์ที่ระบุใน URL ของพร็อกซี API ของเซิร์ฟเวอร์ระยะไกลไม่ถูกต้องตามที่ระบุโดยข้อผิดพลาด
no such host - หากบันทึกของ Apigee Adapter for Envoy มีรายการบันทึกที่มีข้อความ
no such hostแสดงว่านี่คือสาเหตุของปัญหา หากไม่เป็นเช่นนั้น ให้ไปที่ สาเหตุ: พร็อกซี Envoy สื่อสารกับ Apigee Adapter สำหรับ Envoy ไม่ได้
ความละเอียด
หากข้อผิดพลาดข้างต้นแสดงในบันทึกของ Apigee Adapter for Envoy ให้ทำตาม ขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
ตรวจสอบไฟล์การกำหนดค่า Apigee Adapter สำหรับ Envoy และยืนยันว่า URL ของพร็อกซี API ของบริการระยะไกลที่ระบุนั้นถูกต้อง
หากไม่ถูกต้อง ให้หยุด Apigee Adapter สำหรับ 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- ตรวจสอบว่าได้ติดตั้งใช้งานพร็อกซี API
remote-serviceในสภาพแวดล้อม Edge ที่เกี่ยวข้องแล้ว หากไม่ได้ ให้ติดตั้งใช้งานremote-serviceพร็อกซี API ในสภาพแวดล้อม Edge ที่เกี่ยวข้อง แล้วลองอีกครั้ง - ตรวจสอบการเชื่อมต่อเครือข่ายระหว่าง Apigee Adapter สำหรับ Envoy กับ
remote-serviceปลายทางของพร็อกซี API หากพบปัญหาการเชื่อมต่อเครือข่าย โปรดติดต่อทีมเครือข่ายและพยายามแก้ไขปัญหา
สาเหตุ: พร็อกซี Envoy สื่อสารกับ Apigee Adapter for 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 Adapter for 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 Adapter for Envoy ได้เนื่องจากเหตุผล
connection failure connection failureอาจเกิดจากหลายสาเหตุ มาดูแต่ละสถานการณ์กัน
สถานการณ์ #1: กระบวนการของอแดปเตอร์ไม่ทำงาน
หากกระบวนการ Apigee Adapter สำหรับ Envoy ไม่ทํางาน ข้อผิดพลาดนี้อาจเกิดขึ้น
- ตรวจสอบว่ากระบวนการ Apigee Adapter สำหรับ Envoy ทำงานอยู่โดยการเรียกใช้คำสั่งต่อไปนี้
หากกระบวนการ Apigee Adapter for Envoy ทำงานอยู่ ผลลัพธ์ของคำสั่งต่อไปนี้
ควรแสดงรายการ
ps -ef | grep apigee-remote-service-envoy
- หากไม่ได้ทำงาน แสดงว่านั่นคือสาเหตุของปัญหา
ความละเอียด
- หากกระบวนการ Apigee Adapter for Envoy ไม่ทํางาน ให้เริ่ม Apigee Adapter for Envoy
- ส่งคำขอ API อีกครั้งและตรวจสอบว่าปัญหาได้รับการแก้ไขแล้วหรือไม่
สถานการณ์ #2: กระบวนการของอแดปเตอร์ไม่ได้ฟังในพอร์ตที่เฉพาะเจาะจง
หากกระบวนการ Apigee Adapter for Envoy ไม่ได้กําลังรับฟังในพอร์ตที่เฉพาะเจาะจง ข้อผิดพลาดนี้อาจเกิดขึ้น
หากกระบวนการ Apigee Adapter 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 นั่นอาจเป็นสาเหตุของปัญหานี้
ความละเอียด
- หยุด Apigee Adapter for Envoy แล้วเริ่มอีกครั้ง
- ส่งคำขอ API อีกครั้งและตรวจสอบว่าปัญหาได้รับการแก้ไขแล้วหรือไม่
สถานการณ์ #3: การเชื่อมต่อเครือข่ายระหว่าง Envoy กับ Apigee Adapter for Envoy
- ตรวจสอบการเชื่อมต่อเครือข่ายระหว่าง Envoy กับ Apigee Adapter for Envoy ดังนี้
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
หาก Telnet สามารถสร้างการเชื่อมต่อ TCP กับ Apigee Adapter สำหรับ Envoy ระบบจะแสดงเอาต์พุตที่คล้ายกับต่อไปนี้
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- หากคุณพบข้อผิดพลาด
Connection timed outด้วย Telnet แสดงว่า มีปัญหาการเชื่อมต่อเครือข่ายระหว่าง Envoy กับ Apigee Adapter สำหรับ Envoy
ความละเอียด
หากพบปัญหาการเชื่อมต่อเครือข่ายระหว่าง Envoy กับ Apigee Adapter สำหรับ Envoy โปรด ติดต่อทีมเครือข่ายและพยายามแก้ไขปัญหา
หากยังพบปัญหาอยู่ ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
หากยังพบปัญหาหลังจากทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ แล้วติดต่อทีมสนับสนุนของ Apigee Edge
-
ผลิตภัณฑ์ Apigee ที่ใช้
ตัวอย่าง: Apigee Edge Cloud, Apigee OPDK, Apigee Hybrid, Apigee X
- องค์กรและสภาพแวดล้อม Apigee
อ่านคำจำกัดความผลิตภัณฑ์ API โดยใช้ Edge API
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
ข้อมูลอ้างอิง: Apigee Edge APIs
เริ่มเซสชันการติดตามใน
remote-serviceพร็อกซี API โดยใช้ UI ของ Apigee Edge ทำซ้ำปัญหานี้และแชร์ไฟล์ XML ของเซสชันการติดตามข้อมูลอ้างอิง: การใช้เครื่องมือติดตาม | Apigee Edge
บันทึก Apigee Adapter for 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