พร็อกซี Envoy ทํางานล้มเหลวโดยมีข้อผิดพลาด HTTP 403 ในอะแดปเตอร์ Apigee สําหรับ Envoy

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

ก่อนเริ่มต้น

  1. ยืนยันว่าคุณได้รับข้อความตอบกลับ 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
    
  2. วิธีเปิดใช้บันทึกการแก้ไขข้อบกพร่อง

    ตรวจสอบว่าคุณได้เปิดใช้บันทึกการแก้ไขข้อบกพร่องในอะแดปเตอร์ Apigee สำหรับ Envoy แล้ว เพื่อบันทึกรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด หากไม่มี ให้หยุดอะแดปเตอร์ Apigee สำหรับ Envoy แล้วเริ่มต้นใหม่ โดยเปิดใช้บันทึกการแก้ไขข้อบกพร่องโดยใช้คำสั่งต่อไปนี้

    apigee-remote-service-envoy -c config.yaml -l debug
    

สาเหตุ: ไม่ได้เปิดใช้ผลิตภัณฑ์ API

ข้อผิดพลาดนี้จะเกิดขึ้นหากผลิตภัณฑ์ API ที่พร็อกซี Envoy ใช้งานไม่ได้เปิดใช้ในสภาพแวดล้อมที่มีการเรียกใช้ API ดังกล่าว

การวินิจฉัย

ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา

  1. เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ข้างต้น
  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 ได้ที่การบันทึก

  3. หากคุณเห็นข้อความนี้ขณะให้สิทธิ์คำขอ API มีความเป็นไปได้สูงว่าข้อความดังกล่าวระบุว่าผลิตภัณฑ์ API นั้นๆ ไม่ได้เปิดใช้สำหรับสภาพแวดล้อมเฉพาะที่คุณกำลังเรียกใช้ API
  4. ทําตามขั้นตอนต่อไปนี้เพื่อยืนยัน
    1. เข้าสู่ระบบ Edge UI
    2. ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API เฉพาะที่คุณใช้สำหรับกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
    3. ตรวจสอบว่าสภาพแวดล้อมที่เฉพาะเจาะจงที่คุณกำลังสร้างคำขอ API เปิดใช้ในผลิตภัณฑ์ API แล้ว
    4. หากไม่ได้เปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงในผลิตภัณฑ์ API นั่นเป็นสาเหตุของปัญหานี้
  5. หากเปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงอยู่แล้ว ให้ไปที่ สาเหตุ: ไม่มีเส้นทาง URI บริการเป้าหมายในผลิตภัณฑ์ API

ความละเอียด

หากไม่ได้เปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงในผลิตภัณฑ์ API ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา

  1. เข้าสู่ระบบ Edge UI
  2. ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API เฉพาะที่คุณใช้กำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
  3. ในหน้าผลิตภัณฑ์ API > ชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
  4. เปิดใช้สภาพแวดล้อมที่เฉพาะเจาะจงที่คุณต้องการสร้างคำขอ API โดยเลือกช่องทำเครื่องหมายสภาพแวดล้อมที่เกี่ยวข้อง
  5. คลิกบันทึก

สาเหตุ: ไม่มีเส้นทาง URI บริการเป้าหมายในผลิตภัณฑ์ API

ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่มีการระบุเส้นทาง URI ของเป้าหมายในผลิตภัณฑ์ API เฉพาะที่พร็อกซี Envoy ใช้

การวินิจฉัย

ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา

  1. เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ข้างต้น
  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 ในผลิตภัณฑ์ API ENVOY-PRODUCT-1

  3. ถ้าคุณเห็นข้อความ no path: REQUEST_URI_PATH ใน Apigee Adapter สำหรับบันทึกการแก้ไขข้อบกพร่องของ Envoy แสดงว่านี่เป็นสาเหตุของปัญหา หากไม่ ให้ไปที่สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API

ความละเอียด

หากไม่ได้เพิ่ม URI คำขอที่เจาะจงลงในผลิตภัณฑ์ API ของเป้าหมายที่เจาะจง ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา

  1. เข้าสู่ระบบ Edge UI
  2. ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API เฉพาะที่คุณใช้สำหรับกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
  3. ในหน้าผลิตภัณฑ์ API > ชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
  4. ในแผงทรัพยากร API ให้เพิ่ม URI คำขอ API ไปยังผลิตภัณฑ์ API
  5. ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึก Envoy และรอจนกว่าอะแดปเตอร์ Apigee สำหรับ Envoy จะดึงข้อมูลผลิตภัณฑ์ API ที่อัปเดต หลังจากนั้น ให้ส่งคำขอ API อีกครั้งเพื่อยืนยันการแก้ไข

สาเหตุ: ไม่มีชื่อโฮสต์ในผลิตภัณฑ์ API

ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่มีการเพิ่มคู่ชื่อโฮสต์และพอร์ตลงในผลิตภัณฑ์ API เฉพาะที่พร็อกซี Envoy ใช้

การวินิจฉัย

ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา

  1. เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ข้างต้น
  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 ในผลิตภัณฑ์ API ENVOY-PRODUCT-1

  3. หากอะแดปเตอร์ Apigee สำหรับบันทึก Envoy มีรายการที่มีข้อความ no targets: HOSTNAME:PORT ขณะให้สิทธิ์คำขอ แสดงว่านี่เป็นสาเหตุของปัญหา หากไม่ ให้ไปที่สาเหตุ: ไม่มีคีย์ API ในส่วนหัวของคำขอ

ความละเอียด

หากไม่ได้เพิ่มคู่ชื่อโฮสต์และพอร์ตเป้าหมายลงในผลิตภัณฑ์ API ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา

  1. เข้าสู่ระบบ Edge UI
  2. ในหน้าเผยแพร่ > ผลิตภัณฑ์ API ให้คลิกผลิตภัณฑ์ API เฉพาะที่คุณใช้สำหรับกำหนดค่าอะแดปเตอร์ Apigee สำหรับ Envoy
  3. ในหน้าผลิตภัณฑ์ API > ชื่อผลิตภัณฑ์ ให้คลิกแก้ไข
  4. ในแผงเป้าหมายบริการระยะไกลของ 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": []
    }
    
  5. เมื่อทำงานข้างต้นเสร็จแล้ว ให้ตรวจสอบอะแดปเตอร์ Apigee สำหรับบันทึกของ Envoy และรอจนกว่าอะแดปเตอร์ Apigee สำหรับ Envoy จะดึงผลิตภัณฑ์ API ที่อัปเดตแล้ว หลังจากนั้น ให้ส่งคำขอ API อื่นเพื่อยืนยันการแก้ไข

สาเหตุ: ไม่มีคีย์ API ในส่วนหัวของคำขอ

ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่มีการส่งผ่านคีย์ API เป็นส่วนหนึ่งของส่วนหัวของคำขอ

การวินิจฉัย

ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา

  1. เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ข้างต้น
  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 เป็นส่วนหนึ่งของส่วนหัวของคำขอ

  3. หากอะแดปเตอร์ Apigee สำหรับบันทึก Envoy มีรายการบันทึกที่มีข้อความ [missing authentication] ในส่วน Authenticate error แสดงว่านี่เป็นสาเหตุของปัญหา หากไม่ ให้ไปที่สาเหตุ: คีย์ API ไม่ถูกต้อง

ความละเอียด

หากข้อผิดพลาด [missing authentication] แสดงใน อะแดปเตอร์ Apigee สำหรับบันทึก Envoy ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา

  1. ตรวจสอบว่าไคลเอ็นต์ได้ส่งคีย์ API โดยใช้ส่วนหัว HTTP x-api-key ในคำขอ API หรือไม่ หากไม่มี ให้ขอให้ไคลเอ็นต์ส่งคีย์ API ในส่วนหัว HTTP x-api-key
  2. ตรวจสอบอะแดปเตอร์ 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

  3. หากมีการเปลี่ยนชื่อส่วนหัวคีย์ API เริ่มต้น โปรดขอให้ไคลเอ็นต์ใช้ชื่อส่วนหัวคีย์ API ที่อัปเดตแล้วและส่งคำขอ API อื่น และยืนยันว่าสามารถแก้ปัญหาได้หรือไม่

สาเหตุ: คีย์ API ไม่ถูกต้อง

ข้อผิดพลาดนี้จะเกิดขึ้นหากมีการส่งผ่านคีย์ API ที่ไม่ถูกต้องในส่วนหัวของคำขอ

การวินิจฉัย

ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา

  1. เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ข้างต้น
  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 ไม่ถูกต้อง

  3. หากอะแดปเตอร์ Apigee สำหรับบันทึก Envoy มีรายการบันทึกที่มี [permission denied] ในส่วน Authenticate error แสดงว่าคีย์ API ที่ส่งเป็นส่วนหนึ่งของคำขอไม่ถูกต้องและเป็นสาเหตุของปัญหา หากไม่เห็น ให้ไปที่สาเหตุ: อะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้

ความละเอียด

หากเห็นข้อความ [permission denied] ในส่วน Authenticate error ในอะแดปเตอร์ Apigee สำหรับบันทึก Envoy ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา

  1. ตรวจสอบคีย์ API ที่ส่งในคำขอ API เทียบกับค่าคีย์ API ที่พบในแอปพลิเคชันที่เชื่อมต่อกับผลิตภัณฑ์ API
  2. หากคีย์ API ที่ไคลเอ็นต์ใช้ไม่ถูกต้อง ให้ขอให้ไคลเอ็นต์ส่งคีย์ API ที่ถูกต้อง
  3. หากคีย์ API ที่ไคลเอ็นต์ใช้ถูกต้องและคุณยังคงเห็นข้อผิดพลาด HTTP 403 อยู่ โปรดติดต่อทีมสนับสนุนของ Apigee Edge เพื่อตรวจสอบปัญหานี้เพิ่มเติม

สาเหตุ: อะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้

ข้อผิดพลาดนี้จะเกิดขึ้นหากอะแดปเตอร์ Apigee สำหรับ Envoy สื่อสารกับพร็อกซี API บริการระยะไกลไม่ได้หากโฮสต์บริการระยะไกลที่กำหนดค่าไว้ไม่ถูกต้อง

การวินิจฉัย

ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา

  1. เปิดใช้บันทึกการแก้ไขข้อบกพร่องตามที่อธิบายไว้ในขั้นตอนที่ 2 ข้างต้น
  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

  3. หากอะแดปเตอร์ Apigee สำหรับบันทึก Envoy มีรายการบันทึกที่มีข้อความ no such host สาเหตุของปัญหานี้ หากไม่เห็น ให้ไปที่ Cause: พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้

ความละเอียด

หากข้อผิดพลาดข้างต้นแสดงใน Apigee Adapter สำหรับบันทึก Envoy ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา

  1. ตรวจสอบอะแดปเตอร์ 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
          
  2. ยืนยันว่าได้ทำให้พร็อกซี remote-service API ใช้งานได้ในสภาพแวดล้อม Edge ที่เกี่ยวข้องแล้ว หากไม่ ให้ใช้พร็อกซี remote-service API ในสภาพแวดล้อม Edge ที่เกี่ยวข้องแล้วลองอีกครั้ง
  3. ตรวจสอบการเชื่อมต่อเครือข่ายระหว่างอะแดปเตอร์ Apigee สำหรับ Envoy และปลายทางพร็อกซี remote-service API หากพบปัญหาการเชื่อมต่อเครือข่าย โปรดติดต่อทีมเครือข่ายและพยายามแก้ปัญหาดังกล่าว

สาเหตุ: พร็อกซี Envoy สื่อสารกับอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้

การวินิจฉัย

ทําตามขั้นตอนต่อไปนี้เพื่อวิเคราะห์ปัญหา

  1. ตรวจสอบว่าได้เปิดใช้บันทึกการแก้ไขข้อบกพร่องใน 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
    
  2. ตรวจสอบอะแดปเตอร์ 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

  3. connection failure อาจเกิดจากหลายสาเหตุ มาดูสถานการณ์แต่ละสถานการณ์กัน

สถานการณ์ที่ 1: กระบวนการของอะแดปเตอร์ไม่ทำงาน

หากกระบวนการของอะแดปเตอร์ Apigee สำหรับ Envoy ไม่ได้ทำงานอยู่ ข้อผิดพลาดนี้ก็อาจเกิดขึ้นได้

  1. ตรวจสอบว่ากระบวนการ Apigee Adapter สำหรับ Envoy ใช้งานได้โดยเรียกใช้คำสั่งต่อไปนี้ หากกระบวนการของอะแดปเตอร์ Apigee สำหรับ Envoy ทำงานอยู่ ผลลัพธ์ของคำสั่งต่อไปนี้ควรแสดงขึ้นมา
    ps -ef | grep apigee-remote-service-envoy
    
  2. หากหน้าต่างไม่ทำงาน นั่นเป็นสาเหตุของปัญหา

ความละเอียด

  1. หากกระบวนการ Apigee Adapter สำหรับ Envoy ไม่ทำงาน ให้เริ่มต้นอะแดปเตอร์ Apigee สำหรับ Envoy
  2. สร้างคําขอ 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 นั่นอาจเป็นสาเหตุของปัญหานี้

ความละเอียด

  1. หยุดอะแดปเตอร์ Apigee สำหรับ Envoy และเริ่มใหม่อีกครั้ง
  2. สร้างคําขอ API อีกครั้งและยืนยันว่าปัญหาได้รับการแก้ไขหรือไม่

สถานการณ์ที่ 3: การเชื่อมต่อเครือข่ายระหว่าง Envoy และ Apigee Adapter สำหรับ Envoy

  1. ตรวจสอบการเชื่อมต่อเครือข่ายระหว่าง 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 '^]'.
    
  2. หากคุณพบข้อผิดพลาด Connection timed out กับ Telnet แสดงว่ามีปัญหาการเชื่อมต่อเครือข่ายระหว่าง Envoy และอะแดปเตอร์ Apigee สำหรับ Envoy

ความละเอียด

หากพบปัญหาการเชื่อมต่อเครือข่ายระหว่าง Envoy และ Apigee Adapter สำหรับ Envoy โปรดติดต่อทีมเครือข่ายและพยายามแก้ปัญหา

หากยังพบปัญหาอยู่ ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย

ต้องรวบรวมข้อมูลการวินิจฉัย

หากปัญหายังคงอยู่หลังจากทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัยต่อไปนี้แล้วติดต่อทีมสนับสนุนของ Apigee Edge

  1. ผลิตภัณฑ์ Apigee ที่ใช้:

    ตัวอย่าง: Apigee Edge Cloud, Apigee OPDK, Apigee Hy, Apigee X

  2. องค์กรและสภาพแวดล้อมของ Apigee
  3. การอ่านคำจำกัดความผลิตภัณฑ์ API โดยใช้ Edge API

    curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT

    ข้อมูลอ้างอิง: Apigee Edge API

  4. เริ่มเซสชันการติดตามในพร็อกซี remote-service API โดยใช้ UI ของ Apigee Edge จำลองปัญหานี้และแชร์ไฟล์ XML ของเซสชันการติดตาม

    ข้อมูลอ้างอิง: การใช้เครื่องมือติดตาม | Apigee Edge

  5. อะแดปเตอร์ 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
  6. คำขอ API ที่ส่งไปยังพร็อกซี Envoy โดยใช้คำสั่ง curl (เอาต์พุตทั้งหมดของคำสั่ง curl)
    curl -v ENVOY_PROXY_ENDPOINT
  7. คำขอ API ที่ส่งไปยังบริการเป้าหมายโดยใช้คำสั่ง curl (เอาต์พุตทั้งหมดของคำสั่ง curl) ดังนี้
    curl -v TARGET_SERVICE_ENDPOINT