Amazon EKS और APISIX Ingress Controller कैसे मिलकर जटिल ट्रैफ़िक को प्रबंधित करते हैं

API7.ai

February 7, 2021

Ecosystem

पृष्ठभूमि

एक ट्रैफिक प्रबंधक के रूप में, कभी-कभी जब आप अप्रत्याशित के लिए तैयार होते हैं, तब भी अप्रत्याशित को रोकना मुश्किल होता है। एक चार-तरफ़ा API गेटवे बनाना महत्वपूर्ण है! आज Amazon EKS + Ingress APISIX! इसके साथ कैसे मदद कर सकता है।

परिचय

Kubernetes कंटेनरीकृत एप्लिकेशन के स्वचालित डिप्लॉयमेंट, स्केलिंग और प्रबंधन के लिए एक ओपन सोर्स सिस्टम है। Amazon Elastic Kubernetes Service (Amazon EKS) एक प्रबंधित Kubernetes सेवा है जो आपको Amazon क्लाउड टेक्नोलॉजी पर Kubernetes लोड चलाने की अनुमति देती है, बिना कंट्रोल प्लेन या नोड इंस्टॉलेशन और रखरखाव की आवश्यकता के।

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

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

apisix-ingress-controller तकनीकी आर्किटेक्चर

Amazon Elastic Kubernetes Service पर Ingress APISIX को कैसे कॉन्फ़िगर और चलाएं

पूर्वापेक्षाएँ

चलाने के लिए तैयार होने से पहले, कृपया Amazon क्लाउडटेक पर एक उपलब्ध Amazon EKS क्लस्टर कॉन्फ़िगर करें।

आपके अपने वातावरण में kubectl टूल होना चाहिए, निम्नलिखित कमांड चलाकर अपने Amazon EKS क्लस्टर के लिए कॉन्टेक्स्ट सेट करें:

aws eks update-kubeconfig --name --region

एक बार Kubernetes क्लस्टर तैयार हो जाए, तो ingress-apisix नामक एक नेमस्पेस बनाएं, जहां सभी संसाधन बनाए जाएंगे।

kubectl create namespace ingress-apisix

हम Ingress APISIX के सभी घटकों (Apache APISIX और apisix-ingress-controller) को डिप्लॉय करने के लिए Helm का उपयोग करेंगे, इसलिए कृपया इंस्टॉलेशन गाइड का पालन करके Helm को इंस्टॉल करें। Apache APISIX और apisix-ingress-controller के लिए helm चार्ट apache/apisix-helm-chart और apache/apisix-ingress-controller पर स्थित हैं, कृपया संबंधित चार्ट प्राप्त करने के लिए इन पथों को क्लोन करें।

Apache APISIX इंस्टॉल करना

Apache APISIX apisix-ingress-controller के लिए प्रॉक्सी प्लेन के रूप में कार्य करता है और इसे पहले से डिप्लॉय किया जाना चाहिए।

cd /path/to/apisix-helm-chart helm repo add bitnami https://charts.bitnami.com/bitnami helm dependency update . /chart/apisix helm install apisix . /chart/apisix \ --set gateway.type=LoadBalancer \ --set allow.ipList="{0.0.0.0/0}" \ --namespace ingress-apisix kubectl get service --namespace ingress-apisix

उपरोक्त कमांड दो Kubernetes सेवा संसाधन बनाएगी, apisix-gateway, जो वास्तविक ट्रैफिक को संभालती है, और apisix-admin, जो कंट्रोल प्लेन के रूप में कार्य करती है और सभी कॉन्फ़िगरेशन परिवर्तनों को संभालती है। यहां हम apisix-gateway को LoadBalancer प्रकार की सेवा के रूप में बनाते हैं, जिसे Amazon नेटवर्क लोड बैलेंसर की मदद से इंटरनेट पर एक्सपोज़ किया जा सकता है। हम निम्नलिखित कमांड के साथ लोड बैलेंसर का होस्टनाम पा सकते हैं:

kubectl get service apisix-gateway \ --namespace ingress-apisix \ -o jsonpath='{.status.loadBalancer.ingress[].hostname}'

साथ ही ध्यान दें: allow.ipList फ़ील्ड को हमारे अपने Amazon EKS क्लस्टर में EKS CIDR रेंज के अनुसार अनुकूलित किया जाना चाहिए, ताकि apisix-ingress-controller को Apache APISIX द्वारा लाइसेंस दिया जा सके (संसाधनों को पुश करने के लिए)।

यदि कोई अन्य आवश्यकताएं हैं, तो सभी कॉन्फ़िगरेशन आइटम्स के बारे में अधिक जानकारी के लिए value.yaml देखें।

apisix-ingress-controller इंस्टॉल करना

Apache APISIX को सफलतापूर्वक डिप्लॉय करने के बाद, अब कंट्रोलर घटक को इंस्टॉल करने का समय है।

cd /path/to/apisix-ingress-controller # बेस संसाधन इंस्टॉल करें, जैसे ServiceAccount। helm install ingress-apisix-base -n ingress-apisix . /charts/base # apisix-ingress-controller इंस्टॉल करें helm install ingress-apisix . /charts/ingress-apisix \ --set ingressController.image.tag=dev \ --set ingressController.config.apisix.baseURL=http://apisix-admin:9180/apisix/admin \ --set ingressController.config.apisix.adminKey={YOUR ADMIN KEY} \ --namespace ingress-apisix

ingress-apisix-base चार्ट apisix-ingress-controller के लिए कुछ बुनियादी निर्भरताएँ इंस्टॉल करेगा, जैसे ServiceAccount और इसके समर्पित CRD।

ingress-apisix चार्ट हमें कंट्रोलर को स्वयं इंस्टॉल करने के लिए मार्गदर्शन करेगा, हम इमेज टैग को वांछित रिलीज़ में बदल सकते हैं और हम उपरोक्त कमांड में ingressController.config.apisix.adminKey का मान बदल सकते हैं, ये कॉन्फ़िगरेशन वास्तविक परिदृश्यों के अनुसार समायोजित किए जा सकते हैं (और सुनिश्चित करें कि यहां उपयोग किया गया एडमिन कुंजी Apache APISIX डिप्लॉयमेंट में उपयोग की गई कुंजी के समान है)। यदि आपके पास अन्य आवश्यकताएं हैं, तो आप सभी कॉन्फ़िगरेशन आइटम्स के बारे में अधिक जानने के लिए value.yaml का संदर्भ ले सकते हैं।

फिर Amazon EKS कंसोल खोलने का प्रयास करें, अपने क्लस्टर का चयन करें और वर्कलोड्स टैब पर क्लिक करें और आप देखेंगे कि Apache APISIX के लिए सभी पॉड्स, etcd और apisix-ingress-controller तैयार हैं।

परीक्षण शुरू करें

इस बिंदु पर हमने Ingress APISIX के सभी घटकों को डिप्लॉय कर दिया है, इसलिए सुनिश्चित करें कि सब कुछ ठीक से काम कर रहा है। फिर हम एक httpbin सेवा डिप्लॉय करेंगे और Apache APISIX से अनुरोध करेंगे कि वह "local.httpbin.org" होस्ट के सभी अनुरोधों को इस सेवा पर रूट करे।

इसके लिए, हमें पहले httpbin वर्कलोड बनाना और उसे एक्सपोज़ करना होगा।

kubectl run httpbin --image kennethreitz/httpbin --port 80 kubectl expose pod httpbin --port 80

Apache APISIX को अनुरोधों को सही ढंग से रूट करने के लिए, हमें इस प्रक्रिया को संचालित करने के लिए एक ApisixRoute संसाधन बनाना होगा।

# ar-httpbin.yaml apiVersion: apisix.apache.org/v1 kind: ApisixRoute metadata: name: httpserver-route spec: rules: - host: local.httpbin.org http: paths: - backend: serviceName: httpbin servicePort: 80 path: /*

उपरोक्त ApisixRoute संसाधन Apache APISIX को "local.httpbin.org" होस्ट हेडर वाले अनुरोधों को httpbin बैकएंड (जिसे हमने अभी बनाया है) पर रूट करने की अनुमति देगा।

फिर इस सेटिंग को लागू करें, लेकिन कृपया ध्यान दें कि सेवा और ApisixRoute संसाधन को एक ही नेमस्पेस में रखा जाना चाहिए, और apisix-ingress-controller को नेमस्पेस पार करने की अनुमति नहीं है।

kubectl apply -f ar-httpbin.yaml

Apache APISIX सेवा तक पहुंच सकने वाले किसी भी स्थान से एक साधारण curl कॉल के साथ परिणामों का परीक्षण करें।

$ curl http://{apisix-gateway-ip}:{apisix-gateway-port}/headers -s -H 'Host: local.httpbin.org' { "headers": { "Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.64.1", "X-Amzn-Trace-Id": "Root=1-5ffc3273-2928e0844e19c9810d1bbd8a" } }

यदि सेवा प्रकार ClusterIP है, तो आपको Amazon EKS क्लस्टर में एक पॉड में लॉग इन करना होगा और फिर ClusterIP या सेवा FQDN का उपयोग करके Apache APISIX तक पहुंचना होगा। यदि पहले से ही एक्सपोज़ किया गया है (या तो NodePort या LoadBalancer के रूप में), तो पहुंच योग्य बाहरी एंडपॉइंट को सीधे एक्सेस किया जा सकता है।

नोट: यह लेख aws वीचैट पब्लिक वेबसाइट से पुनर्मुद्रित है।

Tags: