شبكات Kubernetes - دليل شامل لمفاهيم الشبكات في Kubernetes



ستتعمق هذه المدونة على Kubernetes Networking في المفاهيم المتضمنة في Kubernetes مثل التواصل مع البودات والخدمات وشبكات الدخول.

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

في هذه المدونة الموجودة على شبكة Kubernetes ، سوف تفهم الموضوعات التالية:





ما هو Kubernetes؟

يمكنك تعريف Kubernetes كأداة تنسيق حاوية مفتوحة المصدر توفر نظامًا أساسيًا محمولاً لأتمتة نشر التطبيقات المعبأة في حاويات.

الآن ، يجب أن يكون لدى أي شخص يعمل مع Kubernetes فهم واضح لـ Kubernetes Cluster حيث سيساعدك ذلك في فهم شبكات Kubernetes.



كتلة Kubernetes

توفر منصة Kubernetes إدارة الحالة المرغوبة ، والتي تمكن خدمات المجموعة من العمل ، والتكوين المغذي في البنية التحتية. اسمحوا لي أن أشرح بمثال.

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

ما هو الشيء غير القابل للتغيير في جافا

مجموعة Kubernetes - شبكة Kubernetes - Edureka



الرجوع إلى الرسم البياني أعلاه. الآن ، كما يمكنك أن ترى أن خدمات الكتلة قد خصصت العامل الأول بزوجين من أزواج النسخ المتماثلة ، والعامل الثاني بزوج واحد للنسخة المتماثلة ، والعامل الثالث بزوجين من النسخ المتماثلة للقرص. الآن ، فإن عملية Kubelet هي المسؤولة عن توصيل خدمات الكتلة مع العمال.

لذا ، فإن هذا الإعداد الكامل لخدمات الكتلة والعمال أنفسهم يشكلون هذا كتلة Kubernetes !!

كيف ، برأيك ، تتواصل هذه الكبسولات المخصصة بشكل فردي مع بعضها البعض؟

الجواب يكمن في شبكة Kubernetes!

اشترك في قناتنا على يوتيوب للحصول على تحديثات جديدة ..!

هناك 4 مشاكل أساسية يجب حلها باستخدام مفاهيم الشبكات.

  • اتصالات حاوية إلى حاوية
  • جراب إلى جراب الاتصالات
  • جراب لخدمة الاتصالات
  • الاتصال الخارجي بالخدمة

الآن ، دعني أخبرك كيف يتم حل المشكلات المذكورة أعلاه باستخدام Kubernetes Networking.

شبكات Kubernetes

يجلب الاتصال بين البودات والخدمات والخدمات الخارجية لتلك الموجودة في مجموعة مفهوم شبكات Kubernetes.

لذا ، من أجل فهمك الأفضل ، دعني أقسم المفاهيم إلى ما يلي.

  • اتصالات الحاويات والحاويات
  • خدمات
  • توصيل الخدمات الخارجية عبر شبكة الدخول

اتصالات الحاويات والحاويات

قبل أن أخبرك كيف تتواصل البودات ، دعني أقدم لك ما هي القرون؟

القرون

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

الآن ، اسمحوا لي أن أقدم لكم كيف تتواصل هذه القرون؟

هناك نوعان من الاتصالات. ال الاتصال بين العقدة و ال الاتصال داخل العقدة.

لذا ، فلنبدأ بالاتصال داخل العقدة ، ولكن قبل ذلك اسمحوا لي أن أقدم لكم مكونات شبكة pod.

داخل العقدة تحت الشبكة

شبكة pod intra-node هي في الأساس الاتصال بين عقدتين مختلفتين على نفس الحجرة. دعني أشرح لك بمثال.

افترض أن الحزمة تنتقل من pod1 إلى pod2.

  • تغادر الحزمة شبكة Pod 1 في eth0 وتدخل شبكة الجذر في veth0
  • بعد ذلك ، تمر الحزمة إلى جسر Linux (cbr0) الذي يكتشف الوجهة باستخدام طلب ARP
  • لذلك ، إذا كان لدى veth1 عنوان IP ، يعرف الجسر الآن مكان إعادة توجيه الحزمة.

الآن ، اسمحوا لي بالمثل أن أخبركم عن الاتصال بين العقدة.

هل أنت مهتم بتعلم Kubernetes؟
بين العقدة تحت الشبكة

ضع في اعتبارك عقدتان لهما مساحات أسماء مختلفة للشبكة وواجهات شبكة وجسر Linux.

الآن ، افترض أن الحزمة تنتقل من pod1 إلى pod4 الموجود على عقدة مختلفة.

  • تترك الحزمة شبكة pod 1 وتدخل شبكة الجذر في veth0
  • ثم تمرر الحزمة إلى جسر Linux (cbr0) الذي تتمثل مسؤوليته في تقديم طلب ARP للعثور على الوجهة.
  • بعد أن يدرك الجسر أن هذا الكبسولة لا يحتوي على عنوان الوجهة ، تعود الحزمة إلى واجهة الشبكة الرئيسية eth0.
  • تغادر الحزمة الآن العقدة 1 للعثور على وجهتها على العقدة الأخرى وتدخل جدول التوجيه الذي يوجه الحزمة إلى العقدة التي تحتوي كتلة CIDR الخاصة بها على pod4.
  • لذا ، تصل الحزمة الآن إلى node2 ثم يأخذ الجسر الحزمة التي تقدم طلب ARP لمعرفة أن IP ينتمي إلى veth0.
  • أخيرًا ، تعبر الحزمة زوج الأنابيب وتصل إلى pod4.

هذه هي الطريقة التي تتواصل بها القرون مع بعضها البعض. الآن ، دعنا ننتقل ونرى كيف تساعد الخدمات في توصيل البودات.

إذن ، ما رأيك في الخدمات؟

خدمات

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

الآن ، هناك العديد من أنواع الخدمات التي تمنحك خيار الكشف عن خدمة خارج عنوان IP للمجموعة الخاصة بك.

أنواع الخدمات

هناك 4 أنواع رئيسية من الخدمات.

الكتلة IP: هذا هو نوع الخدمة الافتراضي الذي يعرض الخدمة على IP داخلي للكتلة بجعل الخدمة قابلة للوصول فقط داخل الكتلة.

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

LoadBalancer: هذا هو نوع الخدمة الذي يعرض الخدمة خارجيًا باستخدام موازن تحميل موفر السحابة. لذلك ، يتم إنشاء خدمات NodePort و ClusterIP تلقائيًا ، والتي سيتم توجيه موازن التحميل الخارجي إليها.

الاسم الخارجي : يقوم نوع الخدمة هذا بتعيين الخدمة لمحتويات الاسم الخارجي المجال عن طريق العودة أ CNAME سجل بقيمته.

إذن ، يا رفاق كان كل شيء عن الخدمات. الآن ، قد تتساءل كيف تتصل الخدمات الخارجية بهذه الشبكات بشكل صحيح؟

حسنًا ، هذا ليس إلا شبكة الدخول .

شبكة الدخول

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

الآن ، اسمحوا لي أن أشرح لكم عمل شبكة الدخول بمثال.

لدينا عقدتان ، بهما مساحات أسماء شبكات pod و root مع جسر Linux. بالإضافة إلى ذلك ، لدينا أيضًا جهاز إيثرنت افتراضي جديد يسمى flannel0 (مكون إضافي للشبكة) مضاف إلى شبكة الجذر.

الآن ، نريد أن تتدفق الحزمة من pod1 إلى pod 4.

  • لذلك ، تترك الحزمة شبكة pod1 في eth0 وتدخل شبكة الجذر في veth0.
  • ثم يتم تمريره إلى cbr0 ، مما يجعل طلب ARP للعثور على الوجهة وبعد ذلك يكتشف أنه لا يوجد أحد في هذه العقدة لديه عنوان IP الوجهة.
  • لذلك ، يرسل الجسر الحزمة إلى flannel0 حيث يتم تكوين جدول مسار العقدة باستخدام flannel0.
  • الآن ، يتحدث عفريت الفانيل إلى خادم واجهة برمجة التطبيقات الخاص بـ Kubernetes لمعرفة جميع عناوين IP الخاصة بالـ pod والعقد الخاصة بها لإنشاء تعيينات لبودات IPs لعقد IPs.
  • يلف المكوِّن الإضافي للشبكة هذه الحزمة في حزمة UDP برؤوس إضافية تُغيِّر عناوين IP المصدر والوجهة إلى العقد الخاصة بها ويرسل هذه الحزمة عبر eth0.
  • الآن ، نظرًا لأن جدول التوجيه يعرف بالفعل كيفية توجيه حركة المرور بين العقد ، فإنه يرسل الحزمة إلى العقدة الوجهة 2.
  • تصل الحزمة إلى eth0 من العقدة 2 وتعود إلى flannel0 لإزالة الكبسولة وإرسالها مرة أخرى في مساحة اسم شبكة الجذر.
  • مرة أخرى ، يتم إعادة توجيه الحزمة إلى جسر Linux لتقديم طلب ARP لاكتشاف عنوان IP الذي ينتمي إلى veth1.
  • تعبر الحزمة أخيرًا شبكة الجذر وتصل إلى الوجهة Pod4.

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

الآن ، بعد أن أخبرتكم كثيرًا عن Kubernetes Networking ، دعوني أريكم دراسة حالة واقعية.

دراسة حالة: معالج الثروة باستخدام شبكة Kubernetes

Wealth Wizards عبارة عن منصة للتخطيط المالي عبر الإنترنت تجمع بين التخطيط المالي وتكنولوجيا البرامج الذكية لتقديم مشورة الخبراء بتكلفة معقولة.

التحديات

الآن ، كان من المهم للغاية أن تكتشف الشركة نقاط الضعف في التعليمات البرمجية بسرعة والقضاء عليها مع الرؤية الكاملة لبيئتها السحابية ولكنها أرادت التحكم في حركة المرور من خلال قيود الوصول.

لذلك ، استخدموا البنية التحتية لـ Kubernetes لإدارة توفير المجموعات وإطلاقها بمساعدة الأدوات لإدارة نشر وتكوين الخدمات المصغرة عبر مجموعات Kube.

كما استخدموا ميزة سياسة الشبكة في Kubernetes للسماح لهم بالتحكم في حركة المرور من خلال قيود الوصول.

الآن ، كانت المشكلة أن هذه السياسات موجهة نحو التطبيق ولا يمكن أن تتطور إلا مع التطبيقات ، ولكن ، لم يكن هناك مكون لفرض هذه السياسات.

لذلك ، كان الحل الوحيد الذي يمكن أن تجده الشركة لهذا هو استخدام مكون إضافي للشبكة ، ومن ثم بدأوا في استخدام Weave Net.

المحلول

ينشئ هذا المكون الإضافي للشبكة شبكة افتراضية بها وحدة تحكم في سياسة الشبكة لإدارة وإنفاذ القواعد في Kubernetes. ليس هذا فحسب ، بل إنه يربط أيضًا حاويات Docker عبر مضيفين متعددين ويتيح اكتشافهم التلقائي.

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

الآن ، مع نشره على كل عقدة Kubernetes ، يدير المكون الإضافي توجيه inter-pod ولديه حق الوصول لمعالجة قواعد IPtables. بعبارات بسيطة ، يتم تحويل كل سياسة إلى مجموعة من قواعد IPtables ، منسقة ومهيأة عبر كل جهاز لترجمة علامات Kubernetes.

حسنًا ، الآن بعد أن مررت بالكثير من النظريات حول شبكة Kubernetes ، دعني أوضح لك كيف يتم ذلك عمليًا.

تشابك الايدى

لذا ، مع افتراض أنكم جميعًا قد قاموا بتثبيت Kubernetes على أنظمتكم ، لدي سيناريو لعرضه.

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

ماذا عن تنفيذ المثال المذكور أعلاه عمليا.

هيا بنا نبدأ!

الخطوة 1: قم بإنشاء مجلد في الدليل الذي تريده وقم بتغيير مسار دليل العمل إلى هذا المجلد.

mkdir HandsOn cd HandsOn /

الخطوة 2: الآن قم بإنشاء ملفات YAML للنشر لتطبيق الويب وقاعدة بيانات MySQL.

الخطوه 3: بمجرد إنشاء ملفات النشر ، انشر كلا التطبيقين.

kubectl تطبيق -f webapp.yml kubectl تطبيق -f mysql.yml

الخطوة 3.1: تحقق من كل من عمليات النشر.

kubectl الحصول على النشر

الخطوة الرابعة: الآن ، عليك إنشاء خدمات لكلا التطبيقين.

kubectl تطبيق -f webservice.yml kubectl تطبيق -f sqlservice.yml

الخطوة 4.1: بمجرد إنشاء الخدمات ، انشر الخدمات.

الخطوة 4.2: تحقق مما إذا تم إنشاء الخدمات أم لا.

kubectl الحصول على الخدمة

الخطوة الخامسة: الآن ، تحقق من تكوين البودات قيد التشغيل.

kubectl الحصول على القرون

الخطوة السادسة: انتقل إلى الحاوية داخل جراب الويب.

kubectl exec -it container_id bash nano var / www / html / index.php

الخطوة 6.1 : الآن ، قم بتغيير ملف اسم الخادم $ من المضيف المحلي إلى اسم خدمة SQL وهو ' webapp-sql1 'في هذه الحالة ، و كلمة المرور $ من الى ' إديوريكا '. أيضًا ، املأ جميع تفاصيل قاعدة البيانات المطلوبة واحفظ ملف index.php الخاص بك باستخدام اختصار لوحة المفاتيح Ctrl + x وبعد ذلك اضغط ص للحفظ والضغط أدخل .

الخطوة السابعة: الآن ، انتقل إلى حاوية MySQL الموجودة في الكبسولة.

kubectl exec it container_id bash

الخطوة 7.1: احصل على حق الوصول لاستخدام حاوية MySQL.

mysql -u الجذر -p edureka

حيث تمثل -u المستخدم و- p هي كلمة مرور جهازك.

الخطوة 7.2: قم بإنشاء قاعدة بيانات في MySQL والتي سيتم استخدامها للحصول على البيانات من تطبيق الويب.

إنشاء قاعدة بيانات تفاصيل المنتج

الخطوة 7.3: استخدم قاعدة البيانات التي تم إنشاؤها.

استخدم تفاصيل المنتج

الخطوة 7.4: قم بإنشاء جدول في قاعدة البيانات هذه في MySQL والذي سيتم استخدامه للحصول على البيانات من تطبيق الويب.

CREATE TABLE products (product_name VARCHAR (10)، product_id VARCHAR (11))

الخطوة 7.5: الآن ، اخرج من حاوية MySQL أيضًا باستخدام الأمر خروج .

الخطوة الثامنة: تحقق من رقم المنفذ الذي يعمل عليه تطبيق الويب الخاص بك.

kubectl الحصول على الخدمات

الخطوة 8.1: الآن ، افتح تطبيق الويب على رقم المنفذ المخصص له.

الخطوة 9: بمجرد النقر فوق إرسال الاستعلام ، انتقل إلى العقدة التي تعمل فيها خدمة MySQL ثم انتقل إلى داخل الحاوية.

سيُظهر لك هذا ناتج جميع منتجات القائمة ، التي قمت بملء التفاصيل الخاصة بها.

هل أنت مهتم بتعلم Kubernetes؟

إذا وجدت مدونة Kubernetes Networking هذه ذات صلة ، فراجع ملف من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم.