คุณกำลังดูเอกสารประกอบของ 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 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 สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้ | อะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้ | ผู้ใช้ Edge Public และ Private Cloud |
พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้ | พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ 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 สำหรับ Envoy แล้ว เพื่อบันทึกรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด หากไม่มี ให้หยุดอะแดปเตอร์ Apigee สำหรับ Envoy แล้วเริ่มต้นใหม่ โดยเปิดใช้บันทึกการแก้ไขข้อบกพร่องโดยใช้คำสั่งต่อไปนี้
apigee-remote-service-envoy -c config.yaml -l debug
สาเหตุ: ไม่ได้เปิดใช้ผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากผลิตภัณฑ์ API ที่พร็อกซี Envoy ใช้งานไม่ได้เปิดใช้ในสภาพแวดล้อมที่มีการเรียกใช้ 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 ใช้
การวินิจฉัย
ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 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 Adapter สำหรับบันทึกการแก้ไขข้อบกพร่องของ Envoy แสดงว่านี่เป็นสาเหตุของปัญหา หากไม่ ให้ไปที่สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API
ความละเอียด
หากไม่ได้เพิ่ม URI คำขอที่เจาะจงลงในผลิตภัณฑ์ API ของเป้าหมายที่เจาะจง ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
- เข้าสู่ระบบ Edge UI
- ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API เฉพาะที่คุณใช้สำหรับกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
- ในหน้าผลิตภัณฑ์ API > ชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
- ในแผงทรัพยากร API ให้เพิ่ม URI คำขอ API ไปยังผลิตภัณฑ์ API
- ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึก Envoy และรอจนกว่าอะแดปเตอร์ Apigee สำหรับ Envoy จะดึงข้อมูลผลิตภัณฑ์ API ที่อัปเดต หลังจากนั้น ให้ส่งคำขอ API อีกครั้งเพื่อยืนยันการแก้ไข
สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่มีการเพิ่มคู่ชื่อโฮสต์และพอร์ตลงในผลิตภัณฑ์ API เฉพาะที่พร็อกซี Envoy ใช้
การวินิจฉัย
ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา
- เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 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 ให้เพิ่มชื่อโฮสต์และพอร์ตเป้าหมาย แล้วคลิก Save
หากคุณไม่เห็นส่วนเป้าหมายบริการระยะไกลของ 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 สำหรับไฟล์การกำหนดค่า 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 สำหรับบันทึก 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 บริการระยะไกลไม่ได้ เนื่องจากชื่อโฮสต์ที่ให้ไว้ใน URL ของพร็อกซี API เซิร์ฟเวอร์ระยะไกลไม่ถูกต้องตามที่ระบุโดยข้อผิดพลาด
no such host
- หากอะแดปเตอร์ Apigee สำหรับบันทึก Envoy มีรายการบันทึกที่มีข้อความ
no such host
สาเหตุของปัญหานี้ หากไม่เห็น ให้ไปที่ Cause: พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้
ความละเอียด
หากข้อผิดพลาดข้างต้นแสดงใน Apigee Adapter สำหรับบันทึก Envoy ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
ตรวจสอบอะแดปเตอร์ Apigee สำหรับไฟล์การกำหนดค่า Envoy และยืนยันว่า URL ของพร็อกซี API บริการระยะไกลที่ระบุถูกต้อง
หากไม่ได้ใช้ ให้หยุดอะแดปเตอร์ Apigee สำหรับ Envoy, แก้ไข URL พร็อกซี API บริการระยะไกลในไฟล์การกำหนดค่า เริ่มต้นอะแดปเตอร์ Apigee สำหรับ 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 สำหรับ Envoy และปลายทางพร็อกซี
remote-service
API หากพบปัญหาการเชื่อมต่อเครือข่าย โปรดติดต่อทีมเครือข่ายและพยายามแก้ปัญหาดังกล่าว
สาเหตุ: พร็อกซี 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 Adapter สำหรับ Envoy ใช้งานได้โดยเรียกใช้คำสั่งต่อไปนี้ หากกระบวนการของอะแดปเตอร์ Apigee สำหรับ Envoy ทำงานอยู่ ผลลัพธ์ของคำสั่งต่อไปนี้ควรแสดงขึ้นมา
ps -ef | grep apigee-remote-service-envoy
- หากหน้าต่างไม่ทำงาน นั่นเป็นสาเหตุของปัญหา
ความละเอียด
- หากกระบวนการ Apigee Adapter สำหรับ Envoy ไม่ทำงาน ให้เริ่มต้นอะแดปเตอร์ Apigee สำหรับ Envoy
- สร้างคําขอ API อีกครั้งและยืนยันว่าปัญหาได้รับการแก้ไขหรือไม่
สถานการณ์ที่ 2: กระบวนการของอะแดปเตอร์ไม่ตอบสนองต่อพอร์ตที่ระบุ
หากกระบวนการ Apigee Adapter สำหรับ Envoy ไม่ได้ทำงานบนพอร์ตที่ระบุ ข้อผิดพลาดนี้ก็อาจเกิดขึ้นได้
หากกระบวนการ Apigee Adapter สำหรับ 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
หากไม่มี Socket Listener บนพอร์ต 5000 นั่นอาจเป็นสาเหตุของปัญหานี้
ความละเอียด
- หยุดอะแดปเตอร์ Apigee สำหรับ Envoy และเริ่มใหม่อีกครั้ง
- สร้างคําขอ API อีกครั้งและยืนยันว่าปัญหาได้รับการแก้ไขหรือไม่
สถานการณ์ที่ 3: การเชื่อมต่อเครือข่ายระหว่าง Envoy และ Apigee Adapter สำหรับ Envoy
- ตรวจสอบการเชื่อมต่อเครือข่ายระหว่าง Envoy และ Apigee Adapter สำหรับ 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 Adapter สำหรับ Envoy โปรดติดต่อทีมเครือข่ายและพยายามแก้ปัญหา
หากยังพบปัญหาอยู่ ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
หากปัญหายังคงอยู่หลังจากทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัยต่อไปนี้แล้วติดต่อทีมสนับสนุนของ Apigee Edge
-
ผลิตภัณฑ์ Apigee ที่ใช้:
ตัวอย่าง: Apigee Edge Cloud, Apigee OPDK, Apigee Hy, Apigee X
- องค์กรและสภาพแวดล้อมของ Apigee
การอ่านคำจำกัดความผลิตภัณฑ์ API โดยใช้ Edge API
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
ข้อมูลอ้างอิง: Apigee Edge API
เริ่มเซสชันการติดตามในพร็อกซี
remote-service
API โดยใช้ 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