Istio और Amesh के साथ एक APISIX Service Mesh

Navendu Pottekkat

Navendu Pottekkat

June 16, 2023

Technology

Apache APISIX मुख्य रूप से उत्तर-दक्षिण ट्रैफ़िक को संभालने के लिए उपयोग किया जाता है और अक्सर क्लाइंट एप्लिकेशन और बैकएंड सेवाओं के बीच की सीमा पर स्थित होता है।

APISIX Ingress Controller के साथ, APISIX Kubernetes क्लस्टर में इनग्रेस-एग्रेस ट्रैफ़िक को नेटिव कॉन्फ़िगरेशन के साथ नियंत्रित कर सकता है।

लेकिन जैसे-जैसे संगठन माइक्रोसर्विसेज को अपनाते हैं, इन माइक्रोसर्विसेज के बीच पूर्व-पश्चिम ट्रैफ़िक को संभालने के लिए एक नई चुनौती सामने आती है।

Istio जैसे सर्विस मेश इस समस्या को हल करते हैं, माइक्रोसर्विस डेवलपर से नेटवर्किंग की जिम्मेदारी हटाकर और एक अतिरिक्त L4/L7 नेटवर्किंग लेयर प्रदान करके।

नए Amesh लाइब्रेरी और Istio के साथ, Apache APISIX को एक सर्विस मेश के रूप में भी उपयोग किया जा सकता है, विशेष रूप से Istio के लिए एक डेटा प्लेन के रूप में, जो इसकी सभी ट्रैफ़िक प्रबंधन क्षमताओं को सर्विस-टू-सर्विस संचार में लाता है।

इस लेख में, हम जांच करेंगे कि Amesh क्या है, इसे कैसे विकसित किया गया है, और इसे APISIX को सर्विस मेश में लाने के लिए कैसे उपयोग किया जाता है।

Istio और xDS प्रोटोकॉल

Istio सबसे व्यापक रूप से उपयोग किए जाने वाले सर्विस मेश में से एक है।

अंदरूनी तौर पर, Istio अपने साइडकार कंटेनर में रिवर्स प्रॉक्सी के रूप में Envoy का उपयोग करता है।

Istio सर्विस मेश

Istio Envoy के xDS APIs का उपयोग करके साइडकार को डायनामिक रूप से कॉन्फ़िगर करके ट्रैफ़िक को प्रबंधित करता है।

xDS APIs, Envoy को स्टेटिक फ़ाइलों के साथ सरल कॉन्फ़िगरेशन के बजाय इंक्रीमेंटल परिवर्तनों के साथ कॉन्फ़िगर करने का एक तरीका है।

हालांकि ये APIs शुरू में Envoy को कॉन्फ़िगर करने के लिए बनाए गए थे, लेकिन ये APIs एक यूनिवर्सल डेटा प्लेन API बन गए हैं। कोई भी डेटा प्लेन प्रॉक्सी इन APIs को लागू कर सकता है, और कोई भी कंट्रोल प्लेन इन डेटा प्लेन प्रॉक्सी के साथ काम करने के लिए इस API का उपयोग कर सकता है।

Istio में, इसका मतलब है कि आप डिफ़ॉल्ट Envoy डेटा प्लेन को किसी भी डेटा प्लेन से बदल सकते हैं जो xDS APIs को लागू करता है। तो आप Envoy को APISIX से बदलकर सर्विस मेश में इसकी ट्रैफ़िक प्रबंधन क्षमताओं को प्राप्त कर सकते हैं।

लेकिन APISIX xDS APIs को डिफ़ॉल्ट रूप से सपोर्ट नहीं करता है। और यहीं पर Amesh आता है।

Amesh

Amesh एक लाइब्रेरी है जो Istio के कंट्रोल प्लेन से डेटा को APISIX कॉन्फ़िगरेशन में अनुवाद करती है।

APISIX सर्विस मेश

APISIX, Istio के लिए डेटा प्लेन के रूप में Envoy को बदल देता है।

Istio xDS APIs के माध्यम से डेटा प्लेन से संचार करता है। Amesh इन APIs को सपोर्ट करता है और फिर उन्हें APISIX कॉन्फ़िगरेशन में बदल देता है।

यह APISIX और APISIX Ingress कंट्रोलर के काम करने के तरीके के समान है। Ingress कंट्रोलर, Ingress या Gateway API का उपयोग करके परिभाषित कॉन्फ़िगरेशन को APISIX फॉर्मेट में बदलता है।

चूंकि xDS APIs को Linkerd और Open Service Mesh जैसे अधिक सर्विस मेश द्वारा सपोर्ट किया जाता है, APISIX Amesh लाइब्रेरी का उपयोग करके उनके साथ भी काम कर सकता है। Amesh अभी भी विकास के शुरुआती चरण में है और वर्तमान में Istio v1.13.1 के साथ काम करता है।

Amesh + APISIX के साथ, आप Istio का उपयोग सामान्य रूप से कर सकते हैं। एक बार जब आप Istio के वर्चुअल सर्विस के साथ ट्रैफ़िक नियम कॉन्फ़िगर कर लेते हैं, तो APISIX इन नियमों को लागू कर सकता है।

APISIX की विस्तारित क्षमताएं इसके 80+ प्लगइन्स के माध्यम से आती हैं। Istio के साथ APISIX प्लगइन्स का उपयोग करने के लिए, हम Amesh कंट्रोल प्लेन कंपोनेंट को तैनात करते हैं जिसे Amesh कंट्रोलर कहा जाता है।

Amesh कंट्रोलर, AmeshPluginConfig CRD के साथ परिभाषित प्लगइन कॉन्फ़िगरेशन को लेता है और इसे APISIX प्लगइन कॉन्फ़िगरेशन में बदल देता है।

यह सब हमें साइडकार कंटेनर के भीतर APISIX की पूरी क्षमताओं का लाभ उठाने में सक्षम बनाएगा।

APISIX + Istio मेश

आइए हमने जो कुछ सीखा है, उसे व्यवहार में लाएं।

हम Amesh इमेज बनाएंगे, Istio को APISIX साइडकार का उपयोग करने के लिए कॉन्फ़िगर करेंगे, Istio को तैनात करेंगे, और एक सैंपल एप्लिकेशन चलाकर सब कुछ टेस्ट करेंगे।

इमेज बनाना

हम तीन इमेज बनाएंगे:

  • amesh-iptables: कुछ iptables नियम सेट करने के लिए एक init कंटेनर बनाने के लिए उपयोग किया जाता है। ये नियम सभी ट्रैफ़िक को APISIX के माध्यम से निर्देशित करने के लिए हैं।
  • amesh-sidecar: साइडकार कंटेनर बनाने के लिए उपयोग किया जाता है।
  • amesh-controller: Amesh कंट्रोलर कंट्रोल प्लेन कंपोनेंट बनाने के लिए उपयोग किया जाता है। यह कंट्रोलर APISIX प्लगइन्स को कॉन्फ़िगर करने के लिए उपयोग किया जाता है।

सबसे पहले, Amesh रेपो को क्लोन करें:

git clone https://github.com/api7/Amesh.git cd Amesh

आप इन इमेज को बना सकते हैं और अपने रजिस्ट्री में पुश कर सकते हैं।

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

export REGISTRY="docker.io/navendu" make prepare-images

यदि आप अपनी खुद की इमेज बनाना नहीं चाहते हैं, तो आप इन इमेज का उपयोग कर सकते हैं:

docker pull navendup/amesh-iptables:dev docker pull navendup/amesh-sidecar:dev docker pull navendup/amesh-controller:latest

Amesh कंट्रोलर तैनात करें और CRDs इंस्टॉल करें

हम Kubernetes क्लस्टर में सब कुछ तैनात करने के लिए Helm का उपयोग करेंगे। मैं इन उदाहरणों में minikube का उपयोग करता हूं।

हम एक नया नेमस्पेस istio-system बनाकर शुरू करेंगे:

kubectl create namespace istio-system

Amesh कंट्रोलर तैनात करने के लिए, चलाएं:

helm install amesh-controller -n istio-system \ ./controller/charts/amesh-controller

आपको Amesh कंट्रोलर के साथ काम करने के लिए CRDs को भी इंस्टॉल करना होगा:

kubectl apply -k controller/config/crd/

Istio + APISIX कॉन्फ़िगर और तैनात करें

सर्विस मेश तैनात करने से पहले, हम कुछ पर्यावरण चर सेट करेंगे:

export ISTIO_RELEASE=1.13.1 export REGISTRY="docker.io/navendup"

फिर हम सर्विस मेश तैनात करने के लिए Helm का उपयोग करेंगे:

helm install amesh \ --namespace istio-system \ --set pilot.image=istio/pilot:"$ISTIO_RELEASE" \ --set global.proxy.privileged=true \ --set global.proxy_init.image="$REGISTRY"/amesh-iptables:dev \ --set global.proxy.image="$REGISTRY"/amesh-sidecar:dev \ --set global.imagePullPolicy=IfNotPresent \ --set global.hub="docker.io/istio" \ --set global.tag="$ISTIO_RELEASE" \ ./charts/amesh

अब हमारे पास सर्विस मेश और Amesh कंट्रोलर तैनात हो गए हैं। अगला, आइए हमारे सर्विस मेश को टेस्ट करने के लिए एक सैंपल एप्लिकेशन तैनात करें।

Bookinfo तैनात करना

हम Istio के Bookinfo सैंपल ऐप का उपयोग करेंगे।

सबसे पहले, हम डिफ़ॉल्ट नेमस्पेस में एक लेबल जोड़ेंगे ताकि नेमस्पेस में किसी भी पॉड में स्वचालित रूप से साइडकार इंजेक्ट हो जाएं:

kubectl label ns default istio-injection=enabled

फिर हम Bookinfo को तैनात कर सकते हैं:

kubectl apply -f e2e/bookinfo/bookinfo.yaml

यह Bookinfo एप्लिकेशन को स्पिन अप करेगा, और प्रत्येक पॉड में APISIX साइडकार होंगे:

$ kubectl get pods NAME READY STATUS RESTARTS AGE details-v1-79f774bdb9-cbn87 2/2 Running 0 55s productpage-v1-6b746f74dc-tntc8 2/2 Running 0 55s ratings-v1-b6994bb9-r5j45 2/2 Running 0 55s reviews-v1-545db77b95-n657s 2/2 Running 0 55s reviews-v2-7bf8c9648f-zn97s 2/2 Running 0 55s reviews-v3-84779c7bbc-wn8k2 2/2 Running 0 55s

मेश का परीक्षण

Bookinfo एप्लिकेशन तक पहुंचने के लिए, हमें एक इनग्रेस गेटवे की आवश्यकता होगी।

आप इस इनग्रेस गेटवे के लिए APISIX का उपयोग कर सकते हैं, लेकिन यह किसी और समय के लिए है। अभी के लिए, हम product-page सेवा तक पहुंचने के लिए port-forward का उपयोग कर सकते हैं:

kubectl port-forward productpage-v1-6b746f74dc-tntc8 9080:9080

अब यदि हम localhost:9080 खोलते हैं, तो हम अपना सैंपल एप्लिकेशन देख पाएंगे।

Bookinfo होमपेज

हर बार जब आप पेज को रिफ्रेश करते हैं, तो समीक्षाएं समीक्षा सेवा के अलग-अलग संस्करण से ली जाती हैं (हमने तीन संस्करण तैनात किए हैं)।

अब हम एक नियम लागू करेंगे जो सभी ट्रैफ़िक को सेवाओं के v1 संस्करणों पर रूट करता है।

नियम स्वयं-व्याख्यात्मक है, और यह इस तरह दिखेगा:

apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: productpage spec: hosts: - productpage http: - route: - destination: host: productpage subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: ratings spec: hosts: - ratings http: - route: - destination: host: ratings subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: details spec: hosts: - details http: - route: - destination: host: details subset: v1 ---

आप इसे अपने क्लस्टर में लागू कर सकते हैं:

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/networking/virtual-service-all-v1.yaml

अब यदि हम अपने एप्लिकेशन पर वापस जाते हैं और रिफ्रेश करते हैं, तो यह समीक्षा सेवा के कई संस्करणों के बीच चक्रित होना बंद कर देगा और केवल v1 संस्करण पर रूट करेगा।

Bookinfo v1 केवल

ध्यान दें कि समीक्षा सेक्शन का लुक यहां कैसे बदल गया है। यह पेज को रिफ्रेश करने पर भी वैसा ही रहेगा।

संक्षेप में, हम Istio में एक नियम कॉन्फ़िगर करते हैं, और Istio इसे Apache APISIX के साथ अपने साइडकार कंटेनर का उपयोग करके लागू करता है। बढ़िया!

Amesh के आगे

Amesh एक प्रायोगिक प्रोजेक्ट है, और यह अभी भी अपने शुरुआती चरण में है।

प्रोजेक्ट के भविष्य के संस्करण वर्चुअल सर्विस के माध्यम से अधिक सुविधाओं को सपोर्ट करने का लक्ष्य रखते हैं।

आप प्रोजेक्ट को बेहतर बनाने में योगदान दे सकते हैं या GitHub पर नए संस्करणों को ट्रैक कर सकते हैं।

Tags: