الفصل 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