الـ pods تعمل، لكنّ الخدمة لا تستجيب. من أكثر مشكلات Kubernetes شيوعًا، وأسبابها محدودة وقابلة للفحص. درس تشخيص يبني على الخدمات.
المفتاح: نقاط النهاية (Endpoints)
الخدمة توجّه الترافيك إلى pods تطابق selector الخاصّ بها، وتُسجّلها كـ نقاط نهاية (Endpoints). أوّل فحص دائمًا:
kubectl get endpoints <اسم-الخدمة>
- إن كانت القائمة فارغة، فالخدمة لا تجد أي pod تخدمه — وهذا أصل معظم الأعطال.
- إن كانت ممتلئة، فالمشكلة غالبًا في المنافذ أو الشبكة لا في الربط.
الأسباب الشائعة وحلولها
- عدم تطابق التسميات (Selector):
selectorفي الخدمة لا يطابقlabelsالـ pods → لا نقاط نهاية. الحلّ: تأكّد من تطابق التسميات تمامًا. - منفذ خاطئ:
targetPortفي الخدمة لا يطابق المنفذ الذي تستمع عليه الحاوية فعلًا. الحلّ: طابقtargetPortمعcontainerPort. - الـ pods غير جاهزة: فحص الجاهزية (Readiness) يفشل، فتُستبعد الـ pods من نقاط النهاية. الحلّ: تأكّد أنّ فحص الجاهزية ينجح.
- نوع الخدمة: خدمة
ClusterIPلا يُوصَل إليها من خارج العنقود أصلًا. الحلّ: استخدم النوع المناسب أو Ingress للكشف الخارجي.
أدوات الفحص
kubectl describe service <اسم-الخدمة> # التسميات والمنافذ والنوع
kubectl get pods --show-labels # تسميات الـ pods للمقارنة مع الـ selector
منهجية التشخيص
get endpoints أوّلًا: فارغة → افحص تطابق التسميات وجاهزية الـ pods؛ ممتلئة → افحص المنافذ والنوع. عزل نقاط النهاية يقودك للسبب بسرعة.
الخطوات التالية
راجع الخدمات وفحوص الصحّة، وللكشف الخارجي الـ Ingress.