API Gateway और Consul को कैसे एकीकृत करें?

Fei Han

February 25, 2022

Ecosystem

पृष्ठभूमि जानकारी

Consul एक सर्विस मेश समाधान है। इसका एक मुख्य हिस्सा, Consul KV, एक वितरित की-वैल्यू डेटाबेस है जिसका मुख्य उद्देश्य कॉन्फ़िगरेशन पैरामीटर और मेटाडेटा को संग्रहीत करना है, साथ ही उपयोगकर्ताओं को इंडेक्स्ड ऑब्जेक्ट्स को संग्रहीत करने की अनुमति देता है।

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

वर्तमान में, Apache APISIX समुदाय द्वारा योगदान किए गए consul_kv मॉड्यूल के साथ Consul KV-आधारित सर्विस डिस्कवरी रजिस्ट्री का समर्थन करता है।

यह कैसे काम करता है

Apache APISIX Consul KV की वितरित की-वैल्यू संग्रहण क्षमता के consul_kv मॉड्यूल का उपयोग करके एक सेवा के प्रदाता और उपभोक्ता को अलग करता है और सर्विस डिस्कवरी रजिस्ट्री के दो मुख्य कार्यों को लागू करता है।

  1. सेवा पंजीकरण: सेवा प्रदाता अपनी सेवाओं को रजिस्ट्री के साथ पंजीकृत करते हैं।
  2. सेवा खोज: सेवा उपभोक्ता रजिस्ट्री के माध्यम से सेवा प्रदाताओं की रूटिंग जानकारी ढूंढते हैं।

इस आधार पर, Apache APISIX अधिक लचीला और मौजूदा माइक्रोसर्विस आर्किटेक्चर के अनुकूल होगा ताकि उपयोगकर्ता की आवश्यकताओं को बेहतर ढंग से पूरा किया जा सके।

consul architectures

Apache APISIX में Consul को कैसे सक्षम करें

इस लेख में परीक्षण वातावरण Docker में docker-compose का उपयोग करके बनाए गए हैं।

  1. Apache APISIX डाउनलोड करें।

    # apisix-docker का Git रिपॉजिटरी डाउनलोड करें git clone https://github.com/apache/apisix-docker.git
  2. Consul फ़ोल्डर और कॉन्फ़िगरेशन फ़ाइलें बनाएं।

    # Consul फ़ोल्डर बनाएं mkdir -p ~/docker-things/consul/ && cd $_ # कॉन्फ़िगरेशन फ़ाइलें बनाएं touch docker-compose.yml server1.json
  3. docker-compose.yml फ़ाइल संपादित करें।

    version: '3.8' services: consul-server1: image: consul:1.9.3 container_name: consul-server1 restart: always volumes: - ./server1.json:/consul/config/server1.json:ro networks: - apisix ports: - '8500:8500' command: 'agent -bootstrap-expect=1' networks: apisix: external: true name: example_apisix
  4. server1.json फ़ाइल संपादित करें।

    { node_name: consul-server1, server: true, addresses: { http: 0.0.0.0 } }
  5. Apache APISIX कॉन्फ़िगरेशन फ़ाइल apisix_conf/config.yaml में Consul-संबंधित कॉन्फ़िगरेशन जानकारी जोड़ें।

    # config.yml # ...अन्य कॉन्फ़िगरेशन discovery: consul_kv: servers: - http://consul-server1:8500 prefix: upstreams
  6. Apache APISIX और Consul शुरू करें।

    # उदाहरण, consul फ़ोल्डर पर जाएं, APISIX और Consul शुरू करें docker-compose up -d
  7. परीक्षण सेवा को Consul में पंजीकृत करें। उदाहरण में दो वेब सेवाएं हैं जिनका उपयोग आप सीधे परीक्षण के लिए कर सकते हैं।

    # उदाहरण का docker-compose.yml देखें # आप दो वेब सेवाएं देख सकते हैं $ cat docker-compose.yml | grep web # आउटपुट web1: - ./upstream/web1.conf:/etc/nginx/nginx.conf web2: - ./upstream/web2.conf:/etc/nginx/nginx.conf
  8. इन वेब सेवाओं के IP पते की पुष्टि करें।

    $ sudo docker inspect -f='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(sudo docker ps -aq) | grep web # आउटपुट /example-web1-1 - 172.26.0.7 /example-web2-1 - 172.26.0.2
  9. टर्मिनल में Consul के HTTP API को अनुरोध करके परीक्षण सेवा को पंजीकृत करें।

    # संबंधित IP के साथ पंजीकृत करें curl \ -X PUT \ -d ' {weight: 1, max_fails: 2, fail_timeout: 1}' \ http://127.0.0.1:8500/v1/kv/upstreams/webpages/172.26.0.7:80 curl \ -X PUT \ -d ' {weight: 1, max_fails: 2, fail_timeout: 1}' \ http://127.0.0.1:8500/v1/kv/upstreams/webpages/172.26.0.2:80

    /v1/kv/ के बाद का पथ {Prefix}/{Service Name}/{IP}:{Port} प्रारूप का अनुसरण करता है।

    {Prefix} APISIX में Consul को कॉन्फ़िगर करते समय लिखा गया प्रीफ़िक्स है, जबकि {Service Name} और {IP}:{Port} उपयोगकर्ता द्वारा अपस्ट्रीम सेवा के अनुसार निर्धारित किया जाना चाहिए।

    डेटा का प्रारूप {"weight": , "max_fails": , "fail_timeout": } है।

  10. जांचें कि परीक्षण सेवा सफलतापूर्वक पंजीकृत हुई है या नहीं।

    curl http://127.0.0.1:8500/v1/kv/upstreams/webpages?keys

    निम्नलिखित वापसी संदेश सफल पंजीकरण को दर्शाता है।

    [upstreams/webpages/172.26.0.2:80,upstreams/webpages/172.26.0.7:80]%

एक रूट बनाएं और Consul सक्षम करें

Apache APISIX द्वारा प्रदान किए गए Admin API का उपयोग करके Consul को रूट में जोड़ें।

X-API-KEY और upstream.service_name को जोड़ने से पहले निर्धारित करने की आवश्यकता है।

  • X-API-KEY: Admin API एक्सेस टोकन के लिए, इस उदाहरण में, हम डिफ़ॉल्ट edd1c9f034335f136f87ad84b625c8f1 का उपयोग करते हैं।
  • upstream.service_name: अपस्ट्रीम सेवा का नाम, जो रजिस्ट्री में एक सेवा को निर्दिष्ट करता है जो एक रूट से बंधी होगी, Consul का उपयोग करते समय परीक्षण सेवा को पंजीकृत करने के लिए उपयोग किए गए URL को सेट किया जाना चाहिए, और अंत में {IP}:{Port} हिस्सा हटा दिया जाना चाहिए। हम Apache APISIX द्वारा प्रदान किए गए Memory Dump API का उपयोग करके सेवा का URL प्राप्त कर सकते हैं और पुष्टि कर सकते हैं कि अपस्ट्रीम सेवा सही ढंग से खोजी गई है या नहीं।
$ curl http://127.0.0.1:9092/v1/discovery/consul_kv/dump | jq # आउटपुट { "services": { # यह कुंजी आवश्यक URL है "http://consul-server1:8500/v1/kv/upstreams/webpages/": [ { "port": 80, "host": "172.26.0.7", "weight": 1 }, { "port": 80, "host": "172.26.0.2", "weight": 1 } ] }, "config": { # ...कॉन्फ़िगरेशन } }

एक रूट जोड़ें

यहां URL /consul/* के साथ अनुरोध को http://consul-server1:8500/v1/kv/upstreams/webpages/ पर रूट किया गया है। साथ ही, discovery_type को consul_kv पर सेट किया जाना चाहिए ताकि संबंधित मॉड्यूल शुरू हो सके।

curl http://127.0.0.1:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X POST -d ' { "uri": "/consul/*", "upstream": { "service_name": "http://consul-server1:8500/v1/kv/upstreams/webpages/", "type": "roundrobin", "discovery_type": "consul_kv" } }'

परिणाम का परीक्षण और सत्यापन करें

अनुरोध परिणाम दिखाते हैं कि Apache APISIX में नया रूट Consul के माध्यम से सही सेवा पता ढूंढने में सक्षम है और लोड बैलेंसिंग नीति के आधार पर दोनों नोड्स को अनुरोध करता है।

# पहला अनुरोध curl -s http://127.0.0.1:9080/consul/ # आउटपुट hello web1% # दूसरा अनुरोध curl -s http://127.0.0.1:9080/consul/ # आउटपुट hello web2% # नोट: यह भी संभव है कि दोनों अनुरोधों का परिणाम # web1 या web2 के रूप में समान हो। # यह लोड बैलेंसिंग की प्रकृति के कारण होता है और # आप अधिक अनुरोध करके प्रयास कर सकते हैं।

सारांश

इस लेख का पहला भाग बताता है कि Apache APISIX Consul के साथ कैसे काम करता है ताकि Consul KV-आधारित सर्विस डिस्कवरी रजिस्ट्री को लागू किया जा सके और सेवा जानकारी प्रबंधन और रखरखाव की समस्या को हल किया जा सके। लेख का दूसरा भाग Docker में Apache APISIX का उपयोग करने पर केंद्रित है। बेशक, वास्तविक परिदृश्य में अनुप्रयोग को व्यावसायिक परिदृश्य और मौजूदा सिस्टम आर्किटेक्चर के अनुसार विश्लेषण करने की आवश्यकता है।

Apache APISIX में Consul रजिस्ट्री का उपयोग करने के बारे में अधिक निर्देश आधिकारिक दस्तावेज़ में पाए जा सकते हैं।

Apache APISIX वर्तमान में अतिरिक्त सेवाओं के एकीकरण का समर्थन करने के लिए अतिरिक्त प्लगइन्स पर काम कर रहा है, इसलिए यदि आप रुचि रखते हैं, तो कृपया GitHub Discussion में चर्चा शुरू करें, या मेलिंग सूची के माध्यम से संवाद करें।

Tags: