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