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