התכונה 'רישות מרובה ב-GKE' מאפשרת לחבר את עומסי העבודה לכמה רשתות VPC. אפשר לחשוף את ה-Pods האלה עם כמה רשתות ללקוחות פנימיים או חיצוניים באמצעות שירות Kubernetes של type: LoadBalancer.
GKE מקצה מאזן עומסים Google Cloud L4 לשירות ששולח תעבורת נתונים ל-Pods ברשת משנית ספציפית.
במסמך הזה מוסבר איך GKE מטמיע LoadBalancer שירותים עבור פודים בכמה רשתות. הוא כולל את ההגדרה הנדרשת, היכולות והמגבלות של התכונה.
איך פועלים שירותי LoadBalancer בכמה רשתות
כדי לחשוף עומס עבודה בכמה רשתות, יוצרים 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
שירות External LoadBalancer
כדי ליצור מאזן עומסי רשת חיצוני, צריך להגדיר מאזן עומסים שמבוסס על שירות לקצה העורפי. ב-GKE מגרסה 1.37 ואילך, זוהי התנהגות ברירת המחדל. בגרסאות קודמות, מוסיפים את ההערה 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
אימות של נקודות קצה (endpoint) בכמה רשתות
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 מוסבר איך להכין רשתות VPC וליצור אשכול GKE עם רשתות נוספות.