Envoy के लिए Apigee अडैप्टर में एचटीटीपी 403 ऐक्सेस नहीं होने की गड़बड़ी की वजह से, Envoy प्रॉक्सी काम नहीं करता

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

समस्या का ब्यौरा

एचटीटीपी 403 Forbidden गड़बड़ी की वजह से एनवॉय प्रॉक्सी शुरू होने पर काम नहीं करता है Envoy के लिए Apigee अडैप्टर.

गड़बड़ी का मैसेज

गड़बड़ी का यह मैसेज दिखता है:

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 प्रॉक्सी एचटीटीपी 403 गड़बड़ी दिखा सकता है होता है:

वजह ब्यौरा इसके लिए लागू होने वाले, समस्या हल करने के निर्देश
एपीआई प्रॉडक्ट चालू नहीं है एपीआई प्रॉडक्ट किसी खास एनवायरमेंट के लिए चालू नहीं है. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता
एपीआई प्रॉडक्ट में टारगेट सेवा यूआरआई पाथ मौजूद नहीं है टारगेट सेवा का यूआरआई पाथ मौजूद नहीं है या एपीआई प्रॉडक्ट में उसे जोड़ा नहीं गया है संसाधन. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता
एपीआई के प्रॉडक्ट में होस्टनेम मौजूद नहीं है क्लाइंट एपीआई अनुरोध में दिया गया होस्टनेम, एपीआई प्रॉडक्ट में Apigee के तहत मौजूद नहीं है रिमोट सर्विस टारगेट. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता
अनुरोध के हेडर में एपीआई पासकोड मौजूद नहीं है एपीआई पासकोड, x-api-key एचटीटीपी हेडर में पास नहीं किया गया है. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता
एपीआई पासकोड अमान्य है अनुरोध के तौर पर पास की गई एपीआई कुंजी अमान्य है. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता
Envoy के लिए Apigee अडैप्टर रिमोट-सर्विस एपीआई प्रॉक्सी से संपर्क करना Envoy के लिए Apigee अडैप्टर, रिमोट-सेवा एपीआई प्रॉक्सी से कम्यूनिकेट नहीं कर सकता है. Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता
एंवॉय प्रॉक्सी से संपर्क नहीं हो पा रहा है Envoy के लिए Apigee अडैप्टर के साथ Envoy प्रॉक्सी, Envoy के लिए Apigee अडैप्टर से संपर्क नहीं कर पा रहा है Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता

शुरू करने से पहले

  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. डीबग लॉग चालू करें:

    पक्का करें कि आपने Envoy के लिए Apigee अडैप्टर में डीबग लॉग चालू किया हो, ताकि इसके बारे में ज़्यादा जानकारी पाई जा सके गड़बड़ी को ठीक करें. अगर ऐसा नहीं है, तो Envoy के लिए Apigee अडैप्टर को बंद करें और उसे फिर से शुरू करें. साथ ही, डीबग लॉग को चालू करें ऐसा करने के लिए:

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

वजह: एपीआई प्रॉडक्ट चालू नहीं है

यह गड़बड़ी तब होगी, जब Envoy प्रॉक्सी में इस्तेमाल किया जाने वाला खास एपीआई प्रॉडक्ट एक खास एनवायरमेंट है जिसमें एपीआई कॉल शुरू होते हैं.

संक्रमण की जांच

समस्या का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. ऊपर दूसरे चरण में बताए गए तरीके से डीबग लॉग चालू करें.
  2. Envoy लॉग के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि यह मैसेज दिख रहा है 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
    

    ऊपर दिए गए उदाहरण से पता चलता है कि एपीआई प्रॉडक्ट ENVOY-PRODUCT-1, Envoy के लिए Apigee अडैप्टर.

    Envoy लॉगिंग के लिए Apigee अडैप्टर के बारे में ज़्यादा जानकारी के लिए, यहां देखें लॉग करना.

  3. अगर आपको एपीआई अनुरोध को अनुमति देते समय यह मैसेज दिखता है, तो इसका मतलब है कि कि यह एपीआई प्रॉडक्ट किसी खास एनवायरमेंट के लिए चालू नहीं है एपीआई कॉल कर रहा है.
  4. इसकी पुष्टि करने के लिए, नीचे दिया गया तरीका अपनाएं:
    1. Edge के यूज़र इंटरफ़ेस (यूआई) में लॉग इन करें.
    2. पब्लिश करें > एपीआई प्रॉडक्ट पेज पर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसे इसका इस्तेमाल Envoy के लिए Apigee अडैप्टर को कॉन्फ़िगर करने के लिए किया जाता है.
    3. पुष्टि करें कि जिस एनवायरमेंट में एपीआई अनुरोध किए जा रहे हैं वह एपीआई प्रॉडक्ट में चालू होना चाहिए.
    4. अगर एपीआई प्रॉडक्ट में किसी खास एनवायरमेंट को चालू नहीं किया गया है, तो इसकी वजह यह है इस समस्या को हल करने में मदद मिलेगी.
  5. अगर किसी एनवायरमेंट को पहले से ही चालू किया गया है, तो वजह: एपीआई प्रॉडक्ट में टारगेट सेवा यूआरआई पाथ मौजूद नहीं है.

रिज़ॉल्यूशन

अगर एपीआई प्रॉडक्ट में किसी खास एनवायरमेंट को चालू नहीं किया गया है, तो यह तरीका अपनाएं समस्या हल करें:

  1. Edge के यूज़र इंटरफ़ेस (यूआई) में लॉग इन करें.
  2. पब्लिश करें > एपीआई प्रॉडक्ट पेज पर जाकर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसका आपने इस्तेमाल किया था Envoy के लिए Apigee अडैप्टर कॉन्फ़िगर करने के लिए.
  3. एपीआई प्रॉडक्ट पर > प्रॉडक्ट का नाम पेज पर, बदलाव करें पर क्लिक करें.
  4. उस खास एनवायरमेंट को चालू करें जिसमें आपको एपीआई अनुरोध करने हैं. ऐसा करने के लिए, चेकबॉक्स का इस्तेमाल करें.
  5. सेव करें पर क्लिक करें.

वजह: एपीआई प्रॉडक्ट में टारगेट सेवा यूआरआई पाथ मौजूद नहीं है

यह गड़बड़ी तब होगी, जब इस्तेमाल किए गए खास एपीआई प्रॉडक्ट में टारगेट का यूआरआई पाथ नहीं बताया गया हो Envoy प्रॉक्सी के ज़रिए.

संक्रमण की जांच

समस्या का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. ऊपर दूसरे चरण में बताए गए तरीके से डीबग लॉग चालू करें.
  2. Envoy लॉग के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि नीचे दिया गया मैसेज यह सेक्शन में किसी खास टारगेट से जुड़े खास एपीआई प्रॉडक्ट के लिए दिखाया जाता है 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 नहीं मिला था ENVOY-PRODUCT-1.

  3. अगर आपकोno path: REQUEST_URI_PATH Envoy डीबग लॉग के लिए Apigee अडैप्टर, तो इस समस्या की वजह है. अगर नहीं, तो इस पर जाएं वजह: एपीआई प्रॉडक्ट में होस्टनेम मौजूद नहीं है.

रिज़ॉल्यूशन

अगर किसी खास टारगेट के लिए, एपीआई प्रॉडक्ट में अनुरोध का यूआरआई नहीं जोड़ा जाता है, तो समस्या हल करने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. Edge के यूज़र इंटरफ़ेस (यूआई) में लॉग इन करें.
  2. पब्लिश करें > एपीआई प्रॉडक्ट पेज पर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसे इसका इस्तेमाल Envoy के लिए Apigee अडैप्टर को कॉन्फ़िगर करने के लिए किया जाता है.
  3. एपीआई प्रॉडक्ट पर > प्रॉडक्ट का नाम पेज पर, बदलाव करें पर क्लिक करें.
  4. एपीआई संसाधन पैनल में, एपीआई प्रॉडक्ट में एपीआई अनुरोध का यूआरआई जोड़ें.
  5. Envoy लॉग के लिए Apigee अडैप्टर को मॉनिटर करें और Envoy के लिए Apigee अडैप्टर होने तक इंतज़ार करें अपडेट किए गए एपीआई प्रॉडक्ट को फ़ेच करता है. इसके बाद, समस्या के ठीक होने की पुष्टि करने के लिए, एक और एपीआई अनुरोध भेजें.

वजह: एपीआई प्रॉडक्ट में होस्टनेम मौजूद नहीं है

यह गड़बड़ी तब होती है, जब टारगेट होस्टनेम और पोर्ट कॉम्बिनेशन को किसी खास डोमेन नेम में नहीं जोड़ा जाता है Envoy प्रॉक्सी के ज़रिए इस्तेमाल किया जाने वाला एपीआई प्रॉडक्ट.

संक्रमण की जांच

समस्या का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. ऊपर दूसरे चरण में बताए गए तरीके से डीबग लॉग चालू करें.
  2. Envoy लॉग के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि नीचे दिया गया मैसेज यह सेक्शन में किसी खास टारगेट से जुड़े खास एपीआई प्रॉडक्ट के लिए दिखाया जाता है 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 एपीआई प्रॉडक्ट ENVOY-PRODUCT-1 में नहीं मिला.

  3. अगर Envoy लॉग के लिए Apigee अडैप्टर में, अनुरोध को अनुमति देते समय no targets: HOSTNAME:PORT मैसेज वाली एंट्री शामिल है, तो यह है समस्या की वजह क्या है. अगर नहीं, तो इस पर जाएं वजह: अनुरोध के हेडर में एपीआई पासकोड मौजूद नहीं है.

रिज़ॉल्यूशन

अगर एपीआई प्रॉडक्ट में टारगेट होस्टनेम और पोर्ट कॉम्बिनेशन को नहीं जोड़ा जाता है, तो समस्या हल करने के लिए, यहां दिया गया तरीका अपनाएं:

  1. Edge के यूज़र इंटरफ़ेस (यूआई) में लॉग इन करें.
  2. पब्लिश करें > एपीआई प्रॉडक्ट पेज पर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसे इसका इस्तेमाल Envoy के लिए Apigee अडैप्टर को कॉन्फ़िगर करने के लिए किया जाता है.
  3. एपीआई प्रॉडक्ट पर > प्रॉडक्ट का नाम पेज पर, बदलाव करें पर क्लिक करें.
  4. Apigee रिमोट सर्विस टारगेट पैनल में, टारगेट होस्टनेम जोड़ें और पोर्ट करें और सेव करें पर क्लिक करें.

    अगर आपको यूज़र इंटरफ़ेस (यूआई) में Apigee रिमोट सर्विस टारगेट सेक्शन नहीं दिखता है, तो एपीआई प्रॉडक्ट में कस्टम एट्रिब्यूट जोड़ने के लिए, नाम apigee-remote-service-targets रखें और Edge API का इस्तेमाल करके HOSTNAME:PORT वैल्यू. उदाहरण के लिए:

    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. ऊपर दिया गया टास्क पूरा होने के बाद, Envoy लॉग के लिए Apigee अडैप्टर को मॉनिटर करें और Envoy के लिए Apigee अडैप्टर, अपडेट किए गए एपीआई प्रॉडक्ट को फ़ेच करता है. इसके बाद, कोई दूसरा एपीआई भेजें समस्या के ठीक होने की पुष्टि करने का अनुरोध करें.

वजह: अनुरोध के हेडर में API (एपीआई) कुंजी मौजूद नहीं है

यह गड़बड़ी तब होती है, जब अनुरोध के हेडर के हिस्से के तौर पर एपीआई पासकोड पास नहीं किया जाता है.

संक्रमण की जांच

समस्या का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. ऊपर दूसरे चरण में बताए गए तरीके से डीबग लॉग चालू करें.
  2. Envoy लॉग के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि आपको Authenticate error के तहत [missing authentication] मैसेज सेक्शन में जाएं.

    डीबग लॉग आउटपुट का सैंपल:

    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. अगर Envoy लॉग के लिए Apigee अडैप्टर में Authenticate error सेक्शन के तहत [missing authentication] मैसेज वाली लॉग एंट्री शामिल है, तो यह होगा समस्या की वजह है. अगर नहीं, तो इस पर जाएं वजह: एपीआई पासकोड अमान्य है.

रिज़ॉल्यूशन

अगर [missing authentication] गड़बड़ी का मैसेज Envoy लॉग के लिए Apigee अडैप्टर, समस्या हल करने के लिए यह तरीका अपनाएं:

  1. देखें कि क्लाइंट ने एचटीटीपी हेडर x-api-key का इस्तेमाल करके, एपीआई पासकोड भेजा है या नहीं एपीआई अनुरोध की वजह से अगर ऐसा नहीं है, तो एचटीटीपी हेडर में क्लाइंट से एपीआई पासकोड भेजने का अनुरोध करें x-api-key.
  2. Envoy कॉन्फ़िगरेशन फ़ाइल के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि डिफ़ॉल्ट एपीआई पासकोड हेडर का नाम 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-key.

  3. अगर एपीआई पासकोड के हेडर का डिफ़ॉल्ट नाम बदल गया है, तो क्लाइंट से अनुरोध करें कि वे अपडेट किए गए वर्शन का इस्तेमाल करें एपीआई पासकोड के हेडर का नाम डालें और दूसरा एपीआई अनुरोध भेजें. साथ ही, पुष्टि करें कि इससे समस्या ठीक हुई या नहीं.

वजह: गलत एपीआई पासकोड

यह गड़बड़ी तब होती है, जब अनुरोध के हेडर के हिस्से के तौर पर अमान्य एपीआई पासकोड दिया जाता है.

संक्रमण की जांच

समस्या का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. ऊपर दूसरे चरण में बताए गए तरीके से डीबग लॉग चालू करें.
  2. Envoy लॉग के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि आपको मैसेज दिख रहा है [permission denied] Authenticate error सेक्शन के नीचे. आम तौर पर, यह एपीआई पासकोड को अडैप्टर से फ़ेच करने के बाद दिखाया जाता है. अडैप्टर को इसके बारे में बताया जाता है 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)
    

    इस उदाहरण में, एपीआई अनुरोध में भेजी गई एपीआई पासकोड मान्य नहीं थी.

  3. अगर Envoy लॉग के लिए Apigee अडैप्टर में Authenticate error सेक्शन के तहत, [permission denied] वाली लॉग एंट्री शामिल है, तो यह दिखाता है कि अनुरोध के तौर पर पास की गई एपीआई कुंजी अमान्य है और यह समस्या की वजह है. अगर नहीं, तो इस पर जाएं वजह: Envoy के लिए Apigee अडैप्टर रिमोट-सर्विस एपीआई प्रॉक्सी से कम्यूनिकेट करने में समस्या आ रही है.

रिज़ॉल्यूशन

अगर Envoy लॉग के लिए Apigee अडैप्टर के Authenticate error सेक्शन में [permission denied] मैसेज दिखता है, तो यह तरीका अपनाएं समस्या हल करने के लिए:

  1. एपीआई अनुरोध में भेजी गई एपीआई पासकोड की जांच, एपीआई प्रॉडक्ट से कनेक्ट किया गया ऐप्लिकेशन.
  2. अगर क्लाइंट ने जिस एपीआई पासकोड का इस्तेमाल किया है वह मान्य नहीं है, तो क्लाइंट से मान्य एपीआई पासकोड भेजने का अनुरोध करें.
  3. अगर क्लाइंट ने जो एपीआई पासकोड इस्तेमाल किया है वह मान्य है और अगर आपको अब भी कोई एचटीटीपी 403 गड़बड़ी हुई. इसे ठीक करने के लिए, कृपया Apigee Edge की सहायता टीम से संपर्क करें.

वजह: Envoy के लिए Apigee अडैप्टर, रिमोट-सेवा एपीआई प्रॉक्सी से कम्यूनिकेट नहीं कर पा रहा है

यह गड़बड़ी तब होगी, जब Envoy के लिए Apigee अडैप्टर, रिमोट से कनेक्ट नहीं कर पाता है अगर कॉन्फ़िगर किया गया रिमोट सर्विस होस्ट अमान्य है, तो सर्विस एपीआई प्रॉक्सी.

संक्रमण की जांच

समस्या का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. ऊपर दूसरे चरण में बताए गए तरीके से डीबग लॉग चालू करें.
  2. Envoy लॉग के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि आपको यह मैसेज दिखता है:

    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
    

    इस उदाहरण में, Envoy के लिए Apigee अडैप्टर, रिमोट-सेवा एपीआई प्रॉक्सी क्योंकि रिमोट सर्वर एपीआई प्रॉक्सी में दिया गया होस्टनेम जैसा कि no such host गड़बड़ी में बताया गया है, यूआरएल मान्य नहीं है .

  3. अगर Envoy लॉग के लिए Apigee अडैप्टर में no such host मैसेज वाली लॉग एंट्री होती है, तो यह समस्या की वजह है. अगर नहीं, तो इस पर जाएं वजह: Envoy प्रॉक्सी, Envoy के लिए Apigee अडैप्टर से संपर्क नहीं कर पा रहा है.

रिज़ॉल्यूशन

अगर ऊपर दी गई गड़बड़ियां Envoy लॉग के लिए Apigee अडैप्टर में दिखती हैं, तो ये काम करें इस समस्या को हल करने का तरीका:

  1. Envoy कॉन्फ़िगरेशन फ़ाइल के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि रिमोट-सेवा API (एपीआई) प्रॉक्सी यूआरएल मान्य है.

    अगर नहीं, तो Envoy के लिए Apigee अडैप्टर को बंद करें, तो कॉन्फ़िगरेशन फ़ाइल चुनकर, Envoy के लिए Apigee अडैप्टर चालू करें, और दूसरा एपीआई अनुरोध भेजें और समस्या हल होने की पुष्टि करें.

    कॉन्फ़िगरेशन का नमूना:

    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 एपीआई प्रॉक्सी को सही Edge में डिप्लॉय किया गया है पर्यावरण को ध्यान में रखते हुए काम करना. अगर ऐसा नहीं है, तो सही Edge में remote-service एपीआई प्रॉक्सी डिप्लॉय करें माहौल बनाएं और फिर से कोशिश करें.
  3. Envoy के लिए Apigee अडैप्टर और remote-service एपीआई प्रॉक्सी एंडपॉइंट. अगर कोई नेटवर्क कनेक्टिविटी है समस्याओं का पता चला है, तो अपनी नेटवर्किंग टीम से संपर्क करें और समस्या को हल करने की कोशिश करें.

वजह: Envoy प्रॉक्सी, Envoy के लिए Apigee अडैप्टर से संपर्क नहीं कर पा रहा है

संक्रमण की जांच

समस्या का पता लगाने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. पक्का करें कि आपने Envoy में डीबग लॉग को चालू किया हो. अगर नहीं, तो Envoy को रोकें और फिर से शुरू करें, डीबग लॉग चालू करना. इसके बाद, एपीआई का दूसरा अनुरोध भेजें.

    स्टैंडअलोन डिप्लॉयमेंट:

    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. Envoy लॉग के लिए Apigee अडैप्टर की जांच करें और पुष्टि करें कि मैसेज वाली लॉग एंट्री मौजूद है:
    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 चैनल के साथ बातचीत नहीं कर सका connection failure की वजह से, Envoy के लिए Apigee अडैप्टर.

  3. connection failure कई वजहों से हो सकता है. आइए, हर स्थिति पर नज़र डालते हैं.

स्थिति #1: अडैप्टर प्रोसेस नहीं चल रही है

अगर Envoy प्रोसेस के लिए Apigee अडैप्टर काम नहीं कर रहा है, तो यह गड़बड़ी हो सकती है.

  1. नीचे दिए गए निर्देशों का पालन करके पुष्टि करें कि Envoy प्रोसेस के लिए Apigee अडैप्टर चल रहा है आदेश. अगर Envoy प्रोसेस के लिए Apigee अडैप्टर चल रहा है, तो ये नतीजे होते हैं आदेश में इसे सूचीबद्ध होना चाहिए.
    ps -ef | grep apigee-remote-service-envoy
    
  2. अगर वह नहीं चल रहा है, तो समस्या की वजह यही है.

रिज़ॉल्यूशन

  1. अगर Envoy प्रोसेस के लिए Apigee अडैप्टर काम नहीं कर रहा है, तो Envoy के लिए Apigee अडैप्टर.
  2. एपीआई के लिए दूसरा अनुरोध करें और पुष्टि करें कि समस्या ठीक हो गई है या नहीं.

स्थिति #2: अडैप्टर प्रोसेस किसी खास पोर्ट पर नहीं सुन रही है

अगर Envoy प्रोसेस के लिए Apigee अडैप्टर, किसी खास पोर्ट पर नहीं सुन रहा है, तो यह गड़बड़ी हो सकती है.

अगर Envoy प्रोसेस के लिए Apigee अडैप्टर चल रहा है, तो पुष्टि करें कि कोई सॉकेट चालू हो रहा है पोर्ट 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 पर कोई सॉकेट नहीं चल रहा है, तो यह इस समस्या का कारण हो सकता है.

रिज़ॉल्यूशन

  1. Envoy के लिए Apigee अडैप्टर को बंद करें और इसे फिर से शुरू करें.
  2. एपीआई के लिए दूसरा अनुरोध करें और पुष्टि करें कि समस्या ठीक हो गई है या नहीं.

स्थिति #3: Envoy और Envoy के लिए Apigee अडैप्टर के बीच नेटवर्क कनेक्टिविटी

  1. Envoy के लिए, Envoy और Apigee अडैप्टर के बीच नेटवर्क कनेक्टिविटी की पुष्टि करें:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

    अगर टेलनेट, Envoy के लिए Apigee अडैप्टर से टीसीपी कनेक्शन बना सकता है इससे मिलता-जुलता आउटपुट दिखेगा:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. अगर आपको टेलनेट के साथ Connection timed out गड़बड़ी दिखती है, तो इसका मतलब है कि Envoy और Envoy के लिए Apigee अडैप्टर के बीच नेटवर्क कनेक्टिविटी की कोई समस्या है.

रिज़ॉल्यूशन

अगर आपको Envoy और Envoy के लिए Apigee अडैप्टर के बीच नेटवर्क कनेक्टिविटी से जुड़ी कोई समस्या दिखती है, तो कृपया अपनी नेटवर्किंग टीम से जुड़ें और समस्या को हल करने की कोशिश करें.

अगर इसके बाद भी समस्या बनी रहती है, तो यहां जाएं गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है.

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करना ज़रूरी है

अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो इस गड़बड़ी की जानकारी इकट्ठा करें जानकारी पर जाएं और Apigee Edge की सहायता टीम से संपर्क करें:

  1. इस्तेमाल किया गया Apigee प्रॉडक्ट:

    उदाहरण के लिए: Apigee Edge Cloud, Apigee OPDK, Apigee हाइब्रिड, Apigee X

  2. Apigee का संगठन और एनवायरमेंट
  3. Edge API का इस्तेमाल करके, एपीआई प्रॉडक्ट की परिभाषा को पढ़ा गया:

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

    रेफ़रंस: Apigee Edge एपीआई

  4. इसका इस्तेमाल करके remote-service एपीआई प्रॉक्सी में ट्रेस सेशन शुरू करें Apigee Edge का यूज़र इंटरफ़ेस (यूआई). इस सवाल को दोबारा बनाएं और ट्रेस सेशन की एक्सएमएल फ़ाइल शेयर करें.

    रेफ़रंस: ट्रेस टूल का इस्तेमाल करना | Apigee Edge

  5. Envoy लॉग के लिए Apigee अडैप्टर (दी गई समयावधि से जुड़े पूरे लॉग)

    स्टैंडअलोन डिप्लॉयमेंट:

    # 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. curl निर्देश का इस्तेमाल करके, Envoy प्रॉक्सी को एपीआई अनुरोध भेजा गया है (curl कमांड का पूरा आउटपुट):
    curl -v ENVOY_PROXY_ENDPOINT
  7. curl निर्देश का इस्तेमाल करके, टारगेट सेवा को भेजा गया एपीआई अनुरोध (पूरा हुआ curl कमांड का आउटपुट):
    curl -v TARGET_SERVICE_ENDPOINT