क्लासिक ईएलबी बैलेंसर के साथ कुबेरनेट्स इनग्रेड के साथ एडब्ल्यूएस लागत को कम करें


कुछ महीने पहले मैंने कुबेरनेट्स नेग्नेक्स इनग्रेड कंट्रोलर के बारे में एक लेख लिखा था, जो इस ब्लॉग पर लोकप्रियता में दूसरे स्थान पर है। इसका मुख्य विषय ऑन-प्रिमाइसेस परिनियोजन के लिए Kubernetes Ingress का उपयोग है। हालाँकि, अधिकांश उपयोगकर्ता अन्य प्रदाताओं से AWS क्लाउड और सार्वजनिक क्लाउड सेवाओं में Kubernetes का उपयोग करते हैं। हालाँकि, समस्या यह है कि AWS एक नई ELB (इलास्टिक लोड बैलेंसर) बनाता है जो प्रत्येक प्रकार की LoadBalancer की सेवा के लिए है। यह एक इलाज महंगा हो सकता है। यदि आप Kubernetes Ingress का उपयोग करते हैं, तो आपको केवल एक ELB की आवश्यकता होगी।


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


बेहतर समझ के लिए, मैं कुछ आरेख देगा। इनग्रेड कंट्रोलर के बिना, प्रदान की जाने वाली प्रत्येक सेवा के लिए एक अलग क्लासिक ELB बैलेंसर बनाया जाएगा:



Ingress का उपयोग करते समय, आपको केवल एक ऐसे ELB बैलेंसर की आवश्यकता होगी, जो क्लस्टर में चल रहे Ingress proxies के सभी अनुरोधों को निर्देशित करे:



क्लासिक लोड बैलेंसर की लागत पर विचार करें:


आपको लोड बैलेंसर क्लासिक लोड बैलेंसर के हर पूर्ण या अपूर्ण घंटे के लिए और इसके साथ स्थानांतरित किए गए डेटा के हर गीगाबाइट के लिए भुगतान करना होगा।

इसका मतलब यह है कि यूएस ईस्ट क्षेत्र में क्लस्टर का उपयोग करते समय, आपको प्रदान की गई प्रत्येक सेवा के लिए लगभग $ 18.25 का भुगतान करना होगा। आपको संसाधित डेटा के प्रत्येक गीगाबाइट के लिए भी भुगतान करना होगा। इनग्रेड आपको बड़ी संख्या में सेवाओं के साथ AWS लागत को कम करने की अनुमति देता है। बेशक, उच्च उपलब्धता सुनिश्चित करने के लिए, आप इनग्रेड प्रॉक्सी पॉड के कई प्रतिकृतियों का उपयोग कर सकते हैं।


नियगंक्स इनग्रेड की तैनाती करें


इनग्रेड कंट्रोलर के लिए बड़ी संख्या में विकल्प उपलब्ध हैं, उदाहरण के लिए, ट्रिफिक , वोएजर (हैप्रोसी के लिए), कंटूर (एनवॉय के लिए), या यहां तक ​​कि इनग्रेड एडब्ल्यूएस एएलबी कंट्रोलर (अल्फा संस्करण), जो बाकी से थोड़ा अलग है। इस पोस्ट में, मैं इनग्रेड नगनेक्स कंट्रोलर को देखता हूं, जो अब सबसे आम है। Ingress Nginx कंट्रोलर के पिछले लेख के विपरीत, इस बार मैं तैनाती के लिए Helm का उपयोग करता हूं:


cat > values.yaml <<EOF controller: replicaCount: 2 config: use-proxy-protocol: "true" service: annotations: service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*' EOF helm install --name ingress \ --namespace ingress \ -f values.yaml \ stable/nginx-ingress 

नोट। हेल्म के साथ एक समस्या है कि सेट तर्क का उपयोग करते समय बूलियन को तार के रूप में पार्स नहीं किया जाता है। इसलिए, मैंने मानों के साथ एक फ़ाइल बनाई, और डिफ़ॉल्ट मानों को --set और --set-string माध्यम से --set नहीं किया।


चूल्हा की जाँच में दो सेवाओं को प्रदर्शित करता है, नियंत्रक और सर्वर पक्ष डिफ़ॉल्ट रूप से:


 kubectl get pod -n ingress --selector=app=nginx-ingress NAME READY STATUS RESTARTS AGE ingress-nginx-ingress-controller-8689c87db7-jlwxv 1/1 Running 0 5m ingress-nginx-ingress-controller-8689c87db7-kv859 1/1 Running 0 5m ingress-nginx-ingress-default-backend-5f5888cc9b-jdjrp 1/1 Running 0 5m 

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


 --set controller.service.annotations."service\\.beta\\.kubernetes\\.io/aws-load-balancer-proxy-protocol"='*' \ --set-string controller.config.use-proxy-protocol=true \ 

प्रॉक्सी कनेक्शन प्रोटोकॉल क्लाइंट डेटा खोने के बिना प्रॉक्सी सर्वर को संवाद करने के लिए डिज़ाइन किया गया है।


और एक बोनस के रूप में, अब आप आसानी से स्वचालित डीएनएस प्राप्त कर सकते हैं। पहले *.test.example.com जैसे *.test.example.com का उपयोग करके एक DNS A रिकॉर्ड *.test.example.com , जो कि Ingress *.test.example.com को इंगित करेगा। इस आदेश का उपयोग करके ELB पता प्राप्त किया जा सकता है:


 kubectl get svc ingress-nginx-ingress-controller -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' -n ingress a00950ebcfd0411e740ee0207cf10ce8-1089949860.eu-west-1.elb.amazonaws.com 

उसके बाद, साइट site1.test.example.com होस्ट के साथ site1.test.example.com प्रवेश बिंदु बनाते समय, site1.test.example.com तुरंत ब्राउज़र में इस लाइन को दर्ज site1.test.example.com सकते हैं। DNS अतिरिक्त कॉन्फ़िगरेशन के बिना नाम का समाधान करेगा। मेटाचैकर्स के साथ DNS रिकॉर्ड का उपयोग करना एक अच्छा विचार नहीं है, लेकिन यह काम करता है। DNS को विस्तार से कॉन्फ़िगर करने के लिए, आप Kubernetes के लिए बाहरी DNS का उपयोग कर सकते हैं।


निष्कर्ष


इनग्रेड कंट्रोलर का उपयोग करने से वास्तव में उच्च स्तर के स्वचालन को प्राप्त करने में मदद मिलती है। लेकिन याद रखें कि यदि यह विफल रहता है, तो आपके सभी बाहरी समापन भी विफल होंगे! अगले लेख में, मैं दिखाऊंगा कि लेट्स एनक्रिप्ट का उपयोग करके एसएसएल प्रमाणपत्रों के स्वत: अद्यतन और स्थापना को कैसे कॉन्फ़िगर किया जाए। उसके बाद, आप डिफ़ॉल्ट रूप से SSL समापन बिंदु के साथ स्वचालित DNS का उपयोग कर सकते हैं। खबर का पालन करें

Source: https://habr.com/ru/post/hi423809/


All Articles