انتقل إلى المحتوى الرئيسي

الفصل 9.3 - سياسات الشبكة

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • فهم ما هي سياسات الشبكة
  • إنشاء سياسات الشبكة لعزل الحركة
  • تكوين قواعد ingress و egress
  • استخدام selectors لاستهداف الـ Pods
  • تنفيذ تقسيم الشبكة
  • فهم القيود

مقدمة​

تسمح سياسات الشبكة بالتحكم في حركة الشبكة بين الـ Pods في عنقود Kubernetes. إنها توفر تقسيم الشبكة على مستوى التطبيق.


ما هي سياسة الشبكة؟​

تعرف سياسة الشبكة قواعد تتحكم في حركة الشبكة بين الـ Pods. إنها تسمح بـ:

  • السماح أو حظر حركة ingress (الواردة)
  • السماح أو حظر حركة egress (الصادرة)
  • التصفية حسب namespace، labels، أو IPs

مهم: تتطلب سياسات الشبكة CNI يدعمها (Calico، Cilium، إلخ).


السلوك الافتراضي​

بدون سياسة شبكة​

افتراضيًا: يمكن لجميع الـ Pods التواصل مع جميع الـ Pods الأخرى.

مع سياسة شبكة​

العزل: يُسمح فقط بالحركة المسموح بها.


مثال أساسي​

سياسة شبكة: عزل Namespace​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
namespace: production
spec:
podSelector: {} # جميع الـ Pods
policyTypes:
- Ingress
- Egress

النتيجة: لا يُسمح بأي حركة ingress أو egress في الـ namespace production.

سياسة شبكة: السماح بالحركة الداخلية​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-internal
namespace: production
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: production

النتيجة: يُسمح فقط بالحركة من الـ namespace production.


Selectors​

Pod Selector​

استهداف Pods محددة:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: app-network-policy
spec:
podSelector:
matchLabels:
app: web
tier: frontend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: api

النتيجة: يمكن للـ Pods التي تحتوي على app=web و tier=frontend استقبال الحركة فقط من الـ Pods التي تحتوي على app=api.

Namespace Selector​

استهداف namespaces:

spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
name: frontend

IP Block​

استهداف نطاقات IPs:

spec:
ingress:
- from:
- ipBlock:
cidr: 192.168.1.0/24
except:
- 192.168.1.100/32

مثال كامل: تطبيق متعدد الطبقات​

الهيكلية​

سياسة شبكة: Frontend​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: frontend-policy
namespace: frontend
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
- Egress
ingress:
- from: [] # السماح من أي مكان (الإنترنت عبر Ingress)
egress:
- to:
- namespaceSelector:
matchLabels:
name: backend
ports:
- protocol: TCP
port: 80

سياسة شبكة: Backend​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: backend-policy
namespace: backend
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: frontend
ports:
- protocol: TCP
port: 8080
egress:
- to:
- namespaceSelector:
matchLabels:
name: database
ports:
- protocol: TCP
port: 5432

سياسة شبكة: Database​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: database-policy
namespace: database
spec:
podSelector:
matchLabels:
app: postgres
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: backend
ports:
- protocol: TCP
port: 5432
egress: [] # لا يُسمح بأي حركة صادرة

المنافذ والبروتوكولات​

تحديد المنافذ​

spec:
ingress:
- ports:
- protocol: TCP
port: 80
- protocol: TCP
port: 443
- protocol: UDP
port: 53

نطاق المنفذ (حسب CNI)​

بعض CNI تدعم نطاقات المنافذ:

spec:
ingress:
- ports:
- protocol: TCP
port: 8000-8999

أوامر مفيدة​

الإدارة​

# إنشاء سياسة شبكة
kubectl apply -f network-policy.yaml

# عرض سياسات الشبكة
kubectl get networkpolicies
kubectl get netpol

# التفاصيل
kubectl describe networkpolicy frontend-policy

# عرض حسب namespace
kubectl get netpol -n production

الاختبار​

# اختبار الاتصال من Pod
kubectl exec -it test-pod -- curl http://api-service:8080

# عرض القواعد المطبقة (حسب CNI)
# Calico
calicoctl get networkpolicies

القيود​

1. دعم CNI​

ليست جميع CNI تدعم سياسات الشبكة:

  • تدعم: Calico، Cilium، Weave Net، Antrea
  • لا تدعم: Flannel (أساسي)

2. الأداء​

يمكن أن تؤثر سياسات الشبكة على الأداء حسب CNI.

3. التعقيد​

يمكن أن تصبح إدارة العديد من سياسات الشبكة معقدة.


أفضل الممارسات​

1. البدء التدريجي​

ابدأ بعزل الـ namespaces الحرجة، ثم التوسع.

2. التوثيق​

وثق قواعد الاتصال بين الخدمات.

3. الاختبارات​

اختبر سياسات الشبكة قبل تطبيقها في الإنتاج.

4. المراقبة​

راقب الاتصالات المحظورة لاكتشاف المشاكل.

5. الرفض الافتراضي​

استخدم سياسة "deny all" افتراضيًا، ثم السماح بشكل صريح.


ملخص​

في هذا الفصل، تعلمت:

سياسة الشبكة: التحكم في حركة الشبكة بين الـ Pods
السلوك الافتراضي: يمكن لجميع الـ Pods التواصل
Selectors: Pod، namespace، IP block
Ingress/Egress: قواعد للحركة الواردة والصادرة
المنافذ: تحديد المنافذ والبروتوكولات المسموح بها
حالات الاستخدام: تقسيم الشبكة، العزل متعدد الطبقات
القيود: يتطلب CNI متوافق
أفضل الممارسات: البدء التدريجي، الرفض الافتراضي، الاختبارات


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

الفصل 9.4: معايير أمان الـ Pod
المختبر 9.3: سياسات الشبكة المتقدمة


تم إنشاء الفصل في: ديسمبر 2024