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

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

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

Envoy के लिए Apigee Adapter से शुरू करने पर, Envoy प्रॉक्सी, एचटीटीपी 403 Forbidden गड़बड़ी के साथ काम नहीं करता.

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

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

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 प्रॉक्सी, Envoy के लिए Apigee Adapter से कम्यूनिकेट नहीं कर पा रहा है Envoy प्रॉक्सी, Envoy के लिए Apigee Adapter से संपर्क नहीं कर पा रहा है Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

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

  1. पुष्टि करें कि आपको Envoy प्रॉक्सी से 403 Forbidden रिस्पॉन्स मैसेज मिल रहा है. उदाहरण के लिए:
    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 Adapter में डीबग लॉग चालू किए हैं. अगर नहीं, तो Envoy के लिए Apigee Adapter को रोकें और इसे फिर से शुरू करें. साथ ही, नीचे दिए गए निर्देश का इस्तेमाल करके, डीबग लॉग को चालू करें:

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

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

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

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

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

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

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

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

रिज़ॉल्यूशन

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

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

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

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

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

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

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

    इससे पता चलता है कि एपीआई प्रॉडक्ट ENVOY-PRODUCT-1 में पाथ /echo1 नहीं मिला.

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

रिज़ॉल्यूशन

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

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

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

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

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

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

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

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

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

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

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

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

  3. अगर Envoy लॉग के लिए Apigee Adapter में Authenticate error सेक्शन के तहत [missing authentication]मैसेज के साथ लॉग एंट्री शामिल है, तो यह समस्या की वजह है. अगर ऐसा नहीं है, तो वजह: अमान्य एपीआई पासकोड पर जाएं.

रिज़ॉल्यूशन

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

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

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

वजह: एपीआई पासकोड अमान्य है

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

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

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

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

रिज़ॉल्यूशन

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

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

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

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

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

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

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

    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 Adapter, रिमोट-सर्विस एपीआई प्रॉक्सी के साथ कम्यूनिकेट नहीं कर सका. ऐसा इसलिए, क्योंकि रिमोट सर्वर के एपीआई प्रॉक्सी यूआरएल में दिया गया होस्टनेम, गड़बड़ी no such host में बताए गए तरीके से मान्य नहीं है.

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

रिज़ॉल्यूशन

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

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

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

    कॉन्फ़िगरेशन का उदाहरण:

    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 Adapter और remote-service API प्रॉक्सी एंडपॉइंट के बीच नेटवर्क कनेक्टिविटी की पुष्टि करें. अगर नेटवर्क कनेक्टिविटी से जुड़ी कोई समस्या मिलती है, तो अपनी नेटवर्किंग टीम से संपर्क करें और उन्हें हल करने की कोशिश करें.

कारण: 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 Adapter की जांच करें और पुष्टि करें कि इस मैसेज के साथ एक लॉग एंट्री है:
    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 Adapter से कम्यूनिकेट नहीं कर सका.

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

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

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

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

रिज़ॉल्यूशन

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

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

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

अगर Envoy के लिए Apigee Adapter की प्रोसेस चल रही है, तो पुष्टि करें कि पोर्ट 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 Adapter के बीच नेटवर्क कनेक्टिविटी की पुष्टि करें:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    अगर टेलनेट, Envoy के लिए Apigee Adapter से टीसीपी कनेक्शन बना पाता है, तो नीचे दिया गया आउटपुट इसी तरह का एक आउटपुट दिखेगा:

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

रिज़ॉल्यूशन

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

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

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

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

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

    रेफ़रंस: ट्रेस टूल का इस्तेमाल करना | 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