الإطلاق المظلم في Istio: الخدمات السرية

قال أوستن باورز ، رجل غامض على نطاق دولي: "الخطر هو اسمي الأوسط". لكن ما يحظى بتقدير كبير من قبل الوكلاء الفائقين والخدمات الخاصة ليس مناسبًا على الإطلاق لخدمات الكمبيوتر ، حيث الأشياء المملة أفضل بكثير من الأخطار.



ويجعل Istio ، مع OpenShift و Kubernetes ، عمليات نشر الخدمات الصغيرة مملة حقًا ويمكن التنبؤ بها - وهذا أمر رائع. سنتحدث عن هذا وأكثر من ذلك بكثير في المنشور الرابع والأخير من سلسلة Istio.

عندما يكون الملل على حق


في حالتنا ، يحدث الملل فقط في المرحلة النهائية ، عندما يبقى فقط الجلوس ومشاهدة العملية. ولكن لهذا تحتاج إلى تكوين كل شيء مسبقًا ، وهنا ستجد الكثير من الأشياء المثيرة للاهتمام.

عند نشر إصدار جديد من برنامجك ، يجب أن تفكر في جميع الخيارات لتقليل المخاطر. يعد العمل في الوضع الموازي طريقة قوية جدًا ومثبتة للاختبار ، ويسمح لك Istio باستخدام "الخدمة السرية" (نسخة من الخدمة الدقيقة الخاصة بك مخفية عن أعين المتطفلين) لهذا دون التدخل في نظام الإنتاج. حتى أن هناك مصطلحًا خاصًا لهذا - "التشغيل السري" (التشغيل السريع) ، والذي يتم تنشيطه بدوره بواسطة وظيفة ذات اسم أقل من برامج التجسس "عكس حركة المرور".

لاحظ أن الجملة الأولى من الفقرة السابقة تستخدم مصطلح "نشر" بدلاً من "تحرير". يجب أن تكون قادرًا حقًا على نشر خدماتك الصغيرة - وبالطبع استخدامها - كما تشاء. يجب أن تكون هذه الخدمة قادرة على استقبال ومعالجة حركة المرور ، وإنتاج النتائج ، وكذلك الكتابة إلى السجلات والمراقبة. ولكن في الوقت نفسه ، لا يجب إطلاق هذه الخدمة نفسها في الإنتاج على الإطلاق. نشر البرنامج وإصداره ليسا دائمًا نفس الشيء. يمكنك إجراء النشر وقتما تشاء ، ولكن لن يتم تحريره إلا عندما تكون جاهزًا تمامًا.

تنظيم الملل مثير للاهتمام


ألق نظرة على قاعدة توجيه Istio التالية ، التي توجه جميع طلبات HTTP إلى الخدمة المصغرة v1 التوصية (جميع الأمثلة من Repos Istio Tutorial GitHub ) ، بينما تعكسها إلى التوصية v2 microservice:


انتبه إلى الملصق الموجود mirror:أسفل الشاشة - فهو الذي يحدد انعكاس حركة المرور. نعم ، هذا بسيط للغاية!

ستكون نتيجة هذه القاعدة أن نظام الإنتاج الخاص بك (v1) سيستمر في معالجة الطلبات الواردة ، ولكن الطلبات نفسها ستعكس بشكل غير متزامن على الإصدار 2 ، أي أن النسخ المكررة بالكامل ستذهب إلى هناك. وبالتالي ، يمكنك اختبار عمل الإصدار الثاني في ظروف حقيقية - على البيانات الحقيقية وحركة المرور - دون التدخل في عمل نظام الإنتاج. هل هذا يجعل اختبار المنظمة مملة؟ نعم بالطبع. لكن هذا يتم بشكل مثير للاهتمام.

أضف دراما


يرجى ملاحظة أنه في رمز v2 ، من الضروري توفير المواقف التي يمكن أن تؤدي فيها الطلبات الواردة إلى تغييرات البيانات. يتم عكس الاستعلامات نفسها بسهولة وشفافية ، ولكن اختيار طريقة المعالجة في الاختبار هو لك - وهذا مثير بالفعل.

كرر النقطة المهمة


يمكن إجراء إطلاق سري مع النسخ المروري (النسخ المطابق / طلب النسخ المطابق) دون التأثير على الشفرة.

غذاء للفكر


ولكن ماذا لو كان المكان الذي يعكس الطلبات هو إرسال بعضها ليس إلى v1 ، ولكن إلى v2؟ على سبيل المثال ، واحد بالمائة من كل الطلبات أو الطلبات من مجموعة مستخدمين محددة فقط. وبعد ذلك ، بالنظر إلى كيفية عمل الإصدار 2 ، قم بنقل جميع الطلبات تدريجيًا إلى الإصدار الجديد. أو العكس ، أعد كل شيء إلى v1 إذا حدث خطأ في v2. يبدو أنه يسمى نشر الكناري ("نشر الكناري" - المصطلح يعود إلى التعدين ، وإذا كان من أصل روسي ، فمن المحتمل أن يحتوي على إشارة إلى القطط ) ، والآن سنفحص هذا بمزيد من التفصيل.

نشر Canary في Istio: تبسيط التكليف


الحذر وبالتدريج


جوهر نموذج نشر Canary Deployment بسيط للغاية: عندما تبدأ إصدارًا جديدًا من برنامجك (في حالتنا ، خدمة صغيرة) ، فأنت تمنح الوصول إليه أولاً لمجموعة صغيرة من المستخدمين. إذا كان كل شيء يسير على ما يرام ، فأنت تزيد هذه المجموعة ببطء حتى يبدأ الإصدار الجديد في التخلص من البيانات غير المرغوب فيها ، أو - إذا لم يحدث ذلك - في النهاية ينقل جميع المستخدمين إليها. من خلال إدخال إصدار جديد في العملية بشكل مدروس وتدريجي وتحويل المستخدمين إليه بطريقة يمكن التحكم فيها ، يمكنك تقليل المخاطر وزيادة التعليقات إلى أقصى حد.

بالطبع ، يبسط Istio نشر Canary من خلال تقديم العديد من الخيارات الجيدة لتوجيه الاستعلام الذكي. ونعم ، كل هذا يمكن القيام به دون لمس شفرة المصدر الخاصة بك.

تصفية المتصفح


يعد إعادة التوجيه المستند إلى المستعرض أحد أبسط معايير التوجيه. افترض أنك تريد أن يقوم الإصدار 2 بإرسال الطلبات من متصفحات Safari فقط. هيريس كيفية القيام بذلك:


نطبق قاعدة التوجيه هذه ، ثم باستخدام الأمر curlسنقوم بمحاكاة الطلبات الحقيقية إلى الخدمات الصغيرة في حلقة. كما ترى في لقطة الشاشة ، يذهب جميعهم إلى v1:


وأين هي حركة المرور على V2؟ نظرًا لأن جميع الطلبات في مثالنا جاءت فقط من سطر الأوامر الخاص بنا ، فهي ببساطة غير موجودة. ولكن انتبه إلى النقاط النهائية في لقطة الشاشة أعلاه: هذا رد فعل على حقيقة أننا قمنا بتنفيذ الطلب من متصفح Safari ، الذي أصدر بدوره هذا:


قوة غير محدودة


لقد كتبنا بالفعل أن التعبيرات العادية توفر إمكانات قوية جدًا لتوجيه الاستعلامات. ألق نظرة على المثال التالي (نعتقد أنك ستفهم ما تفعله بنفسك):


الآن ربما تعرف بالفعل ما هي التعبيرات العادية القادرة على ذلك.

تصرف بذكاء


يتيح لك التوجيه الذكي ، ولا سيما معالجة حزم الحزم باستخدام التعبيرات العادية ، توجيه حركة المرور بالطريقة التي تريدها. وهذا يبسط إلى حد كبير التكليف بالرمز الجديد - إنه بسيط ، ولا يتطلب تغيير الرمز نفسه ، وإذا لزم الأمر ، يمكن إرجاع كل شيء بسرعة كما كان.

مهتم ب؟


هل أنت حريص على تجربة Istio و Kubernetes و OpenShift على جهاز الكمبيوتر الخاص بك؟ قام فريق مطوري Red Hat بإعداد برنامج تعليمي ممتاز حول هذا الموضوع وشارك جميع الملفات ذات الصلة. لذا امض قدما ولا تحرم نفسك من أي شيء.

Istio Egress: الخروج من خلال متجر الهدايا


يمكن أن يؤدي استخدام Istio مع Red Hat OpenShift و Kubernetes إلى تبسيط حياتك بشكل كبير باستخدام الخدمات الصغيرة. يتم إخفاء شبكة الأداة المساعدة Istio داخل قرون Kubernetes ، ويتم تنفيذ التعليمات البرمجية الخاصة بك (في الغالب) في عزلة. الأداء ، سهولة التغيير ، التتبع والمزيد - كل هذا سهل الاستخدام بدقة من خلال استخدام الحاويات الجانبية. ولكن ماذا لو كانت خدماتك الصغيرة تحتاج إلى التواصل مع الخدمات الأخرى الموجودة خارج نظام OpenShift-Kubernetes؟

هذا هو المكان الذي يأتي فيه Istio Egress إلى الإنقاذ. باختصار ، يتيح لك ببساطة الوصول إلى الموارد (اقرأ: "الخدمات") التي لم يتم تضمينها في نظام Kubernetes الخاص بك. إذا لم تقم بإجراء تكوين إضافي ، في بيئة Istio Egress ، يتم توجيه حركة المرور فقط داخل مجموعة القرون وبين هذه المجموعات بناءً على جداول IP الداخلية. وهذا النوع من الجراء يعمل بشكل رائع حتى تحتاج إلى الوصول إلى الخدمات من الخارج.

يسمح لك Egress بتجاوز جداول IP المذكورة أعلاه ، إما استنادًا إلى قواعد الخروج ، أو لمجموعة من عناوين IP.

افترض أن لدينا برنامج جافا ينفذ طلب GET لـ httpbin.org/headers.

(httpbin.org هو مجرد مورد مناسب لاختبار طلبات الخدمة الصادرة.)

إذا كتبت في موجه الأوامرcurl http://httpbin.org/headersسنرى ما يلي:


أو يمكنك فتح نفس العنوان في متصفح:


كما ترى ، فإن الخدمة الموجودة هناك تقوم ببساطة بإرجاع الرؤوس التي تم تمريرها إليها.

استبدال الاستيراد في الجبين


الآن ، دعنا نأخذ كود Java لهذه الخدمة خارج نظامنا ونشغله في المنزل ، حيث أتذكر Istio. (يمكنك القيام بذلك بنفسك بالرجوع إلى برنامج Istio التعليمي الخاص بنا .) بعد إنشاء الصورة المقابلة وتشغيلها على منصة OpenShift ، سنتصل بهذه الخدمة بأمر curl egresshttpbin-istioegress.$(minishift ip).nip.io، وبعد ذلك سنرى على الشاشة ما يلي:


عفوًا ، ماذا حدث؟ لا يزال يعمل فقط. ماذا يعني لم يتم العثور؟ لقد فعلنا ذلك من أجله curl.

توسيع جداول IP إلى الإنترنت بالكامل


اللوم (أو شكرا) استيو على ذلك. بعد كل شيء ، Istio ليست سوى حاويات جانبية مسؤولة عن الكشف والتوجيه (حسنًا ، للعديد من الأشياء الأخرى التي تحدثنا عنها سابقًا). لهذا السبب ، تعرف جداول IP فقط داخل نظام الكتلة الخاص بك. ويقع موقع httpbin.org في الخارج وبالتالي فهو غير متوفر. وهنا يأتي Istio Egress إلى الإنقاذ - دون أدنى تغيير في شفرة المصدر الخاصة بك.

تقوم قاعدة الخروج أدناه بإجراء بحث Istio (إذا لزم الأمر ، ثم على الإنترنت بالكامل) للخدمة المطلوبة ، في هذه الحالة ، httpbin.org. كما ترى من هذا الملف (egress_httpbin.yml) ، فإن الوظيفة هنا بسيطة جدًا:


يبقى فقط لتطبيق هذه القاعدة:

istioctl create -f egress_httpbin.yml -n istioegress

يمكنك عرض قواعد الخروج باستخدام الأمر istioctl get egressrules:


وأخيرًا ، قم بتشغيل الأمر curl مرة أخرى - وشاهد أن كل شيء يعمل:


نعتقد بصراحة


كما ترى ، يسمح لك Istio بتنظيم التفاعل مع العالم الخارجي. بعبارة أخرى ، لا يزال بإمكانك إنشاء خدمات OpenShift وتوجيهها من خلال Kubernetes ، مع الاحتفاظ بكل شيء في حوامل تتسع لأعلى ولأسفل حسب الحاجة. وفي الوقت نفسه ، يمكنك الوصول بأمان إلى الخدمات الخارجية لبيئتك. ونعم ، نكرر مرة أخرى أنه يمكن القيام بكل هذا دون لمس الرمز الخاص بك.

كانت هذه آخر مشاركة في سلسلة Istio. ابق معنا - هناك الكثير من الأشياء المثيرة للاهتمام في المستقبل!

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


All Articles