בדף הזה מוסבר איך אפשר לשפר את אבטחת הרשת ואת בקרת התנועה באשכול על ידי הגדרת כללי מדיניות רשת מרובת רשתות שחלים באופן ספציפי על רשת Pod ייעודית. כללי המדיניות האלה לרשתות מרובות שולטים בתעבורה באמצעות כללי חומת אש ברמת ה-Pod, והם שולטים בזרימת התעבורה בין Pods לבין Services.
כדי להבין איך פועלות מדיניות רשת מרובת רשתות, אפשר לקרוא את המאמר איך פועלת מדיניות רשת עם רשתות Pod.
דרישות
כדי להשתמש במדיניות רשת מרובת רשתות, כדאי להביא בחשבון את הדרישות הבאות:
- גרסה 459 ואילך של Google Cloud CLI.
- צריך להפעיל אשכול GKE באחת מהגרסאות הבאות:
- 1.28.5-gke.1293000 ואילך
- 1.29.0-gke.1484000 ואילך
- באשכול צריך להשתמש ב-GKE Dataplane V2.
מגבלות
אין תמיכה במדיניות רשת FQDN ובמדיניות רשת CiliumClusterWide: אם משתמשים במדיניות רשת FQDN ובמדיניות רשת CiliumClusterWide ב-Pod שמחובר לכמה רשתות, המדיניות משפיעה על כל החיבורים של ה-Pod, כולל חיבורים שבהם המדיניות לא חלה.
הגדרת מדיניות רשת מרובת רשתות
כדי להשתמש במדיניות רשת מרובת רשתות:
- יוצרים אשכול עם GKE עם הפעלה של כמה רשתות .
- יוצרים מאגר צמתים ורשת Pod.
- הפניה לרשת Pod.
- יוצרים מדיניות רשת שתאכוף את אותה רשת Pod שבה נעשה שימוש בעומס העבודה.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
יצירת מדיניות רשת
כדי ליצור מדיניות רשת שמחילה כללים על אותה רשת Pod כמו עומס העבודה, צריך להפנות לרשת ה-Pod הספציפית בהגדרת מדיניות הרשת.
כדי להגדיר את כללי תעבורת הנתונים הנכנסת שנבחרו ולטרגט Pods על סמך תוויות או סלקטורים אחרים, יוצרים מדיניות רשת רגילה.
שומרים את קובץ המניפסט לדוגמה הבא בשם
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"החלת מניפסט
sample-ingress-network-policy1.yaml:kubectl apply -f sample-ingress-network-policy1.yamlכדי להגדיר את כללי התעבורה היוצאת שנבחרו ולטרגט Pods על סמך תוויות או סלקטורים אחרים, יוצרים מדיניות רשת רגילה.
שומרים את קובץ המניפסט לדוגמה הבא בשם
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החלת מניפסט
sample-egress-network-policy2.yaml:kubectl apply -f sample-egress-network-policy2.yaml
פתרון בעיות במדיניות רשת בכמה רשתות
אם נתקלים בבעיות במדיניות הרשת, בין אם היא חלה על רשתות Pod ספציפיות ובין אם לא, אפשר לאבחן ולפתור את הבעיה על ידי הפעלת הפקודות הבאות:
-
kubectl get networkpolicy: מציגה רשימה של כל האובייקטים של מדיניות הרשת ומידע עליהם. -
iptables-save: מאחזר ומציג רשימה של כל השרשראות של טבלאות כתובות ה-IP עבור צומת מסוים. צריך להריץ את הפקודה הזו בצומת כמשתמש root. -
cilium bpf policy get <endpoint-id>: מאחזר ומציג רשימה של כתובות IP מותרות ממפת המדיניות של כל נקודת קצה. -
cilium policy selectors: מדפיס את הזהויות ואת המדיניות המשויכת שנבחרה. -
cilium identity list: מציג מיפויים מזהות לכתובות IP.