شبكة الخدمات والشبكات لـ ML
سياسات الشبكة لأمان ML
3 دقيقة للقراءة
تتعامل منصات ML مع بيانات ونماذج حساسة تتطلب تقسيم شبكة صارم. توفر NetworkPolicies في Kubernetes مع سياسات تفويض Istio أماناً متعدد الطبقات لأعباء عمل ML.
بنية أمان شبكة ML
┌─────────────────────────────────────────────────────────────────────┐
│ طبقات أمان شبكة ML │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ الطبقة 1: Kubernetes NetworkPolicy (L3/L4) │ │
│ │ - قواعد اتصال pod-to-pod │ │
│ │ - عزل مساحات الأسماء │ │
│ │ - تحكم خروج قائم على CIDR │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ الطبقة 2: Istio AuthorizationPolicy (L7) │ │
│ │ - تفويض خدمة-إلى-خدمة │ │
│ │ - قواعد قائمة على طريقة/مسار HTTP │ │
│ │ - التحقق من JWT │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ الطبقة 3: تشفير mTLS │ │
│ │ - جميع حركة المرور مشفرة │ │
│ │ - هوية قائمة على الشهادة │ │
│ │ - تدوير تلقائي │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
سياسة الرفض الافتراضية
# رفض افتراضي لجميع الدخول/الخروج لمساحة اسم ML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: ml-serving
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
---
# السماح بـ DNS لجميع pods
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dns
namespace: ml-serving
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
ports:
- protocol: UDP
port: 53
سياسة شبكة خدمة الاستدلال
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: inference-service-policy
namespace: ml-serving
spec:
podSelector:
matchLabels:
app: inference-service
policyTypes:
- Ingress
- Egress
ingress:
# السماح من بوابة دخول Istio
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: istio-system
podSelector:
matchLabels:
istio: ingressgateway
ports:
- protocol: TCP
port: 8080
# السماح من خدمات الواجهة الأمامية
- from:
- namespaceSelector:
matchLabels:
app.kubernetes.io/part-of: ml-platform
podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 8080
# السماح بجمع Prometheus
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: monitoring
podSelector:
matchLabels:
app: prometheus
ports:
- protocol: TCP
port: 8082
egress:
# السماح لتخزين النماذج (S3/GCS)
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 443
# السماح لمخزن الميزات
- to:
- podSelector:
matchLabels:
app: feature-store
ports:
- protocol: TCP
port: 6566
عزل مهام التدريب
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: training-job-isolation
namespace: ml-training
spec:
podSelector:
matchLabels:
workload-type: training
policyTypes:
- Ingress
- Egress
ingress:
# السماح فقط من متحكم الخطوط
- from:
- podSelector:
matchLabels:
app: kubeflow-pipelines
ports:
- protocol: TCP
port: 2222
egress:
# السماح بـ NCCL للتدريب الموزع
- to:
- podSelector:
matchLabels:
workload-type: training
ports:
- protocol: TCP
port: 29500
- protocol: TCP
port: 29501
# السماح لتخزين البيانات
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- protocol: TCP
port: 2049 # NFS
- protocol: TCP
port: 443 # تخزين الكائنات
# السماح برفع القطع الأثرية
- to:
- podSelector:
matchLabels:
app: mlflow
ports:
- protocol: TCP
port: 5000
تفويض Istio لـ APIs ML
# المستخدمون المصادق عليهم فقط يمكنهم الوصول للاستدلال
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: inference-authz
namespace: ml-serving
spec:
selector:
matchLabels:
app: inference-service
action: ALLOW
rules:
# السماح بفحوصات الصحة بدون مصادقة
- to:
- operation:
methods: ["GET"]
paths: ["/health", "/ready", "/v2/health/*"]
# طلب JWT لنقاط نهاية الاستدلال
- from:
- source:
requestPrincipals: ["*"]
to:
- operation:
methods: ["POST"]
paths: ["/v1/models/*", "/v2/models/*"]
when:
- key: request.auth.claims[aud]
values: ["ml-inference-api"]
---
# تحديد المعدل لكل مستخدم
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: rate-limit-policy
namespace: ml-serving
spec:
selector:
matchLabels:
app: inference-service
action: CUSTOM
provider:
name: rate-limiter
rules:
- to:
- operation:
paths: ["/v1/models/*"]
تحكم الخروج لتنزيل النماذج
# السماح فقط بسجلات نماذج محددة
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: model-download-egress
namespace: ml-serving
spec:
podSelector:
matchLabels:
needs-model-access: "true"
policyTypes:
- Egress
egress:
# HuggingFace Hub
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 443
---
# Istio ServiceEntry للنطاقات المسموحة
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: allowed-model-registries
spec:
hosts:
- huggingface.co
- "*.huggingface.co"
- storage.googleapis.com
- "*.s3.amazonaws.com"
ports:
- number: 443
name: https
protocol: HTTPS
resolution: DNS
location: MESH_EXTERNAL
---
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
name: model-loader-sidecar
namespace: ml-serving
spec:
workloadSelector:
labels:
needs-model-access: "true"
egress:
- hosts:
- "istio-system/*"
- "./allowed-model-registries"
حماية البيانات الحساسة
# عزل pods معالجة PII
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: pii-processor-isolation
namespace: ml-sensitive
spec:
podSelector:
matchLabels:
data-classification: pii
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
pii-access: "true"
ports:
- protocol: TCP
port: 8080
egress:
# لا وصول للإنترنت لأعباء عمل PII
- to:
- podSelector: {}
ports:
- protocol: TCP
الدرس التالي: التوفر العالي والتعافي من الكوارث لخدمات ML. :::