DNS واكتشاف الخدمات
افهموا كيف تعثر Pods على بعضها باستخدام DNS المدمج في Kubernetes، وكيف يعمل اكتشاف الخدمات داخليًا
DNS واكتشاف الخدمات درس مجاني في DevOps Bootcamp على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في DevOps Bootcamp، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
مشكلة اكتشاف الخدمات
تأتي Pods وتختفي، وتتغير عناوين IP الخاصة بها باستمرار. وسيؤدي تثبيت عناوين IP في الشيفرة إلى تعطلها فوراً. يحل Kubernetes هذه المشكلة باستخدام اكتشاف الخدمات القائم على DNS.
فبدلاً من استخدام عنوان IP، تتصل باسم ثابت.
DNS الخاص بالمجموعة
تشغّل كل مجموعة خدمة DNS (عادةً CoreDNS). وتنشئ هذه الخدمة سجلات DNS تلقائياً لـ Services وPods، بحيث تُحل الأسماء إلى ClusterIP الصحيح.
أسماء DNS الخاصة بـ Service
تحصل Service على اسم DNS وفق نمط يمكن التنبؤ به:
service-name.namespace.svc.cluster.local
يمكنك داخل namespace نفسها استخدام الاسم المختصر service-name فقط.
# from a Pod in the same namespace
curl http://payment-service:8080
# fully qualified, from any namespace
curl http://payment-service.shop.svc.cluster.local:8080مساحات الأسماء والتسمية
تُعد namespace جزءاً من الاسم. وللوصول إلى Service في namespace أخرى، أدرجها في الاسم: service.namespace.
# Pod in 'frontend' namespace calling 'backend' namespace
curl http://api.backend.svc.cluster.localاختبار DNS من داخل Pod
يمكنك تشغيل Pod مؤقت لاختبار حل الأسماء.
kubectl run dnstest --image=busybox:1.36 --rm -it --restart=Never -- nslookup payment-serviceكيف يحل CoreDNS الأسماء
عندما يطلب Pod اسماً، يذهب الطلب إلى CoreDNS. ويبحث CoreDNS عن Service المطابقة ويعيد ClusterIP الخاص بها. أما بالنسبة إلى Services عديمة الرأس، فيعيد عناوين IP الخاصة بـ Pods مباشرةً.
Services عديمة الرأس
تتجاوز Service عديمة الرأس (clusterIP: None) عنوان IP الافتراضي الواحد. وبدلاً من ذلك، يعيد DNS عناوين IP الفردية الخاصة بـ Pods، وهو أمر ضروري للتطبيقات ذات الحالة التي تتعامل مع Pods مباشرةً.
apiVersion: v1
kind: Service
metadata:
name: db
spec:
clusterIP: None
selector:
app: db
ports:
- port: 5432سجلات DNS الخاصة بـ Pod
مع Service عديمة الرأس، يمكن أن يحصل كل Pod داعم أيضاً على سجل DNS خاص به، وهو مفيد لـ StatefulSets التي تملك Pods فيها هويات ثابتة مثل db-0 وdb-1.
# stable per-Pod name in a StatefulSet
curl http://db-0.db.default.svc.cluster.local:5432فحص resolv.conf الخاص بـ Pod
يحقن Kubernetes إعدادات DNS في كل Pod. وتسمح نطاقات البحث بحل الأسماء المختصرة بشكل صحيح.
kubectl exec -it mypod -- cat /etc/resolv.conf
# nameserver 10.96.0.10
# search default.svc.cluster.local svc.cluster.local cluster.localمتغيرات البيئة في مقابل DNS
يحقن Kubernetes أيضاً معلومات الاتصال بـ Service كمتغيرات بيئة، ولكن فقط للخدمات الموجودة عند بدء Pod. ويُفضَّل DNS لأنه يعكس الحالة الحالية دائماً.
أخطاء DNS الشائعة
- نسيان namespace عند استدعاء خدمة عبر مساحات أسماء مختلفة
- توقع توفر DNS لـ Service لا تملك Pods مطابقة (لا توجد نقاط نهاية)
- تخزين عناوين IP قديمة مؤقتاً في التطبيق بدلاً من إعادة حل الاسم
تحقق سريع
اختر التنسيق الصحيح لاسم DNS.
مراجعة
تعلّمت أن Kubernetes يستخدم CoreDNS لمنح Services أسماء DNS ثابتة وفق النمط service.namespace.svc.cluster.local. وتعمل الأسماء المختصرة داخل namespace، بينما تعرض Services عديمة الرأس عناوين IP الفردية الخاصة بـ Pods، ويعكس DNS حالة المجموعة الحالية دائماً.
الأسئلة الشائعة
هل درس «DNS واكتشاف الخدمات» مجاني؟
نعم — نص درس «DNS واكتشاف الخدمات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة DevOps Bootcamp، انتقل إلى CoddyKit PRO. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
ماذا ستتعلم في «DNS واكتشاف الخدمات»؟
افهموا كيف تعثر Pods على بعضها باستخدام DNS المدمج في Kubernetes، وكيف يعمل اكتشاف الخدمات داخليًا تتمرن على DevOps Bootcamp مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ DevOps Bootcamp؟
لا تُشترط خبرة سابقة. DevOps Bootcamp على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «DNS واكتشاف الخدمات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس DevOps Bootcamp هذا؟
نعم. كل درس في DevOps Bootcamp يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إتاحة التطبيقات باستخدام Services
- أنواع Service: ClusterIP وNodePort وLoadBalancer
- Ingress للوصول الخارجي
- DNS واكتشاف الخدمات