العودة إلى المدونة

خدمة Kubernetes DNS: دليل للمبتدئين

خدمة Kubernetes DNS: دليل للمبتدئين

Kubernetes، المعروف أيضًا باسم K8s، هو نظام مفتوح المصدر لتنسيق وإدارة الحاويات لأتمتة نشر التطبيقات المغلفة في حاويات وتوسيع نطاقها وإدارتها. إن قابليته للنقل ومرونته وقدراته على التوسع التلقائي تجعل منه نظامًا مستخدمًا على نطاق واسع. وقبل كل الميزات البارزة، فإن خيار إنشاء سجلات DNS للخدمات والـ pods يجعله لا يُعلى عليه مقارنة بأنظمة البرمجيات الأخرى. تتيح لك خدمة Kubernetes DNS الاتصال بالخدمات بأسماء DNS متسقة بدلاً من عناوين IP.

المتطلبات الأساسية

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

ما هو نظام DNS؟

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

في الإصدارات الأخيرة من Kubernetes، تغيرت التفاصيل الفنية لخدمة Kubernetes DNS. يهدف هذا البرنامج التعليمي إلى تقديم كل من تطبيقي kube-dns و CoreDNS لخدمة Kubernetes DNS. سنفهم سجلات Kubernetes DNS بالتفصيل ونوضح كيف يعمل Kubernetes DNS.

ما الذي تشتمل عليه خدمة Kubernetes DNS؟

سابقًا، كانت خدمة Kubernetes DNS تعتمد على kube-dns قبل إصدار النسخة 1.11. ومع ذلك، كان الأمان والخصوصية لا يزالان يشكلان مصدر قلق جدي. لاحقًا، قدم مجتمع Kubernetes نظام CoreDNS في الإصدار الجديد 1.11 لمعالجة مشكلات الأمان والاستقرار في kube-dns.

بغض النظر عن إصدار البرنامج الذي تستخدمه للتعامل مع سجلات DNS، فإن kube-dns و CoreDNS يعملان بطريقة مماثلة:

  • يتم إنشاء خدمة kube-dns وواحد أو أكثر من الـ pods.
  • تقوم خدمة kube-dns بمراقبة واجهة برمجة تطبيقات Kubernetes (API) بحثًا عن أحداث الخدمة ونقاط النهاية وتغيير إدخالات DNS الخاصة بها حسب الاقتضاء. عند تعديل خدمات Kubernetes هذه والـ pods المرتبطة بها بعمليات الإنشاء أو التعديل أو الحذف، يتم تشغيل هذه الأحداث تلقائيًا.
  • Kubelet بتعيين عنوان IP الخاص بالمجموعة لخدمة kube-dns لكل pod جديد في خيار etc/resolv.conf nameserver، إلى جانب إعدادات search المناسبة للسماح بأسماء مضيفين أقصر:
  • يمكن للتطبيقات المغلفة في حاويات بعد ذلك تحليل أسماء المضيفين مثل example-service.namespace إلى عنوان IP المناسب للمجموعة.

نظرة عامة على سجلات Kubernetes DNS

دعونا نفهم سجلات Kubernetes DNS بشكل أفضل بمساعدة مثال. سيبدو سجل DNS A الكامل لخدمة Kubernetes كما يلي:

service.namespace.svc.cluster.local

سيكون لدى الـ pod سجل بهذا التنسيق، والذي يمثل عنوان IP الحقيقي للـ pod:

10.32.0.125.namespace.pod.cluster.local

بالإضافة إلى ذلك، يتم إنشاء سجلات SRV للمنافذ المحددة لخدمة Kubernetes:

ونتيجة لذلك، قد يطلب تطبيقك أو خدمتك المصغرة (microservice) اسم مضيف بسيطًا ومتسقًا للوصول إلى الخدمات أو الـ pods الأخرى في المجموعة، وذلك بفضل آلية اكتشاف الخدمة المدمجة القائمة على DNS.

تحليل أسماء المضيفين الأقصر والبحث في النطاقات

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

أضف other-service إلى الاستعلام إذا كانت الخدمة في مساحة اسم مختلفة:

ستحتاج إلى استخدام ما يلي على الأقل إذا كنت تحاول الوصول إلى pod:

فقط .svc يتم إكمال لواحقها تلقائيًا في ملف resolv.conf الافتراضي. لذلك، من الضروري تحديد الإعدادات حتى .pod. بعد ذلك، دعنا ننتقل إلى تفاصيل تطبيقي DNS البديلين لـ Kubernetes اللذين تعرفنا عليهما حتى الآن.

تطبيق DNS في Kubernetes

وفر إصدار Kubernetes 1.11 برنامجًا جديدًا لإدارة خدمة kube-dns ، كما هو مذكور في القسم السابق. وكان السبب الرئيسي وراء التحديث الجديد هو تحسين أداء الخدمة وأمانها. فلنبدأ بدمج kube-dns من البداية.

  1. kube-dns

في إصدار Kubernetes 1.11 السابق، كانت خدمة kube-dns تحتوي على ثلاث حاويات تعمل في kube-dns pod في مساحة اسم kube-system . ألقِ نظرة على الحاويات الثلاث أدناه:

  • kube-dns: حاوية تقوم بتشغيل SkyDNS وتعمل كخدمة لحل استعلامات DNS.
  • dnsmasq: يتم تخزين ردود SkyDNS مؤقتًا بواسطة dnsmasq، وهو برنامج حل وتخزين مؤقت خفيف وشائع لـ DNS.
  • sidecar: حاوية جانبية للخدمة تقوم بتقديم تقارير المقاييس والاستجابة لفحوصات السلامة.

تم إنشاء CoreDNS نتيجة للثغرات الأمنية في Dnsmasq ومخاوف أداء القابلية للتوسع في SkyDNS.

  1. CoreDNS

كخدمة DNS جديدة لـ Kubernetes، تمت ترقية CoreDNS إلى الإتاحة العامة (General Availability) في Kubernetes 1.11. وهذا يعني أنها جاهزة للإنتاج وسيتم استخدامها من قبل العديد من أدوات التثبيت ومزودي Kubernetes المدارين كخدمة DNS الافتراضية للمجموعة.

إن CoreDNS هو خادم DNS مرن وقابل للتوسيع يعمل كـ DNS لمجموعة Kubernetes. وهو يؤدي جميع وظائف النظام السابق. وتكون حاوية DNS مسؤولة عن حل استعلامات DNS وتخزينها مؤقتًا. يستجيب CoreDNS لفحوصات السلامة ويوفر المقاييس في حاوية واحدة. بالإضافة إلى ذلك، فإنه يعالج بعض العيوب الطفيفة ويوفر قدرات جديدة لحل مشكلات الأداء والأمان:

  • تم حل بعض التعارضات بين استخدام stubDomains والخدمات الخارجية.
  • من خلال جعل ترتيب إرجاع بعض المدخلات عشوائيًا، يمكن لـ CoreDNS تحسين موازنة التحميل المستندة إلى DNS بطريقة round-robin load balancing.
  • من خلال كونه أفضل في تكرار المرور على كل من لواحق نطاق البحث المحددة في resolv.conf، يمكن لميزة تسمى autopath تحسين أوقات استجابة DNS عند حل أسماء المضيفين الخارجية.
  • حتى لو لم يكن الـ pod موجودًا، فإن kube-dns 10.32.0.125.namespace.pod.cluster.local سيقوم دائمًا بالتحليل إلى 10.32.0.125. يقدم CoreDNS وضع التحقق من صحة الـ pods والذي لن يقوم بالتحليل إلا إذا كان الـ pod الذي يحتوي على عنوان IP ومساحة الاسم الصحيحين موجودًا.

لتطوير معرفتك بـ Kubernetes endpoints, autopaths، و wildcards، راجع درسًا تعليميًا حول كيفية Kubernetes تمكين قراءة بيانات المنطقة من مجموعتها.

ميزات التخصيص

يتيح لك Kubernetes تكوين pods الخاصة بـ DNS وتخصيص حل DNS للمجموعة، وذلك بفضل خدمة customizing DNS service. يمكن للمسؤولين الاستفادة من هذه الخدمات لتغيير خوادم الأسماء الرئيسية أو لواحق نطاق البحث المحددة في resolv.conf. وقبل كل شيء، هناك ميزة إضافية لتخصيص الـ pods والحاويات باستخدام خيار dnsConfig :

Kubernetes DNS Demo Pod Yaml

سيؤدي تحديث هذا التكوين إلى فرض إعادة كتابة ملف resolv.conf الخاص بالـ pod، مما يسمح بتطبيق التغييرات. سيؤدي الإعداد أعلاه إلى إنشاء ملف يحتوي على سطور nameserver 203.0.113.44 و search custom.dns.local ، والتي تنتقل مباشرة إلى خيارات resolv.conf العادية.

الخاتمة

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

لتطوير معرفتك بـ DevOps والتعمق في أساسيات Kubernetes، تحقق من البرامج التعليمية التالية من مدونتنا:

حوسبة سعيدة!

author

Pranay Kapgate

المؤلف · CloudSigma

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

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.