התכונה 'ריבוי רשתות' ב-GKE מאפשרת לחבר את עומסי העבודה לכמה רשתות VPC. אפשר לחשוף את ה-Pods האלה עם כמה רשתות ללקוחות פנימיים או חיצוניים באמצעות שירות Kubernetes של type: LoadBalancer.
פלטפורמת GKE מקצה מאזן עומסים Google Cloud L4 לשירות ששולח תעבורת נתונים ל-Pods ברשת משנית ספציפית.
במאמר הזה מוסבר איך GKE מטמיע LoadBalancer שירותים
ל-Pods בכמה רשתות. המאמר כולל את ההגדרה הנדרשת, היכולות והמגבלות של התכונה.
איך פועלים שירותים של מאזני עומסים ברשתות מרובות
כדי לחשוף עומס עבודה מרובה רשתות, יוצרים Service של type:
LoadBalancer. השירות הזה צריך לכלול סלקטור מיוחד שמטרגט Pods על סמך הרשת של הממשק המשני שלהם. מוסיפים גם הערה כדי לציין אם ליצור מאזן עומסים פנימי או חיצוני.
התווית networking.gke.io/network בבורר מסננת את נקודות הקצה לפי רשת. כך מאזן העומסים שולח תנועת נתונים רק לממשקי ה-Pod שמחוברים לרשת שצוינה.
שירות Internal LoadBalancer
כדי ליצור מאזן עומסים פנימי, מוסיפים את ההערה networking.gke.io/load-balancer-type: "Internal" למניפסט של Service. בדוגמה הבאה מוצג שירות שיוצר מאזן עומסים פנימי כדי לטרגט פודים ברשת dmz:
apiVersion: v1
kind: Service
metadata:
name: web-app-internal-lb
namespace: default
annotations:
networking.gke.io/load-balancer-type: "Internal"
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
networking.gke.io/network: dmz
app: web-app
type: LoadBalancer
שירות LoadBalancer חיצוני
כדי ליצור מאזן עומסים חיצוני של רשת שמבוסס על שירות קצה עורפי, מוסיפים את ההערה cloud.google.com/l4-rbs: enabled למניפסט של השירות. בדוגמה הבאה מוצג שירות שיוצר מאזן עומסים חיצוני כדי לטרגט פודים ברשת dmz:
apiVersion: v1
kind: Service
metadata:
name: web-app-external-lb
namespace: default
annotations:
cloud.google.com/l4-rbs: enabled
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
networking.gke.io/network: dmz
app: web-app
type: LoadBalancer
הגדרת ה-Pod והרשת
ל-Pods צריך להיות ממשק ברשת שהשירות LoadBalancer מכוון אליה. בנוסף, צריך להגדיר ניתוב בתוך ה-Pod כדי שהוא יוכל להגיב נכון לבקשות בממשק הרשת המתאים.
אפשר להגדיר ניתוב של Pod באחת מהדרכים הבאות:
הגדרת ממשק ברירת מחדל: משתמשים בהערה
networking.gke.io/default-interfaceב-Pod כדי להגדיר את ממשק הרשת המשני כנתיב ברירת המחדל.הגדרת ניתוב מבוסס-מדיניות: משתמשים ב-
initContainerעם היכולתNET_ADMINכדי להגדיר כללי ניתוב בתוך ה-Pod.
בדוגמה הבאה מוצג מניפסט Deployment של Pods עם ממשק ברשת dmz. ההערה networking.gke.io/default-interface מגדירה את הממשק dmz (eth1) כנתיב ברירת המחדל.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
labels:
app: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
annotations:
networking.gke.io/default-interface: 'eth1'
networking.gke.io/interfaces: |-
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName": "eth1","network": "dmz"}
]
spec:
containers:
- name: whereami
image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1
ports:
- containerPort: 8080
אימות של נקודות קצה בכמה רשתות
ב-GKE נעשה שימוש בבקר ייעודי, multinet-endpointslice-controller.gke.io, כדי לנהל נקודות קצה של שירותים בכמה רשתות. בקר זה יוצר אובייקטים של EndpointSlice עבור שירותים מרובי רשתות. כתובות ה-IP באובייקטים האלה של EndpointSlice שייכות לרשת המשנית שצוינה בכלי לבחירת שירותים.
אם למאזן העומסים אין קצה עורפי תקין, בודקים את EndpointSlice של השירות כדי לוודא שהבקר בחר את כתובות ה-IP הנכונות של ה-Pod. אם ל-EndpointSlice אין נקודות קצה, צריך לוודא שהתוויות של בורר השירות תואמות ל-Pods הפועלים, ושהבורר networking.gke.io/network תואם לרשת של ה-Pods.
מגבלות
ההגבלות הבאות חלות על שירותי LoadBalancer מרובי-רשתות:
- מאזני עומסים פנימיים דורשים חלוקת משנה של GKE.
- אין תמיכה במאזני עומסים שמבוססים על מאגר יעד או על קבוצת מופעים.
- אין תמיכה בשירותים שמשתמשים ב-
externalTrafficPolicy: Cluster. - אי אפשר לטרגט שירותים ל-Pods של
hostNetwork. - אין תמיכה ב-IPv6 וברשתות עם פרוטוקול כפול.
- אי אפשר לשנות את הרשת של שירות קיים.
- יש תמיכה רק ברשתות Layer 3.
המאמרים הבאים
- במדריך למשתמש בנושא שירותים מרובי-רשתות מוסבר איך פורסים שירותים מרובי-רשתות.
- במדריך למשתמש ב-GKE Multi-Network מוסבר איך להכין רשתות VPC וליצור אשכול GKE עם רשתות נוספות.