APISIX Ingress कस्टम प्लगइन्स का समर्थन कैसे करता है

API7.ai

October 11, 2022

Products

इन्ग्रेस और इन्ग्रेस कंट्रोलर

इन्ग्रेस Kubernetes के API ऑब्जेक्ट्स में से एक है। यह क्लस्टर में सेवाओं तक बाहरी पहुंच का प्रबंधन करता है, आमतौर पर HTTP/HTTPS।

क्लाइंट इन्ग्रेस नियमों का पालन करके क्लाइंट अनुरोधों को Kubernetes क्लस्टर सेवाओं या किसी विशिष्ट Pod तक रूट कर सकते हैं।

k8s_cluster.png

निम्नलिखित एक इन्ग्रेस संसाधन का उदाहरण है:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: apisix-gateway spec: rules: - host: apisix.apache.org http: paths: - backend: service: name: apisix-gateway port: number: 80 path: / pathType: Exact

उपरोक्त उदाहरण में निम्नलिखित सामग्री शामिल है:

  • metadata.name: इन्ग्रेस संसाधन का नाम
  • spec.rules[].host: बाहरी पहुंच के लिए उपयोग किया जाने वाला डोमेन
  • spec.rules[].http.paths[].backend: क्लस्टर में सेवाओं से संबंधित जानकारी का वर्णन करता है
  • spec.rules[].http.paths[].path: क्लस्टर में सेवाओं तक बाहरी पहुंच के लिए उपयोग किए जाने वाले पथ का वर्णन करता है
  • spec.rules[].http.paths[].pathType: क्लस्टर में सेवाओं तक बाहरी पहुंच का प्रबंधन करने के लिए पथ प्रकार का वर्णन करता है

उपरोक्त उदाहरण के आधार पर, हम देख सकते हैं कि इन्ग्रेस संसाधन का spec अपेक्षाकृत सरल है

इन्ग्रेस Kubernetes में एक संसाधन परिभाषा है जो स्वयं किसी भी ट्रैफ़िक को संभाल नहीं सकता है। इसलिए यदि हम इन्ग्रेस संसाधनों को प्रभावी बनाना चाहते हैं, तो हमें इन इन्ग्रेस संसाधनों को प्रोसेस करने के लिए एक कंट्रोलर का उपयोग करना होगा, जिसे इन्ग्रेस कंट्रोलर कहा जाता है।

इन्ग्रेस कंट्रोलर Kubernetes क्लस्टर में किसी भी संसाधन परिवर्तन को देखता रहेगा और इन्ग्रेस संसाधन नियमों को डेटा लेयर के प्रॉक्सी नियमों में बदल देगा ताकि डेटा लेयर ट्रैफ़िक को संभाल सके।

वास्तविक उत्पादन वातावरण में, कई अलग-अलग प्रकार के क्लाइंट अनुरोध होते हैं। उदाहरण के लिए, इन्ग्रेस संसाधन सीधे कुछ सबसे सामान्य सुविधाओं जैसे प्रमाणीकरण और URI रीराइटिंग का वर्णन नहीं कर सकते हैं। तो हम इन आवश्यकताओं को कैसे पूरा कर सकते हैं?

इन्ग्रेस-NGINX एक्सटेंशन का समर्थन कैसे करता है?

सबसे पहले, हम Kubernetes इकोसिस्टम में इन्ग्रेस-NGINX कंट्रोलर का उदाहरण उपयोग करके दिखाएंगे कि एक्सटेंशन का उपयोग कैसे करें।

हम इन्ग्रेस-NGINX में इन्ग्रेस संसाधनों के लिए आवश्यक एक्सटेंशन का वर्णन करने के लिए Annotation का उपयोग कर सकते हैं। उदाहरण के लिए:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/enable-cors: "true" nginx.ingress.kubernetes.io/cors-allow-origin: https://foo.com,https://bar.com nginx.ingress.kubernetes.io/cors-allow-headers: x-foo-1,x-foo-2 nginx.ingress.kubernetes.io/cors-allow-methods: GET,POST,PUT name: nginx-ingress spec: rules: - host: kubernetes.github.io http: paths: - path: /ingress pathType: Exact backend: service: name: nginx port: number: 80

उपरोक्त कॉन्फ़िगरेशन cors को सक्षम करता है।

इन्ग्रेस संसाधन में Annotations जोड़ना अपेक्षाकृत सरल है; हालांकि, हमें यह ध्यान रखना चाहिए कि इन्ग्रेस-NGINX कंट्रोलर को इन Annotations का पूर्ण समर्थन करना चाहिए; अन्यथा, कॉन्फ़िगरेशन प्रभावी नहीं होगा। यदि हमें इन्ग्रेस-NGINX कंट्रोलर की कुछ अन्य विकसित सुविधाओं का उपयोग करने की आवश्यकता है, तो हमें कुछ कस्टम विकास करने की आवश्यकता होगी।

निम्नलिखित अनुभाग बताते हैं कि इन आवश्यकताओं को पूरा करने के लिए Apache APISIX इन्ग्रेस कंट्रोलर का उपयोग कैसे करें।

APISIX इन्ग्रेस में प्लगइन्स का उपयोग करें

Apache APISIX इन्ग्रेस ट्रैफ़िक और किसी भी विशिष्ट परिदृश्य को संभालने के लिए ग्राहकों की विभिन्न आवश्यकताओं को पूरा करने के लिए प्लगइन्स का उपयोग करता है। वर्तमान में, 80 से अधिक तैयार-से-उपयोग प्लगइन्स हैं, और उपयोगकर्ता नई सुविधाओं का समर्थन करने के लिए कस्टम प्लगइन्स विकसित कर सकते हैं।

apisix.PNG

कस्टम प्लगइन्स विकसित करने के कई अलग-अलग तरीके हैं:

  • उपयोगकर्ता Lua का उपयोग करके प्लगइन्स विकसित कर सकते हैं, और ये प्लगइन्स APISIX के अंदर चल सकते हैं
  • उपयोगकर्ता अन्य प्रोग्रामिंग भाषाओं का उपयोग करके प्लगइन्स भी विकसित कर सकते हैं; इस तंत्र को "प्लगइन रनर" कहा जाता है, और इस तंत्र द्वारा विकसित प्लगइन्स को "एक्सटर्नल प्लगइन" कहा जाता है

प्लगइन विकास के बारे में आधिकारिक दस्तावेज़ देखें:

हम APISIX इन्ग्रेस में Lua का उपयोग करके प्लगइन्स विकसित करने के तीन तरीके पेश करेंगे।

शुद्ध CRD मोड

APISIX इन्ग्रेस कंट्रोलर अपने स्वयं के डिज़ाइन किए गए CRD स्पेसिफिकेशन का समर्थन करता है, और आप सीधे प्लगइन्स को रूटिंग नियमों में सक्षम कर सकते हैं (चाहे वह एक आंतरिक प्लगइन हो या कस्टम प्लगइन)। उदाहरण के लिए:

apiVersion: apisix.apache.org/v2beta3 kind: ApisixRoute metadata: name: httpbin-route spec: http: - name: rule1 match: hosts: - apisix.apache.org paths: - /apisix-ingress backends: - serviceName: apisix-gateway servicePort: 80 plugins: - name: cors enable: true config: allow_origins: http://foo.bar.org allow_methods: "GET,POST" max_age: 3600 expose_headers: x-foo,x-baz allow_headers: x-from-ingress allow_credential: true

उपयोगकर्ता उपरोक्त कॉन्फ़िगरेशन का उपयोग करके रूटिंग नियम बना सकते हैं, और cors प्लगइन इस रूट में सक्षम हो जाएगा।

यह तरीका APISIX इन्ग्रेस में सबसे मूल समर्थन है, और यह APISIX के साथ अच्छी तरह से फिट बैठता है। साथ ही, जब उपयोगकर्ता नए कस्टम प्लगइन्स जोड़ते हैं, तो APISIX इन्ग्रेस को पुनर्विकसित करने की आवश्यकता नहीं होती है ताकि उपयोगकर्ता इसे सीधे उपयोग कर सकें।

CRD + इन्ग्रेस Annotations मोड

हम APISIX इन्ग्रेस में सुविधाओं को विस्तारित करने के लिए CRD + इन्ग्रेस Annotations का भी उपयोग कर सकते हैं, उदाहरण के लिए:

apiVersion: apisix.apache.org/v2 kind: ApisixPluginConfig metadata: name: cors-plugin spec: plugins: - name: cors enable: true config: allow_origins: http://foo.bar.org allow_methods: "GET,POST" max_age: 3600 expose_headers: x-foo,x-baz allow_headers: x-from-ingress allow_credential: true --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: apisix k8s.apisix.apache.org/plugin-config-name: cors-plugin name: apisix-ingress spec: rules: - host: apisix.apache.org http: paths: - path: /apisix-ingress pathType: Exact backend: service: name: apisix-gateway port: number: 80

उपरोक्त कॉन्फ़िगरेशन का उपयोग करके, हम स्वतंत्र रूप से cors-plugin नामक एक प्लगइन कॉन्फ़िग बना सकते हैं और इन्ग्रेस संसाधन के k8s.apisix.apache.org/plugin-config-name: cors-plugin का उपयोग करके इसे संदर्भित कर सकते हैं। वास्तविक प्रभाव लगभग पहले कॉन्फ़िगरेशन के समान होगा; वे दोनों संबंधित रूट्स के लिए cors प्लगइन को सक्षम करेंगे।

इस मोड के तहत, प्लगइन कॉन्फ़िगरेशन को एक स्वतंत्र संसाधन माना जा सकता है, और कई इन्ग्रेस संसाधन भी इन्हें साझा कर सकते हैं। इसी तरह, किसी भी कस्टम विकास की आवश्यकता नहीं होती है।

इन्ग्रेस Annotations मोड

इन्ग्रेस संसाधनों की सीमित शब्दावली के कारण, हम आमतौर पर संसाधन ऑब्जेक्ट्स के लिए कुछ अतिरिक्त जानकारी जोड़ने के लिए annotations का उपयोग करते हैं, जो इन्ग्रेस क्षमताओं को विस्तारित करने का सबसे सामान्य तरीका है। उदाहरण के लिए:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: apisix k8s.apisix.apache.org/enable-cors: "true" k8s.apisix.apache.org/cors-allow-origin: https://foo.com,https://bar.com k8s.apisix.apache.org/cors-allow-headers: x-foo-1,x-foo-2 k8s.apisix.apache.org/cors-allow-methods: GET,POST,PUT name: apisix-ingress spec: rules: - host: apisix.apache.org http: paths: - path: /apisix-ingress pathType: Exact backend: service: name: apisix-gateway port: number: 80

उपरोक्त कॉन्फ़िगरेशन इन्ग्रेस संसाधन में cors से संबंधित कुछ अतिरिक्त जानकारी जोड़ेगा। APISIX इन्ग्रेस कंट्रोलर तब इस जानकारी को पहचान सकता है और इसे डेटा लेयर के कॉन्फ़िगरेशन में बदल सकता है ताकि इन्ग्रेस संसाधन की सुविधाओं को विस्तारित किया जा सके।

हालांकि, इस मोड के तहत, हमें यह सुनिश्चित करना होगा कि APISIX इन्ग्रेस कंट्रोलर पहले से ही इन Annotations को प्रोसेस करने में सक्षम है। अन्यथा, हमें कुछ कस्टम विकास करने की आवश्यकता होगी।

यदि आपको कस्टम विकास करने की आवश्यकता है, तो कृपया निम्नलिखित दस्तावेज़ देखें:

निष्कर्ष

यह लेख मुख्य रूप से इन्ग्रेस संसाधनों से संबंधित specs और इन्ग्रेस संसाधनों के लिए सुविधाओं को विस्तारित करने के तरीके का परिचय देता है। उदाहरण के लिए, इन्ग्रेस-NGINX में, हम आमतौर पर केवल Annotations का उपयोग करके सुविधाओं को विस्तारित कर सकते हैं। हालांकि, Apache APISIX इन्ग्रेस में, हमारे पास उन्नत आवश्यकताओं और अधिक परिदृश्यों को पूरा करने के लिए तीन मोड के कॉन्फ़िगरेशन हैं। इसके अलावा, अधिकांश मामलों में उपयोगकर्ताओं को कस्टम प्लगइन्स के लिए किसी भी कस्टम विकास की आवश्यकता नहीं होती है।

Tags: