הגדרת מדיניות רשת מרובת רשתות

בדף הזה מוסבר איך לשפר את אבטחת הרשת ואת בקרת התעבורה באשכול, על ידי הגדרת מדיניות רשת ב-Kubernetes לכמה רשתות שחלים באופן ספציפי על רשת Pod ייעודית. מדיניות רשת ב-Kubernetes של רשתות מרובות שולטים בתעבורת נתונים באמצעות כללי חומת אש ברמת ה-Pod, והם שולטים בזרימת הנתונים בין Pods ושירותים.

כדי להבין איך פועלות מדיניות רשת מרובת רשתות, אפשר לקרוא על האופן שבו פועלת מדיניות רשת ב-Kubernetes עם רשתות Pod.

דרישות

כדי להשתמש במדיניות רשת בכמה רשתות, צריך לעמוד בדרישות הבאות:

  • ‫Google Cloud CLI מגרסה 459 ואילך.
  • צריך להיות לכם אשכול GKE שפועל באחת מהגרסאות הבאות:
    • ‫1.28.5-gke.1293000 ואילך
    • ‫1.29.0-gke.1484000 ואילך
  • באשכול צריך להשתמש ב-GKE Dataplane V2.

מגבלות

אין תמיכה במדיניות רשת ב-Kubernetes של FQDN ובמדיניות רשת ב-Kubernetes של CiliumClusterWide: אם אתם משתמשים במדיניות רשת ב-Kubernetes של FQDN ובמדיניות רשת ב-Kubernetes של CiliumClusterWide בפוד שמחובר לכמה רשתות, כללי המדיניות משפיעים על כל החיבורים של הפוד, כולל חיבורים שבהם כללי המדיניות לא חלים.

הגדרת מדיניות רשת ב-Kubernetes לרשתות מרובות

כדי להשתמש במדיניות רשת מרובת רשתות:

  1. יוצרים אשכול עם GKE עם הפעלה של כמה רשתות .
  2. יוצרים מאגר צמתים ורשת Pod.
  3. הפניה לרשת Pod.
  4. יוצרים מדיניות רשת ב-Kubernetes שתאכוף את אותה רשת Pod שבה נעשה שימוש בעומס העבודה.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-Google Cloud CLI למשימה הזו, מתקינים ואז מאתחלים את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

יצירת מדיניות רשת ב-Kubernetes

  1. כדי ליצור מדיניות רשת שאוכפת כללים על אותה רשת Pod כמו של עומס העבודה, צריך להפנות לרשת ה-Pod הספציפית בהגדרה של מדיניות הרשת.

  2. כדי להגדיר את כללי תעבורת נתונים נכנסת (ingress) שנבחרו ולטרגט Pods על סמך תוויות או סלקטורים אחרים, יוצרים מדיניות רשת ב-Kubernetes רגילה.

    שומרים את המניפסט לדוגמה הבא בתור sample-ingress-network-policy1.yaml:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: sample-network-policy
      namespace: default
      annotations:
        networking.gke.io/network: blue-pod-network  # GKE-specific annotation for network selection
    spec:
      podSelector:
        matchLabels:
          app: test-app-2  # Selects pods with the label "app: test-app-2"
      policyTypes:
      - Ingress  # Specifies the policy applies only to incoming traffic
      ingress:
      - from:  # Allow incoming traffic only from...
        - podSelector:
            matchLabels:
              app: test-app-1  # ...pods with the label "app: test-app-1"
    
  3. מחילים את המניפסט sample-ingress-network-policy1.yaml:

    kubectl apply -f sample-ingress-network-policy1.yaml
    
  4. כדי להגדיר את כללי תעבורת הנתונים היוצאת (egress) שנבחרו ולטרגט ל-Pods על סמך תוויות או סלקטורים אחרים, יוצרים מדיניות רשת ב-Kubernetes רגילה.

    שומרים את קובץ המניפסט לדוגמה הבא בשם sample-egress-network-policy2.yaml:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: sample-network-policy-2
      namespace: default
      annotations:
        networking.gke.io/network: blue-pod-network  # GKE-specific annotation (optional)
    spec:
      podSelector:
        matchLabels:
          app: test-app-2
      policyTypes:
        - Egress  # Only applies to outgoing traffic
      egress:
        - to:
            - podSelector:
                matchLabels:
                  app: test-app-3
    
  5. החלת מניפסט sample-egress-network-policy2.yaml:

    kubectl apply -f sample-egress-network-policy2.yaml
    

פתרון בעיות במדיניות רשת ב-Kubernetes של רשתות מרובות

אם נתקלתם בבעיות שקשורות למדיניות רשת ב-Kubernetes, בין אם היא חלה על רשתות Pod ספציפיות ובין אם לא, אתם יכולים לאבחן ולפתור את הבעיה באמצעות הפקודות הבאות:

  1. ‫kubectl get networkpolicy: מציג רשימה של כל אובייקטי המדיניות ברשת ומידע עליהם.
  2. ‫iptables-save: מאחזר ומציג רשימה של כל שרשראות הטבלאות של כתובות ה-IP עבור צומת מסוים. צריך להריץ את הפקודה הזו בצומת כמשתמש root.
  3. ‫cilium bpf policy get <endpoint-id>: מאחזר ומציג רשימה של כתובות IP מותרות ממפת המדיניות של כל נקודת קצה.
  4. ‫cilium policy selectors: מדפיס את הזהויות ואת המדיניות המשויכת שנבחרה.
  5. ‫cilium identity list: מציג מיפויים מזהות לכתובות IP.

המאמרים הבאים