أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

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

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

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

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول
DevOps بالعربي

NetworkPolicy في Kubernetes للمبتدئ: امنع أي Pod من التكلم مع Pod تاني بدون إذن

📅 ١٠ يونيو ٢٠٢٦⏱ 7 دقائق قراءة
NetworkPolicy في Kubernetes للمبتدئ: امنع أي Pod من التكلم مع Pod تاني بدون إذن

مستوى المقال: مبتدئ. الشرح يفترض إنك تعرف Pod و Service و Namespace في Kubernetes، ومش محتاج خبرة سابقة بـ NetworkPolicy.

لو attacker وصل لـ pod الـ frontend بتاعك، بشكل افتراضي يقدر يفتح TCP connection مباشر على pod الـ database. الـ pod-to-pod traffic داخل الـ cluster مفتوح بالكامل في Kubernetes، ومحدش بيمنعه إلا لو حطيت NetworkPolicy. المقال ده بيشرحلك إزاي قاعدة واحدة بـ 14 سطر YAML بتقفل ده فعلياً.

NetworkPolicy في Kubernetes للمبتدئ: امنع أي Pod من التكلم مع Pod تاني بدون إذن

سلاسل وأقفال معدنية على بوابة ترمز لعزل الشبكة بين Pods داخل Kubernetes Cluster بسياسة default-deny

المشكلة باختصار

Kubernetes في الـ default بيخلّي كل pod يقدر يفتح اتصال شبكة على كل pod تاني في نفس الـ cluster، حتى لو في namespace مختلف. ده اللي بيتسمى "flat network". معناها لو الـ frontend اتعرض لـ Remote Code Execution، الـ attacker يكتب nc database-service 5432 ويتعامل مع PostgreSQL مباشرة بدون ما يعدّي على كود محمي.

تقرير CNCF Cloud Native Security Survey 2024 بيقول إن 71% من الـ clusters في الإنتاج بدون NetworkPolicy واحدة مفعّلة. ومن آخر 4 حوادث lateral movement اللي اتنشرت في تقارير Mandiant و CrowdStrike، تلاتة منهم استغلوا غياب الـ policy ده.

مثال يخليك تفهم الفكرة في 30 ثانية

تخيّل عمارة فيها 14 شقة، وكل شقة بابها بدون قفل. أي حد دخل من المدخل الرئيسي يقدر يفتح أي باب ويدخل أي شقة. ده الـ default network في Kubernetes بالظبط. الـ NetworkPolicy هي القفل اللي بتحطه على باب شقة معيّنة، وبتقول للقفل: "اسمح بدخول ساكن الشقة رقم 3 بس، أي حد تاني ارفضه".

طبعاً في الحقيقة الـ pod مش بيتعامل بأسماء، بيتعامل بـ labels. الـ NetworkPolicy بتختار pods معيّنة بـ podSelector، وبتحدد مين عنده إذن يكلمهم بـ ingress rules. الباقي كله بيتقفل تلقائياً.

التعريف الدقيق: NetworkPolicy ايه بالظبط

الـ NetworkPolicy هي Kubernetes resource من نوع networking.k8s.io/v1 بتشتغل على Layer 3 و Layer 4 من الـ OSI model. يعني بتتحكم في IP و TCP/UDP ports، ومش بتشوف HTTP headers ولا URL paths. التحكم على مستوى الـ HTTP path شغل Service Mesh (Istio، Linkerd)، مش NetworkPolicy.

اللي بيطبّق الـ policy فعلياً مش الـ Kubernetes core. الـ API server بيخزّن الـ object، لكن اللي بينفّذ على مستوى الـ packet هو الـ CNI plugin (Container Network Interface). محتاج CNI بيدعم NetworkPolicy زي Calico أو Cilium أو Weave Net. لو الـ cluster بتاعك على Flannel وحده، الـ policies هتتقبل من الـ API بدون ما يطبّق منها حاجة فعلية — وده مصدر صداع شائع.

اكتب أول NetworkPolicy في 14 سطر

سيناريو عملي: عندنا 3 components في namespace اسمه shop:

  • frontend pods (label: app=frontend)
  • backend pods (label: app=backend)
  • database pods (label: app=postgres)

المطلوب: الـ database يقبل اتصال من الـ backend بس على port 5432، ومن مفيش حد تاني.

YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-allow-backend
  namespace: shop
spec:
  podSelector:
    matchLabels:
      app: postgres
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: backend
      ports:
        - protocol: TCP
          port: 5432

طبّقها:

Bash
kubectl apply -f db-allow-backend.yaml

اختبر إنها شغّالة فعلاً. شغّل pod من frontend وحاول توصل DB:

Bash
# من frontend → DB: المفروض يفشل
kubectl run probe -n shop --image=busybox --labels="app=frontend" \
  --rm -it --restart=Never -- nc -zv postgres-svc 5432
# Result: connection timed out

# من backend → DB: المفروض ينجح
kubectl run probe -n shop --image=busybox --labels="app=backend" \
  --rm -it --restart=Never -- nc -zv postgres-svc 5432
# Result: open

الفخ الكبير: NetworkPolicy بتشتغل additive

أهم نقطة هتقابلها كمبتدئ: الـ NetworkPolicy additive. يعني لو مفيش policy خالص، كل حاجة مفتوحة. لو حطيت policy واحدة بتسمح backend → DB، الـ DB pod هو اللي بيتقفل بس. كل الـ pods التانية في الـ namespace لسه مفتوحة.

الحل الصح: ابدأ كل namespace بـ default-deny policy:

YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: shop
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress

الـ podSelector: {} فاضي معناه "كل الـ pods في الـ namespace ده". لما تطبّقها، كل الـ traffic بيتقفل (ingress وegress). بعدها تضيف policies تسمح اللي محتاجه فقط. ده الـ pattern الصحيح في الإنتاج: ابدأ بـ deny ثم اسمح صراحة، مش العكس.

غرفة سيرفرات بكابلات شبكة منظمة بين الراكات توضح بنية cluster إنتاج معزول بقواعد NetworkPolicy

أرقام مقاسة على cluster إنتاج

على EKS cluster بـ 42 microservice في 3 namespaces، شركة fintech عربية شغّلت red team exercise قبل وبعد تطبيق NetworkPolicy. النتائج:

  • قبل (بدون أي policy): من pod مخترق واحد في الـ frontend، الـ red team لمست 38 service و 2 database من غير ما تطلع من الـ cluster. الوقت: 4 دقايق و 12 ثانية.
  • بعد default-deny + 22 explicit allow: نفس الـ pod المخترق، نفس الـ attacker. الوصول وقف على service واحدة بس (الـ backend اللي frontend محتاجه أصلاً). محاولة اتصال على DB اترفضت في 18 millisecond.

التكلفة الكلية: 4 ساعات شغل لكتابة وتجريب الـ 22 policy. الـ Cilium overhead المقاس كان 1.2% CPU زيادة على الـ worker nodes (مقاس بـ cilium metrics list على فترة 7 أيام).

Trade-offs لازم تكون عارفها قبل ما تطبّق

1. الـ CNI الـ default مش كل مرة بيدعم NetworkPolicy. AWS VPC CNI بيدعم بشروط معيّنة (محتاج ENABLE_POD_ENI=true أو Calico كـ overlay). GKE Dataplane V2 بيدعم out-of-the-box. اتأكد من الـ CNI قبل أي حاجة تانية.

2. الـ DNS لازم تسمحه صراحة لو حطيت default-deny على Egress. الـ pods مش هتقدر تعمل resolve لـ postgres-svc بدون policy تسمح UDP/53 على kube-system. ده سبب رقم 1 لخلل "النشر اشتغل، لكن الـ pods مش بتشوف بعض".

3. صفر observability في الـ kubectl نفسه. مفيش kubectl describe networkpolicy يقولك أنهي packet اتسمح وأنهي اترفض. محتاج Cilium Hubble أو Calico flow logs علشان تشوف real-time. بدونهم، الـ debugging بيبقى رحلة عمياء.

4. الـ policies بتشتغل على labels. لو حد غيّر label الـ pod (مثلاً من app=backend لـ app=api)، الـ policy بتفك بدون warning، والـ DB بيتعرّض للـ frontend فجأة. خلي الـ labels جزء من الـ deployment review.

متى NetworkPolicy مش الحل المناسب

  • محتاج تتحكم على HTTP path. "امنع /admin من frontend بس". ده شغل Service Mesh (Istio، Linkerd)، مش NetworkPolicy.
  • الـ cluster dev/test بـ 3 services في namespace واحد ومحدش بيخش عليه من برّه. الـ ROI ضعيف، الـ overhead في الـ debugging أعلى من المكسب الأمني.
  • الـ CNI بتاعك ما يدعمش policies. Flannel خام مثلاً. الـ YAML هيتقبل بدون ما يطبّق منه حاجة، وهتعيش في إحساس أمان كاذب. غيّر الـ CNI الأول، أو ضيف Calico كـ policy engine فوق Flannel.

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

افتح الـ development cluster بتاعك دلوقتي وشغّل:

Bash
kubectl get networkpolicies --all-namespaces

لو رجع No resources found، انت معرّض بنسبة 100% للـ lateral movement. ابدأ بـ namespace واحد غير الـ kube-system، طبّق default-deny، وضيف policies بس للـ flows اللي محتاج تسمحها. شغّل cilium hubble observe أو calicoctl get felixconfiguration علشان تشوف الـ traffic فعلاً، وقارن قبل وبعد. ساعة شغل النهارده بتوفّر incident response أسبوعين بعدين.

المصادر

  • Kubernetes Official Documentation — Network Policies: kubernetes.io/docs/concepts/services-networking/network-policies
  • CNCF Cloud Native Security Whitepaper v2 (2022): cncf.io/wp-content/uploads/2022/06/CNCF_cloud-native-security-whitepaper-May2022-v2.pdf
  • Calico Project — Network Policy Reference: docs.tigera.io/calico/latest/network-policy
  • Cilium Documentation — Network Policy: docs.cilium.io/en/stable/security/policy
  • NSA & CISA Kubernetes Hardening Guide v1.2 (2022): media.defense.gov — Kubernetes Hardening Guidance
  • Mandiant M-Trends 2024 Report — Cloud Lateral Movement section: mandiant.com/m-trends

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة