พร็อกซี 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 สาธารณะและ 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

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

  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 for Envoy เพื่อบันทึกรายละเอียดเพิ่มเติมเกี่ยวกับ ข้อผิดพลาด หากไม่ใช่ ให้หยุดอะแดปเตอร์ Apigee สำหรับ Envoy แล้วเริ่มอีกครั้งโดยเปิดใช้บันทึกการแก้ไขข้อบกพร่อง โดยใช้คำสั่งต่อไปนี้

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

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

ข้อผิดพลาดนี้จะเกิดขึ้นหากผลิตภัณฑ์ API ที่ Envoy Proxy ใช้ไม่ได้เปิดใช้ใน สภาพแวดล้อมเฉพาะที่มีการเรียกใช้ 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 Proxy

การวินิจฉัย

ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา

  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 สำหรับบันทึกการแก้ไขข้อบกพร่องของ 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 Proxy ใช้

การวินิจฉัย

ทำตามขั้นตอนต่อไปนี้เพื่อวินิจฉัยปัญหา

  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 ให้เพิ่มชื่อโฮสต์เป้าหมายและ พอร์ต และคลิกบันทึก

    หากคุณไม่เห็นส่วนเป้าหมายบริการระยะไกล 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 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

  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 Adapter for 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 บริการระยะไกล เนื่องจากชื่อโฮสต์ที่ให้ไว้ในพร็อกซี API เซิร์ฟเวอร์ระยะไกล URL ไม่ถูกต้องตามที่ระบุโดยข้อผิดพลาด no such host

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

ความละเอียด

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

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

สาเหตุ: พร็อกซี 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 สำหรับ Envoy ทำงานอยู่โดยการเรียกใช้โค้ดต่อไปนี้ คำสั่ง หากกระบวนการของอะแดปเตอร์ Apigee for Envoy ทำงานอยู่ ผลลัพธ์จะเป็นดังนี้ ควรระบุรายการนั้นๆ
    ps -ef | grep apigee-remote-service-envoy
    
  2. ถ้าไม่ทำงาน นั่นเป็นสาเหตุของปัญหา

ความละเอียด

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

ความละเอียด

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

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

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

ความละเอียด

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

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

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

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

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

    ตัวอย่าง: Apigee Edge Cloud, Apigee OPDK, Apigeeไฮบริด, 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. เริ่มเซสชันการติดตามในพร็อกซี API remote-service โดยใช้ 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