قلل تكاليف AWS مع دخول Kubernetes مع موازن ELB الكلاسيكي


قبل بضعة أشهر كتبت مقالًا عن وحدة تحكم Kubernetes Nginx Ingress ، والتي تحتل المرتبة الثانية في الشعبية في هذه المدونة. موضوعه الرئيسي هو استخدام Kubernetes Ingress لعمليات النشر المحلية. ومع ذلك ، يستخدم معظم المستخدمين Kubernetes في سحابة AWS وخدمات السحابة العامة من مزودي خدمات آخرين. ومع ذلك ، تكمن المشكلة في أن AWS تنشئ ELB جديدًا (موازن التحميل المرن) لكل خدمة من نوع LoadBalancer. قد يكون هذا علاجًا مكلفًا للغاية. إذا كنت تستخدم Kubernetes Ingress ، فسوف تحتاج إلى ELB واحد فقط.


كيف يعمل؟


من أجل فهم أفضل ، سأقدم بعض الرسوم البيانية. بدون وحدة تحكم Ingress ، سيتم إنشاء موازن ELB كلاسيكي منفصل لكل خدمة يتم توفيرها:



عند استخدام Ingress ، ستحتاج إلى موازن ELB واحد فقط ، لتوجيه جميع الطلبات إلى وكلاء Ingress الذين يعملون في المجموعة:



خذ بعين الاعتبار تكلفة موازن التحميل الكلاسيكي:


يجب عليك الدفع مقابل كل ساعة كاملة أو غير مكتملة من موازن التحميل Classic Load Balancer ولكل غيغابايت من البيانات المنقولة معه.

هذا يعني أنه عند استخدام مجموعة في منطقة شرق الولايات المتحدة ، سيتعين عليك دفع حوالي 18.25 دولارًا لكل خدمة يتم تقديمها. يجب عليك أيضًا الدفع مقابل كل جيجابايت من البيانات المعالجة. يسمح لك Ingress بتقليل تكاليف AWS مع عدد كبير من الخدمات. بالطبع ، لضمان توفر عالٍ ، يمكنك استخدام العديد من النسخ المتماثلة من جراب وكيل Ingress.


نشر Nginx Ingress


هناك عدد كبير من الخيارات المتاحة لوحدة تحكم Ingress ، على سبيل المثال ، Traefik أو Voyager (لـ HAProxy) أو Contour (for Envoy ) أو حتى وحدة تحكم Ingress AWS ALB (إصدار ألفا) ، والتي تختلف قليلاً عن البقية. في هذا المنشور ، ألقي نظرة على وحدة تحكم Ingress Nginx ، وهي الآن الأكثر شيوعًا. على عكس المقالة السابقة على وحدة تحكم 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 

ملاحظة هناك مشكلة في Helm تتمثل في عدم تحليل القيم المنطقية على شكل سلاسل عند استخدام وسيطة المجموعة. لذلك ، قمت بإنشاء ملف بقيم ، ولم --set القيم الافتراضية من خلال --set و --set-string .


التحقق من الموقد Ingress يعرض خدمتين ، وحدة التحكم والخادم بشكل افتراضي:


 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 

يجب توضيح بعض النقاط هنا. نظرًا لأن جميع الطلبات ستتم عبر وحدة تحكم Ingress ، فمن المستحسن أن يكون لديك اثنان على الأقل من النسخ المتماثلة الخاصة به. هذا هو في الأساس خادم وكيل داخلي. تستخدم وحدة التحكم النهاية الخلفية الافتراضية لتوجيه موارد Ingress غير الموجودة. جانب الخادم بسيط جدًا افتراضيًا. للحصول على عناوين IP المصدر في سجل وكيل Ingress ، قمت بتنشيط بروتوكول الوكيل لـ Nginx و ELB باستخدام الإعدادين التاليين:


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

تم تصميم بروتوكول اتصال الوكيل لتوصيل خوادم الوكيل دون فقدان بيانات العميل.


وكمكافأة ، يمكنك الآن بسهولة الحصول على DNS التلقائي. قم أولاً بإنشاء سجل DNS A باستخدام الحروف الأولية ، مثل *.test.example.com ، والتي *.test.example.com إلى وحدة تحكم Ingress ELB. يمكن الحصول على عنوان 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 

بعد ذلك ، عند إنشاء نقطة دخول Ingress باستخدام مضيف site1.test.example.com ، site1.test.example.com إدخال هذا السطر على الفور في المتصفح. سيقوم DNS بتحليل الاسم بدون تكوين إضافي. إن استخدام سجل DNS مع الحروف الأولية ليست فكرة جيدة ، لكنها تعمل. لتكوين DNS بالتفصيل ، يمكنك استخدام DNS خارجي لـ Kubernetes.


الخلاصة


يساعد استخدام وحدة تحكم Ingress في تحقيق مستوى أعلى من الأتمتة. ولكن تذكر أنه إذا فشل ، فستفشل جميع نقاط النهاية الخارجية أيضًا! في المقالة التالية ، سأوضح كيفية تكوين التحديث التلقائي وتثبيت شهادات SSL باستخدام Let's Encrypt. بعد ذلك ، يمكنك استخدام DNS التلقائي مع نقاط نهاية SSL بشكل افتراضي. تابع الأخبار.

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


All Articles