شبكة الخدمات والشبكات لـ 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. :::

اختبار

الوحدة 5: شبكة الخدمات والشبكات لـ ML

خذ الاختبار