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

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

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

Apigee Adapter for Envoy के ज़रिए शुरू किए जाने पर, Envoy Proxy, एचटीटीपी 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 Public और Private Cloud के उपयोगकर्ताओं के लिए
एपीआई प्रॉडक्ट में टारगेट सर्विस यूआरआई पाथ मौजूद नहीं है टारगेट सेवा का यूआरआई पाथ मौजूद नहीं है या उसे एपीआई रिसॉर्स में एपीआई प्रॉडक्ट के तहत नहीं जोड़ा गया है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए
एपीआई प्रॉडक्ट में होस्टनेम मौजूद नहीं है क्लाइंट एपीआई अनुरोध में दिया गया होस्टनेम, Apigee रिमोट सेवा के टारगेट में मौजूद एपीआई प्रॉडक्ट में मौजूद नहीं है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए
अनुरोध के हेडर में एपीआई पासकोड मौजूद नहीं है एपीआई पासकोड को x-api-key एचटीटीपी हेडर में पास नहीं किया गया है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए
एपीआई पासकोड अमान्य है अनुरोध के हिस्से के तौर पर पास की गई एपीआई कुंजी अमान्य है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए
Apigee Adapter for Envoy, रिमोट-सर्विस एपीआई प्रॉक्सी से कम्यूनिकेट नहीं कर पा रहा है Apigee Adapter for Envoy, रिमोट-सर्विस एपीआई प्रॉक्सी से कम्यूनिकेट नहीं कर पा रहा है. Edge Public और Private Cloud के उपयोगकर्ताओं के लिए
Envoy प्रॉक्सी, Apigee Adapter for Envoy से कम्यूनिकेट नहीं कर पा रही है Envoy प्रॉक्सी, Apigee Adapter for Envoy से कम्यूनिकेट नहीं कर पा रहा है Edge Public और Private Cloud के उपयोगकर्ताओं के लिए

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

  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. डीबग लॉग जनरेट करने की सुविधा चालू करें:

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

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

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

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

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

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

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

    Apigee Adapter for Envoy की लॉगिंग के बारे में ज़्यादा जानकारी के लिए, लॉगिंग लेख पढ़ें.

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

रिज़ॉल्यूशन

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

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

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

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

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

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

  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

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

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

रिज़ॉल्यूशन

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

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

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

यह गड़बड़ी तब होगी, जब टारगेट होस्टनेम और पोर्ट के कॉम्बिनेशन को, 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. अगर Apigee Adapter for Envoy के लॉग में, अनुरोध को अनुमति देते समय no targets: HOSTNAME:PORT मैसेज वाली कोई एंट्री मौजूद है, तो यह समस्या की वजह है. अगर ऐसा नहीं है, तो वजह: अनुरोध हेडर में एपीआई पासकोड मौजूद नहीं है पर जाएं.

रिज़ॉल्यूशन

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

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

    अगर आपको यूज़र इंटरफ़ेस (यूआई) में Apigee रिमोट सेवा के टारगेट सेक्शन नहीं दिखता है, तो Edge API का इस्तेमाल करके, एपीआई प्रॉडक्ट में apigee-remote-service-targets नाम का कस्टम एट्रिब्यूट जोड़ें और 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. ऊपर दिया गया टास्क पूरा होने के बाद, Apigee Adapter for Envoy के लॉग की निगरानी करें. साथ ही, तब तक इंतज़ार करें, जब तक Apigee Adapter for Envoy, अपडेट किया गया एपीआई प्रॉडक्ट फ़ेच न कर ले. इसके बाद, गड़बड़ी ठीक होने की पुष्टि करने के लिए, एक और एपीआई अनुरोध भेजें.

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

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

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

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

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

रिज़ॉल्यूशन

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

रिज़ॉल्यूशन

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

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

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

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

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

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

  1. ऊपर दिए गए दूसरे चरण में बताए गए तरीके से, डीबग लॉग जनरेट करने की सुविधा चालू करें.
  2. Apigee Adapter for 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 Adapter for Envoy, remote-service API प्रॉक्सी से कम्यूनिकेट नहीं कर सका. ऐसा इसलिए हुआ, क्योंकि रिमोट सर्वर एपीआई प्रॉक्सी यूआरएल में दिया गया होस्टनेम मान्य नहीं है. इसकी जानकारी गड़बड़ी no such host से मिलती है.

  3. अगर Apigee Adapter for Envoy के लॉग में no such host मैसेज वाली कोई लॉग एंट्री मौजूद है, तो यह समस्या की वजह है. अगर ऐसा नहीं है, तो वजह: Envoy प्रॉक्सी, Apigee Adapter for Envoy से कम्यूनिकेट नहीं कर पा रहा है पर जाएं.

रिज़ॉल्यूशन

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

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

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

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

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

वजह: Envoy प्रॉक्सी, Apigee Adapter for Envoy से कम्यूनिकेट नहीं कर पा रहा है

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

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

  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. Apigee Adapter for 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, connection failure की वजह से Apigee Adapter for Envoy से कम्यूनिकेट नहीं कर सका.

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

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

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

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

रिज़ॉल्यूशन

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

दूसरी स्थिति: अडैप्टर प्रोसेस, तय किए गए पोर्ट पर नहीं सुन रही है

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

अगर Apigee Adapter 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 पर कोई सॉकेट नहीं है, तो इसकी वजह से यह समस्या हो सकती है.

रिज़ॉल्यूशन

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

तीसरा उदाहरण: Envoy और Apigee Adapter for Envoy के बीच नेटवर्क कनेक्टिविटी

  1. Envoy और Apigee Adapter for Envoy के बीच नेटवर्क कनेक्टिविटी की पुष्टि करें:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

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

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

रिज़ॉल्यूशन

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

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

डाइग्नोस्टिक जानकारी इकट्ठा करना ज़रूरी है

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

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

    उदाहरण: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X

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

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

    संदर्भ: Apigee Edge API

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

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

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