شبكة خدمة لل microservices. الجزء الثاني ، أساسيات العمل مع Istio

تم إعداد ترجمة لهذه المقالة خصيصًا لطلاب دورة البنية التحتية لمنصة Kubernetes .



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


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


توفر لك Microservices قابلية كبيرة للتطوير ، وتكملها شبكة الخدمة بفوائد مركزية نموذجية للبيئات المتجانسة (مثل السجلات والتحكم في الإصدار). لقد كتبنا المزيد عن ميزات وفوائد شبكة الخدمة في مقال سابق في هذه السلسلة.


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


تقديم طائرة البيانات والوكيل الجانبي


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


يعمل وكيل Sidecar مع الموقد الذي يحدد خدمتك في Kubernetes. تتم إضافته إلى المكونات الرئيسية للخدمة ويعمل مع حركة المرور التي تذهب إلى هذه الخدمة. يمكنك إضافة وكيل جانبي إلى تعريف الخدمة الحالية في الموقد: فقط الخطوط التي ستحدد الوكيل الجانبي ستضاف إلى الخدمة وستبدأ العمل.



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


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


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


المركزية: طائرة التحكم


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



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


يعد هذا الأمر أسهل في الرؤية باستخدام أمر get-svc في kubectl - ستحصل على قائمة بالخدمات المتعلقة بمكتبة معينة. للتحقق من مكونات Istio التي تعمل ، يمكنك استخدام الأمر التالي:


 kubectl get svc -n istio-system 

يتم عرض قائمة بالعناصر الرئيسية لمستوى التحكم في Istio التي تعمل في الخلفية. قد تكون على دراية بالفعل ببعضهم ، مثل Citadel ، وهي خدمة تدير حماية حركة المرور بين الخدمات.


تثبيت Istio


دعونا نرى ما هي الميزات التي يدعمها Istio افتراضيًا. سنقوم بتثبيت طائرة التحكم Istio لإدارة API HTTP الأساسية التي تم وصفها في المقالة السابقة. تم تعريف خدمة API هذه في Kubernetes وتنفيذها كخدمة واحدة تحت Kubernetes مع تشغيل API فيها.


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


ثم أضف تعريفات Istio إلى Kubernetes بحيث يمكنك استخدامها مع kubectl سطر الأوامر kubectl . أضف ملفات .yaml تم الحصول عليها مسبقًا إلى دليل التثبيت باستخدام kubectl apply :


 kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml 

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


 kubectl apply -f install/kubernetes/istio-demo-auth.yaml 

بعد ذلك يمكنك المتابعة. ستحتاج إلى إضافة بنية Istio إلى البرامج التي تم إنشاؤها مسبقًا ، وبالنسبة إلى البرامج الجديدة ، أضف Istio كجهة تبعية.


نشر تطبيق Helloworld


سنستخدم helloworld للتطبيق التجريبي ، الموضح في منشورنا السابق. سيتم إنشاء: نشر واحد ، خدمة واحدة ، بوابة واحدة وخدمة افتراضية واحدة. قم بتحديث ملف التكوين ليتوافق مع ما يلي:


helloworld.yaml


 apiVersion: v1 kind: Service metadata: name: helloworld spec: type: ClusterIP ports: - port: 80 targetPort: 8080 selector: app: helloworld --- apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-v1 spec: replicas: 1 selector: matchLabels: app: helloworld template: metadata: labels: app: helloworld version: v1 spec: containers: - name: helloworld-kubernetes - image: haseebm/helloworld-kubernetes ports: - containerPort: 8080 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: helloworld-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: helloworld spec: hosts: - "*" gateways: - helloworld-gateway http: route: - destination: host: helloworld port: number: 80 

دليل Istio الوكيل الجانبي


يستخدم Istio عينة الوكيل sidecar لوضع حاوية الوكيل Istio sidecar في مكان واحد مع حاوية التطبيق helloworld.


 $ kubectl apply -f <(istioctl kube-inject -f helloworld.yaml) service/helloworld created deployment.extensions/helloworld-v1 created gateway.networking.istio.io/helloworld-gateway created virtualservice.networking.istio.io/helloworld created 

تحقق من تنفيذ القرون والخدمة:


 $ kubectl get pod,svc | grep helloworld pod/helloworld-v1-1cbca3f8d5-achr2 2/2 Running service/helloworld ClusterIP 10.160.58.61 

تحقق الآن من حركة المرور لتطبيق helloworld:


 $ curl a2******.ap-southeast-1.elb.amazonaws.com/api/hello 

مرحبا العالم v1


الخطوات التالية


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


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


أسد فايزي
المؤسس والرئيس التنفيذي لشركة CloudPlex.io، Inc
asad@cloudplex.io
www.cloudplex.io

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


All Articles