API7 Cloud, Kubernetes सेवा खोज (Service Discovery) के साथ एकीकृत होता है

Yong Qian

February 24, 2023

Products

लागत बचत, अनुकूलनशीलता, स्केलेबिलिटी, विश्वसनीयता — क्लाउड टेक्नोलॉजी और कंटेनरीकरण के विस्फोट ने पारंपरिक मोनोलिथिक आर्किटेक्चर पर कई फायदे लाए हैं। ये फायदे इसे कई उद्यम उपयोगकर्ताओं द्वारा पसंद किया जाता है।

इसके साथ ही, आर्किटेक्चर में परिवर्तन नई चुनौतियां भी लाता है। उदाहरण के लिए, पारंपरिक रूप से, रिवर्स प्रॉक्सी के लिए अपस्ट्रीम फॉरवर्डिंग IP सूची अक्सर अपरिवर्तित होती है और इसे सीधे स्थिर कॉन्फ़िगरेशन फ़ाइल में लिखा जा सकता है। क्लाउड और कंटेनरीकरण युग में, प्रत्येक अपस्ट्रीम सेवा की IP सूची लगातार बदलती रहती है। यदि आप स्थिर कॉन्फ़िगरेशन फ़ाइलों का उपयोग जारी रखते हैं, तो कॉन्फ़िगरेशन फ़ाइलों का रखरखाव एक बुरा सपना हो सकता है। क्योंकि कॉन्फ़िगरेशन फ़ाइल अपडेट की समयबद्धता सीधे ट्रैफ़िक फॉरवर्डिंग को प्रभावित करेगी, उपयोगकर्ताओं को कॉन्फ़िगरेशन फ़ाइलों के स्वचालित अपडेट को संभालने के लिए अतिरिक्त सॉफ़्टवेयर लाना पड़ता है, जिससे आर्किटेक्चर की जटिलता काफी बढ़ जाती है।

इस प्रक्रिया को सरल बनाने के लिए, API7 Cloud एक सेवा खोज फ़ंक्शन लाता है, जो सीधे Kubernetes API Server से जुड़कर रियल-टाइम Endpoints डेटा प्राप्त करता है, जिससे उपयोगकर्ताओं को Kubernetes क्लस्टर में तैनात एप्लिकेशन को आसानी से प्रॉक्सी करने में मदद मिलती है।

API7 Cloud में सेवा खोज

API7 Cloud’s Service Discovery

तैयारी

सबसे पहले, हमें cloud-cli के माध्यम से एक APISIX इंस्टेंस तैनात करना होगा। API7 Cloud दस्तावेज़ीकरण देखें: गेटवे इंस्टेंस तैनात करना

इस उदाहरण में, हम दस्तावेज़ में प्रदान किए गए Kubernetes तैनाती दिशानिर्देशों का उपयोग करेंगे, जो apisix नेमस्पेस के तहत विभिन्न संसाधन बनाएगा, जिसे हमें पहले से बनाना होगा:

kubectl create namespace apisix cloud-cli deploy kubernetes \ --name my-apisix \ --namespace apisix \ --apisix-image apache/apisix:2.15.0-centos

सेवा खाता बनाएं

सेवा खाता Kubernetes में RBAC (रोल-आधारित पहुंच नियंत्रण) को लागू करने के लिए मुख्य संसाधन है। API7 Cloud को Endpoints संसाधन की list और watch अनुमतियों की आवश्यकता होती है ताकि वह अपस्ट्रीम सेवा के इंस्टेंस सूची प्राप्त कर सके।

संबंधित yaml कॉन्फ़िगरेशन निम्नलिखित है:

# rbac.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: apisix-k8s-sd-watcher rules: - apiGroups: [""] resources: ["endpoints"] verbs: ["list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: apisix-k8s-sd-watcher-binding subjects: - kind: ServiceAccount name: apisix-k8s-sd-sa namespace: apisix roleRef: kind: ClusterRole name: apisix-k8s-sd-watcher apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: ServiceAccount metadata: name: apisix-k8s-sd-sa namespace: apisix

सेवा खाता बनाएं और एक टोकन प्राप्त करें:

kubectl apply -f rbac.yaml SECRET_NAME=`kubectl get sa -n apisix apisix-k8s-sd-sa -ojsonpath='{.secrets[0].name}'` kubectl get secrets $SECRET_NAME -n apisix -ojsonpath='{.data.token}' | base64 -d

API7 Cloud में सेवा रजिस्ट्री बनाएं

कंट्रोल प्लेन -> सेटिंग्स -> सेवा रजिस्ट्री पर जाएं, पिछले चरण में प्राप्त टोकन का उपयोग करके API7 Cloud में Kubernetes प्रकार की सेवा रजिस्ट्री बनाएं (ध्यान दें कि API Server पता आपके उपयोग के आधार पर भरा जाना चाहिए)। इस उदाहरण में, APISIX भी लक्ष्य Kubernetes क्लस्टर में तैनात है, इसलिए हम जो API सर्वर पता उपयोग करते हैं वह kubernetes.default.svc.cluster.local है:

API7 Cloud में सेवा रजिस्ट्री बनाएं

Kubernetes में सेवाएं तैनात करें

Kubernetes सेवा खोज की प्रभावशीलता को सत्यापित करने के लिए, हमने HTTPBin सेवा के तीन रेप्लिका तैनात किए और एक संबंधित सेवा बनाई।

kubectl create deployment httpbin --image=kennethreitz/httpbin:latest --replicas=3 -n apisix kubectl create service clusterip httpbin --tcp=80:80 -n apisix

httpbin सेवा बनाई गई

API7 Cloud में एप्लिकेशन और API बनाएं

टेस्ट एप्लिकेशन तैनात करने के बाद, API7 Cloud के API मैनेजमेंट -> एप्लिकेशन पेज पर जाएं और नया एप्लिकेशन बनाने के लिए Create Application बटन पर क्लिक करें। बुनियादी कॉन्फ़िगरेशन निम्नलिखित है:

  • sd.httpbin.org को Host के रूप में
  • / को Path prefix के रूप में

महत्वपूर्ण हिस्सा यह है कि अपस्ट्रीम को Kubernetes और हमारे द्वारा अभी बनाई गई रजिस्ट्री का उपयोग करने के लिए कॉन्फ़िगर करें, जो सेवा खोज के लिए है, न कि IP की स्थिर सूची के लिए:

सेवा खोज बनाम IP की स्थिर सूची

अगला, हमने एप्लिकेशन में /anything API बनाया, जो प्रॉक्सी टेस्टिंग के लिए है:

/anything API

प्रॉक्सी का परीक्षण करें

पहले port-forward के माध्यम से डेटा प्लेन HTTP पोर्ट को स्थानीय मशीन पर मैप करें:

kubectl port-forward -n apisix svc/apisix-gateway 9080:80

curl का उपयोग करके लक्ष्य सेवा का अनुरोध करें:

curl http://127.0.0.1:9080/anything -H 'Host: sd.httpbin.org' -i HTTP/1.1 200 OK Content-Type: application/json Content-Length: 373 Connection: keep-alive Date: Mon, 09 Jan 2023 08:33:44 GMT Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true Server: APISIX
Tags: