आपको 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 के उपयोगकर्ताओं के लिए |
शुरू करने से पहले
- पुष्टि करें कि आपको 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
डीबग लॉग जनरेट करने की सुविधा चालू करें:
पक्का करें कि आपने Apigee Adapter for Envoy में डीबग लॉग चालू किए हों, ताकि गड़बड़ी के बारे में ज़्यादा जानकारी कैप्चर की जा सके. अगर ऐसा नहीं होता है, तो Apigee Adapter for Envoy को बंद करें और फिर से चालू करें. साथ ही, डिबग लॉग चालू करें. इसके लिए, यह कमांड इस्तेमाल करें:
apigee-remote-service-envoy -c config.yaml -l debug
वजह: एपीआई प्रॉडक्ट चालू नहीं है
यह गड़बड़ी तब होती है, जब Envoy Proxy इस्तेमाल करने वाले एपीआई प्रॉडक्ट को उस एनवायरमेंट में चालू नहीं किया जाता है जिसमें एपीआई कॉल किए जाते हैं.
संक्रमण की जांच
समस्या का पता लगाने के लिए, यह तरीका अपनाएं:
- ऊपर दिए गए दूसरे चरण में बताए गए तरीके से, डीबग लॉग जनरेट करने की सुविधा चालू करें.
- 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 की लॉगिंग के बारे में ज़्यादा जानकारी के लिए, लॉगिंग लेख पढ़ें.
- अगर एपीआई अनुरोध को अनुमति देते समय आपको यह मैसेज दिखता है, तो इसका मतलब यह हो सकता है कि जिस एपीआई प्रॉडक्ट के लिए एपीआई कॉल किए जा रहे हैं वह उस एनवायरमेंट में चालू नहीं है.
- इसकी पुष्टि करने के लिए, यह तरीका अपनाएं:
- Edge UI में लॉग इन करें.
- पब्लिश करें > एपीआई प्रॉडक्ट पेज पर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसका इस्तेमाल आपने Apigee Adapter for Envoy को कॉन्फ़िगर करने के लिए किया था.
- पुष्टि करें कि जिस एनवायरमेंट में एपीआई अनुरोध किए जा रहे हैं वह एपीआई प्रॉडक्ट में चालू हो.
- अगर एपीआई प्रॉडक्ट में कोई खास एनवायरमेंट चालू नहीं है, तो इस समस्या की वजह यही है.
- अगर खास एनवायरमेंट पहले से चालू है, तो वजह: एपीआई प्रॉडक्ट में टारगेट सर्विस यूआरआई पाथ मौजूद नहीं है पर जाएं.
रिज़ॉल्यूशन
अगर एपीआई प्रॉडक्ट में कोई खास एनवायरमेंट चालू नहीं है, तो इस समस्या को हल करने के लिए यह तरीका अपनाएं:
- Edge UI में लॉग इन करें.
- पब्लिश करें > एपीआई प्रॉडक्ट पेज पर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसका इस्तेमाल आपने Apigee Adapter for Envoy को कॉन्फ़िगर करने के लिए किया था.
- एपीआई प्रॉडक्ट > प्रॉडक्ट का नाम पेज पर, बदलाव करें पर क्लिक करें.
- उस एनवायरमेंट को चालू करें जिसमें आपको एपीआई अनुरोध करने हैं. इसके लिए, एनवायरमेंट से जुड़ा चेकबॉक्स चुनें.
- सेव करें पर क्लिक करें.
वजह: एपीआई प्रॉडक्ट में टारगेट सेवा का यूआरआई पाथ मौजूद नहीं है
यह गड़बड़ी तब होती है, जब Envoy Proxy के इस्तेमाल किए गए किसी एपीआई प्रॉडक्ट में टारगेट का यूआरआई पाथ नहीं दिया गया हो.
संक्रमण की जांच
समस्या का पता लगाने के लिए, यह तरीका अपनाएं:
- ऊपर दिए गए दूसरे चरण में बताए गए तरीके से, डीबग लॉग जनरेट करने की सुविधा चालू करें.
-
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नहीं मिला. - अगर आपको Apigee Adapter for Envoy के डीबग लॉग में
no path: REQUEST_URI_PATHमैसेज दिखता है, तो इस समस्या की वजह यही है. अगर ऐसा नहीं है, तो वजह: एपीआई प्रॉडक्ट में होस्टनेम मौजूद नहीं है पर जाएं.
रिज़ॉल्यूशन
अगर किसी खास टारगेट के लिए, अनुरोध URI को एपीआई प्रॉडक्ट में नहीं जोड़ा गया है, तो समस्या हल करने के लिए यह तरीका अपनाएं:
- Edge UI में लॉग इन करें.
- पब्लिश करें > एपीआई प्रॉडक्ट पेज पर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसका इस्तेमाल आपने Apigee Adapter for Envoy को कॉन्फ़िगर करने के लिए किया था.
- एपीआई प्रॉडक्ट > प्रॉडक्ट का नाम पेज पर, बदलाव करें पर क्लिक करें.
- एपीआई रिसॉर्स पैनल में, एपीआई अनुरोध यूआरआई को एपीआई प्रॉडक्ट में जोड़ें.
- Apigee Adapter for Envoy के लॉग मॉनिटर करें और तब तक इंतज़ार करें, जब तक Apigee Adapter for Envoy अपडेट किया गया एपीआई प्रॉडक्ट फ़ेच न कर ले. इसके बाद, गड़बड़ी ठीक होने की पुष्टि करने के लिए, एपीआई का दूसरा अनुरोध भेजें.
वजह: एपीआई प्रॉडक्ट में होस्टनेम मौजूद नहीं है
यह गड़बड़ी तब होगी, जब टारगेट होस्टनेम और पोर्ट के कॉम्बिनेशन को, Envoy प्रॉक्सी के इस्तेमाल किए गए खास एपीआई प्रॉडक्ट में नहीं जोड़ा गया हो.
संक्रमण की जांच
समस्या का पता लगाने के लिए, यह तरीका अपनाएं:
- ऊपर दिए गए दूसरे चरण में बताए गए तरीके से, डीबग लॉग जनरेट करने की सुविधा चालू करें.
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में नहीं मिला.- अगर Apigee Adapter for Envoy के लॉग में, अनुरोध को अनुमति देते समय
no targets: HOSTNAME:PORTमैसेज वाली कोई एंट्री मौजूद है, तो यह समस्या की वजह है. अगर ऐसा नहीं है, तो वजह: अनुरोध हेडर में एपीआई पासकोड मौजूद नहीं है पर जाएं.
रिज़ॉल्यूशन
अगर टारगेट होस्टनेम और पोर्ट के कॉम्बिनेशन को एपीआई प्रॉडक्ट में नहीं जोड़ा गया है, तो समस्या हल करने के लिए यह तरीका अपनाएं:
- Edge UI में लॉग इन करें.
- पब्लिश करें > एपीआई प्रॉडक्ट पेज पर, उस एपीआई प्रॉडक्ट पर क्लिक करें जिसका इस्तेमाल आपने Apigee Adapter for Envoy को कॉन्फ़िगर करने के लिए किया था.
- एपीआई प्रॉडक्ट > प्रॉडक्ट का नाम पेज पर, बदलाव करें पर क्लिक करें.
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": [] }- ऊपर दिया गया टास्क पूरा होने के बाद, Apigee Adapter for Envoy के लॉग की निगरानी करें. साथ ही, तब तक इंतज़ार करें, जब तक Apigee Adapter for Envoy, अपडेट किया गया एपीआई प्रॉडक्ट फ़ेच न कर ले. इसके बाद, गड़बड़ी ठीक होने की पुष्टि करने के लिए, एक और एपीआई अनुरोध भेजें.
वजह: अनुरोध के हेडर में एपीआई पासकोड मौजूद नहीं है
अगर एपीआई पासकोड को अनुरोध हेडर के हिस्से के तौर पर नहीं भेजा जाता है, तो यह गड़बड़ी होगी.
संक्रमण की जांच
समस्या का पता लगाने के लिए, यह तरीका अपनाएं:
- ऊपर दिए गए दूसरे चरण में बताए गए तरीके से, डीबग लॉग जनरेट करने की सुविधा चालू करें.
- 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]मैसेज मौजूद है. इस मैसेज से पता चलता है कि एपीआई पासकोड को अनुरोध के हेडर के तौर पर नहीं भेजा गया है. - अगर Apigee Adapter for Envoy के लॉग में,
[missing authentication]सेक्शन मेंAuthenticate errorमैसेज वाली लॉग एंट्री मौजूद है, तो यह समस्या की वजह है. अगर ऐसा नहीं है, तो वजह: एपीआई पासकोड अमान्य है पर जाएं.
रिज़ॉल्यूशन
अगर Apigee Adapter for Envoy के लॉग में गड़बड़ी [missing authentication] दिखती है, तो समस्या हल करने के लिए यह तरीका अपनाएं:
- देखें कि क्लाइंट ने एपीआई अनुरोध में, एचटीटीपी हेडर
x-api-keyका इस्तेमाल करके एपीआई पासकोड भेजा है या नहीं. अगर ऐसा नहीं है, तो क्लाइंट से अनुरोध करें कि वह एचटीटीपी हेडरx-api-keyमें एपीआई कुंजी भेजे. - 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के हिस्से के तौर पर एपीआई पासकोड पास करना होगा. - अगर डिफ़ॉल्ट एपीआई पासकोड के हेडर का नाम बदल दिया गया है, तो क्लाइंट से अपडेट किया गया एपीआई पासकोड के हेडर का नाम इस्तेमाल करने के लिए कहें. इसके बाद, एपीआई का दूसरा अनुरोध भेजें और पुष्टि करें कि समस्या हल हो गई है या नहीं.
वजह: एपीआई पासकोड अमान्य है
अगर अनुरोध के हेडर के हिस्से के तौर पर अमान्य एपीआई पास की जाती है, तो यह गड़बड़ी होगी.
संक्रमण की जांच
समस्या का पता लगाने के लिए, यह तरीका अपनाएं:
- ऊपर दिए गए दूसरे चरण में बताए गए तरीके से, डीबग लॉग जनरेट करने की सुविधा चालू करें.
- 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)
इस उदाहरण में, एपीआई अनुरोध में भेजा गया एपीआई पासकोड मान्य नहीं था.
- अगर Apigee Adapter for Envoy के लॉग में,
[permission denied]सेक्शन मेंAuthenticate errorवाली लॉग एंट्री मौजूद है, तो इसका मतलब है कि अनुरोध के हिस्से के तौर पर पास की गई एपीआई कुंजी अमान्य है और यही समस्या की वजह है. अगर ऐसा नहीं है, तो वजह: Apigee Adapter for Envoy, रिमोट-सर्विस एपीआई प्रॉक्सी से कम्यूनिकेट नहीं कर पा रहा है पर जाएं.
रिज़ॉल्यूशन
अगर Apigee Adapter for Envoy के लॉग में, Authenticate
error सेक्शन में [permission denied] मैसेज दिखता है, तो इस समस्या को हल करने के लिए यह तरीका अपनाएं:
- एपीआई अनुरोध में भेजी गई एपीआई पासकोड की तुलना, एपीआई प्रॉडक्ट से कनेक्ट किए गए ऐप्लिकेशन में मौजूद एपीआई पासकोड की वैल्यू से करें.
- अगर क्लाइंट की ओर से इस्तेमाल किया गया एपीआई पासकोड मान्य नहीं है, तो क्लाइंट से मान्य एपीआई पासकोड भेजने का अनुरोध करें.
- अगर क्लाइंट की इस्तेमाल की गई एपीआई कुंजी मान्य है और आपको अब भी एचटीटीपी
403गड़बड़ी दिख रही है, तो कृपया इस बारे में ज़्यादा जानने के लिए Apigee Edge की सहायता टीम से संपर्क करें.
वजह: Apigee Adapter for Envoy, रिमोट-सर्विस एपीआई प्रॉक्सी से कम्यूनिकेट नहीं कर पा रहा है
यह गड़बड़ी तब होती है, जब Apigee Adapter for Envoy, रिमोट सेवा के एपीआई प्रॉक्सी से कम्यूनिकेट नहीं कर पाता. ऐसा तब होता है, जब कॉन्फ़िगर किया गया रिमोट सेवा होस्ट अमान्य होता है.
संक्रमण की जांच
समस्या का पता लगाने के लिए, यह तरीका अपनाएं:
- ऊपर दिए गए दूसरे चरण में बताए गए तरीके से, डीबग लॉग जनरेट करने की सुविधा चालू करें.
-
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से मिलती है. - अगर Apigee Adapter for Envoy के लॉग में
no such hostमैसेज वाली कोई लॉग एंट्री मौजूद है, तो यह समस्या की वजह है. अगर ऐसा नहीं है, तो वजह: Envoy प्रॉक्सी, Apigee Adapter for Envoy से कम्यूनिकेट नहीं कर पा रहा है पर जाएं.
रिज़ॉल्यूशन
अगर ऊपर दी गई गड़बड़ियां, Apigee Adapter for Envoy के लॉग में दिखती हैं, तो समस्या हल करने के लिए यह तरीका अपनाएं:
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- पुष्टि करें कि
remote-serviceएपीआई प्रॉक्सी, Edge के सही एनवायरमेंट में डिप्लॉय की गई हो. अगर ऐसा नहीं है, तोremote-serviceएपीआई प्रॉक्सी को Edge के ज़रूरी एनवायरमेंट में डिप्लॉय करें और फिर से कोशिश करें. - Apigee Adapter for Envoy और
remote-serviceएपीआई प्रॉक्सी एंडपॉइंट के बीच नेटवर्क कनेक्टिविटी की पुष्टि करें. अगर नेटवर्क कनेक्टिविटी से जुड़ी कोई समस्या मिलती है, तो अपनी नेटवर्किंग टीम से संपर्क करें और समस्या को हल करने की कोशिश करें.
वजह: Envoy प्रॉक्सी, Apigee Adapter for Envoy से कम्यूनिकेट नहीं कर पा रहा है
संक्रमण की जांच
समस्या का पता लगाने के लिए, यह तरीका अपनाएं:
पक्का करें कि आपने 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
- 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 से कम्यूनिकेट नहीं कर सका. connection failureकई वजहों से हो सकता है. आइए, हर स्थिति के बारे में जानते हैं.
पहली स्थिति: अडैप्टर प्रोसेस नहीं चल रही है
अगर Apigee Adapter for Envoy प्रोसेस नहीं चल रही है, तो यह गड़बड़ी हो सकती है.
- पुष्टि करें कि Apigee Adapter for Envoy प्रोसेस चल रही है. इसके लिए, यहां दिया गया निर्देश चलाएं. अगर Apigee Adapter for Envoy प्रोसेस चल रही है, तो यहां दिए गए निर्देश का नतीजा यह होना चाहिए.
ps -ef | grep apigee-remote-service-envoy
- अगर यह सुविधा काम नहीं कर रही है, तो समस्या की वजह यही है.
रिज़ॉल्यूशन
- अगर Apigee Adapter for Envoy प्रोसेस नहीं चल रही है, तो Apigee Adapter for Envoy शुरू करें.
- एपीआई का दूसरा अनुरोध करें और पुष्टि करें कि समस्या ठीक हो गई है.
दूसरी स्थिति: अडैप्टर प्रोसेस, तय किए गए पोर्ट पर नहीं सुन रही है
अगर 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 पर कोई सॉकेट नहीं है, तो इसकी वजह से यह समस्या हो सकती है.
रिज़ॉल्यूशन
- Apigee Adapter for Envoy को बंद करें और फिर से शुरू करें.
- एपीआई का दूसरा अनुरोध करें और पुष्टि करें कि समस्या ठीक हो गई है.
तीसरा उदाहरण: Envoy और Apigee Adapter for Envoy के बीच नेटवर्क कनेक्टिविटी
- 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 '^]'.
- अगर आपको telnet के साथ गड़बड़ी
Connection timed outदिखती है, तो इसका मतलब है कि Envoy और Apigee Adapter for Envoy के बीच नेटवर्क कनेक्टिविटी की समस्या है.
रिज़ॉल्यूशन
अगर आपको Envoy और Apigee Adapter for Envoy के बीच नेटवर्क कनेक्टिविटी से जुड़ी कोई समस्या दिखती है, तो कृपया अपनी नेटवर्किंग टीम से संपर्क करें और समस्या को हल करने की कोशिश करें.
अगर समस्या अब भी बनी रहती है, तो गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.
डाइग्नोस्टिक जानकारी इकट्ठा करना ज़रूरी है
अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो यहां दी गई डाइग्नोस्टिक जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:
-
Apigee के इस प्रॉडक्ट का इस्तेमाल किया गया:
उदाहरण: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X
- Apigee संगठन और एनवायरमेंट
Edge API का इस्तेमाल करके, एपीआई प्रॉडक्ट की परिभाषा को पढ़ा जाता है:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
संदर्भ: Apigee Edge API
Apigee Edge के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके,
remote-serviceएपीआई प्रॉक्सी में ट्रेस सेशन शुरू करें. इस समस्या को दोहराएं और ट्रेस सेशन की एक्सएमएल फ़ाइल शेयर करें.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
curlकमांड का इस्तेमाल करके, Envoy प्रॉक्सी को भेजा गया एपीआई अनुरोध (curlकमांड का पूरा आउटपुट):curl -v ENVOY_PROXY_ENDPOINT
curlकमांड का इस्तेमाल करके, टारगेट सेवा को भेजा गया एपीआई अनुरोध (curlकमांड का पूरा आउटपुट):curl -v TARGET_SERVICE_ENDPOINT