מאזני עומסים פנימיים (ILB) חושפים שירותים בתוך הארגון ממאגר כתובות IP פנימיות שמוקצה לארגון. אי אפשר לגשת לשירות ILB מנקודת קצה מחוץ לארגון.
כברירת מחדל, אתם יכולים לגשת לשירותי ILB באותו פרויקט מכל אשכול בארגון. מדיניות הרשת של הפרויקט שמוגדרת כברירת מחדל לא מאפשרת לגשת למשאבי הפרויקט מחוץ לפרויקט, וההגבלה הזו חלה גם על שירותי ILB. אם האדמין של הפלטפורמה (PA) מגדיר מדיניות הרשת של הפרויקט שמאפשרת גישה לפרויקט מפרויקטים אחרים, אפשר לגשת לשירות ILB גם מהפרויקטים האחרים באותו ארגון.
לפני שמתחילים
כדי להגדיר מאזני עומסים פנימיים, צריך:
- להיות הבעלים של הפרויקט שבו מגדירים את מאזן העומסים. מידע נוסף זמין במאמר יצירת פרויקט.
יש לכם את התפקידים הנדרשים לניהול זהויות והרשאות גישה:
- מבקשים ממנהל החשבון הארגוני ב-IAM להקצות לכם את התפקיד "אדמין של מאזן עומסים" (
load-balancer-admin). - במאזני עומסים פנימיים גלובליים, צריך לבקש ממנהל חשבון ארגוני ב-IAM להקצות לכם את התפקיד "אדמין של מאזן עומסים גלובלי" (
global-load-balancer-admin). למידע נוסף, קראו את התיאורים של התפקידים המוגדרים מראש.
- מבקשים ממנהל החשבון הארגוני ב-IAM להקצות לכם את התפקיד "אדמין של מאזן עומסים" (
לדעת איזה סוג של אשכול מארח את עומסי העבודה שלכם. יש הוראות נפרדות להגדרת מאזני עומסים פנימיים לאשכולות משותפים ולאשכולות רגילים.
יצירת מאזן עומסים פנימי לאשכולות משותפים
אפשר ליצור מאזני עומסים פנימיים גלובליים או אזוריים לאשכולות משותפים. ההיקף של מאזני עומסים פנימיים גלובליים משתרע על פני כל ה-GDC. ההיקף של מאזני עומסים פנימיים אזוריים מוגבל לאזור שצוין בזמן היצירה. מידע נוסף זמין במאמר מאזני עומסים גלובליים ואזוריים.
אפשר ליצור מאזני עומסים פנימיים ב-GDC בשלוש שיטות שונות:
- משתמשים ב-gdcloud CLI כדי ליצור מאזני עומסים פנימיים גלובליים או אזוריים.
- משתמשים ב-Networking Kubernetes Resource Model (KRM) API כדי ליצור מאזני עומסים פנימיים גלובליים או אזוריים.
- שימוש בשירות Kubernetes ישירות באשכול Kubernetes. השיטה הזו זמינה רק ל-ILB אזוריים.
אתם יכולים לטרגט עומסי עבודה של Pod או של VM באמצעות KRM API ו-gdcloud CLI. כשמשתמשים בשירות Kubernetes ישירות מאשכול Kubernetes, אפשר לטרגט רק עומסי עבודה באשכול שבו נוצר האובייקט Service.
יצירת ILB אזורי
יוצרים מאזן עומסים פנימי (ILB) אזורי באמצעות gdcloud CLI, KRM API או שירות Kubernetes באשכול Kubernetes:
gdcloud
יצירת ILB שמטרגט עומסי עבודה של פודים או של מכונות וירטואליות באמצעות gdcloud CLI.
ה-ILB הזה מטרגט את כל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט Backend.
כדי ליצור ILB באמצעות ה-CLI של gdcloud:
יוצרים משאב
Backendכדי להגדיר את נקודת הקצה של ה-ILB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --zone=ZONE \ --cluster-name=CLUSTER_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_NAME: השם שבחרתם למשאב העורפי, למשלmy-backend. -
LABELS: בורר שמגדיר באילו נקודות קצה בין Pods לבין מכונות וירטואליות להשתמש במשאב העורפי הזה. לדוגמה,app=web. -
PROJECT_NAME: שם הפרויקט. -
ZONE: האזור שבו משתמשים להפעלה הזו. כדי להגדיר מראש את דגל האזור לכל הפקודות שדורשות אותו, מריצים את הפקודה:gdcloud config set core/zone ZONE. הדגל zone זמין רק בסביבות עם כמה אזורים. השדה הזה הוא אופציונלי. -
CLUSTER_NAME: האשכול שההיקף של הסלקטורים המוגדרים מוגבל אליו. אם לא מציינים את השדה הזה, נבחרות כל נקודות הקצה עם התווית שצוינה. השדה הזה הוא אופציונלי.
-
אם ה-ILB הזה מיועד לעומסי עבודה של Pod, אפשר לדלג על השלב הזה. אם אתם מגדירים ILB לעומסי עבודה של מכונות וירטואליות, צריך להגדיר את סוג בדיקת התקינות של ה-ILB. לדוגמה, כדי ליצור בדיקת תקינות של TCP, מגדירים אותה כך:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --zone=ZONEמחליפים את מה שכתוב בשדות הבאים:
-
HEALTH_CHECK_NAME: השם שבחרתם למשאב של בדיקת התקינות, למשלmy-health-check. CHECK_INTERVAL: משך הזמן בשניות מתחילת בדיקה אחת לתחילת הבדיקה הבאה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval.-
HEALTHY_THRESHOLD: מספר הבדיקות הרציפות שצריכות לעבור כדי שנקודת הקצה תיחשב תקינה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. -
TIMEOUT: משך הזמן בשניות שצריך להמתין לפני שמודיעים על כישלון. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval. -
UNHEALTHY_THRESHOLD: מספר הבדיקות הרציפות שצריכות להיכשל כדי שנקודת הקצה תיחשב לא תקינה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא2. -
PORT: היציאה שבה מתבצעת בדיקת התקינות. ערך ברירת המחדל הוא80. השדה הזה הוא אופציונלי. -
ZONE: האזור שבו יוצרים את ה-ILB.
-
יוצרים משאב
BackendServiceומוסיפים לו את המשאבBackendשיצרתם קודם:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT_NAME \ --target-ports=TARGET_PORTS \ --zone=ZONE \ --health-check=HEALTH_CHECK_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_SERVICE_NAME: השם שנבחר לשירות לקצה העורפי. -
TARGET_PORTS: רשימה מופרדת בפסיקים של יציאות יעד שהשירות לקצה העורפי מתרגם, כאשר כל יציאת יעד מציינת את הפרוטוקול, את היציאה בכלל ההעברה ואת היציאה במכונה לקצה העורפי. אפשר לציין כמה יציאות יעד. השדה הזה חייב להיות בפורמטprotocol:port:targetport, כמוTCP:80:8080. השדה הזה הוא אופציונלי. -
HEALTH_CHECK_NAME: השם של משאב בדיקת התקינות. השדה הזה הוא אופציונלי. צריך לכלול את השדה הזה רק אם מגדירים ILB לעומסי עבודה של VM.
-
מוסיפים את המשאב
BackendServiceלמשאבBackendשנוצר קודם:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend=BACKEND_NAME \ --project=PROJECT_NAME \ --zone=ZONEיוצרים משאב
ForwardingRuleפנימי שמגדיר את ה-VIP שבו השירות זמין:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --zone=ZONE \ --project=PROJECT_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_SERVICE_NAME: השם של השירות לקצה העורפי. -
FORWARDING_RULE_INTERNAL_NAMEבשם שבחרתם לכלל ההעברה. -
CIDR: השדה הזה הוא אופציונלי. אם לא מציינים CIDR, המערכת שומרת באופן אוטומטי CIDR שלIPv4/32ממאגר ה-IP האזורי. צריך לציין את השם של משאבSubnetבאותו מרחב שמות של כלל ההעברה הזה. משאבSubnetמייצג את פרטי הבקשה וההקצאה של רשת משנה אזורית. מידע נוסף על משאביSubnetזמין במאמר דוגמאות למשאבים בהתאמה אישית. -
PROTOCOL_PORT: הפרוטוקול והיציאה שרוצים לחשוף בכלל ההעברה. השדה הזה חייב להיות בפורמטip-protocol=TCP:80. היציאה החשופה חייבת להיות זהה ליציאה שהאפליקציה בפועל חושפת בתוך הקונטיינר.
-
כדי לאמת את ה-ILB שהוגדר, צריך לוודא שהתנאי
Readyמתקיים בכל אחד מהאובייקטים שנוצרו. מאמתים את התנועה באמצעות בקשתcurlל-VIP:כדי לקבל את כתובת ה-VIP שהוקצתה, מתארים את כלל ההעברה:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAMEמאמתים את התנועה באמצעות בקשת
curlל-VIP ביציאה שצוינה בשדהPROTOCOL_PORTבכלל ההעברה:curl http://FORWARDING_RULE_VIP:PORTמחליפים את מה שכתוב בשדות הבאים:
-
FORWARDING_RULE_VIP: כתובת ה-VIP של כלל ההעברה. -
PORT: מספר היציאה מהשדהPROTOCOL_PORTבכלל ההעברה.
-
API
יצירת ILB שמטרגט עומסי עבודה של Pod או VM באמצעות KRM API.
ה-ILB הזה מטרגט את כל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט Backend.
כדי ליצור ILB אזורי באמצעות KRM API:
יוצרים משאב
Backendכדי להגדיר את נקודות הקצה של ה-ILB. יוצרים משאביBackendלכל אזור שבו נמצאים עומסי העבודה:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT_NAME name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: server EOFמחליפים את מה שכתוב בשדות הבאים:
-
MANAGEMENT_API_SERVER: הנתיב של kubeconfig בשרת Management API האזורי. מידע נוסף מופיע במאמר מעבר להקשר של אזור. -
PROJECT_NAME: שם הפרויקט. -
BACKEND_NAME: השם של המשאבBackend. -
CLUSTER_NAME: השדה הזה אופציונלי. השדה הזה מציין את האשכול שההיקף של הבוררים שהוגדרו מוגבל אליו. השדה הזה לא רלוונטי לעומסי עבודה של מכונות וירטואליות. אם משאבBackendלא כולל את השדהclusterName, התוויות שצוינו חלות על כל עומסי העבודה בפרויקט.
אפשר להשתמש באותו משאב
Backendלכל אזור, או ליצור משאביBackendעם קבוצות שונות של תוויות לכל אזור.-
אם ה-ILB הזה מיועד לעומסי עבודה של Pod, אפשר לדלג על השלב הזה. אם אתם מגדירים מאזן עומסים פנימי לעומסי עבודה של מכונות וירטואליות, צריך להגדיר בדיקת תקינות למאזן העומסים הפנימי:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT_NAME name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLD EOFמחליפים את מה שכתוב בשדות הבאים:
-
HEALTH_CHECK_NAME: השם שבחרתם למשאב של בדיקת התקינות, למשלmy-health-check. -
PORT: היציאה שבה מתבצעת בדיקת התקינות. ערך ברירת המחדל הוא80. -
TIMEOUT: משך הזמן בשניות שצריך להמתין לפני שמודיעים על כישלון. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval. CHECK_INTERVAL: משך הזמן בשניות מתחילת בדיקה אחת לתחילת הבדיקה הבאה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval.-
HEALTHY_THRESHOLD: מספר הבדיקות הרציפות שצריכות לעבור כדי שנקודת הקצה תיחשב תקינה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא2. -
UNHEALTHY_THRESHOLD: מספר הבדיקות הרציפות שצריכות להיכשל כדי שנקודת הקצה תיחשב לא תקינה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא2.
-
יוצרים אובייקט
BackendServiceבאמצעות המשאבBackendשנוצר קודם. אם אתם מגדירים מאזן עומסים פנימי לעומסי עבודה של מכונות וירטואליות, צריך לכלול את המשאבHealthCheck.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT_NAME name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME healthCheckName: HEALTH_CHECK_NAME EOFמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_SERVICE_NAME: השם שבחרתם למשאבBackendService. -
HEALTH_CHECK_NAME: השם של משאבHealthCheckשיצרתם קודם. אל תכללו את השדה הזה אם אתם מגדירים ILB לעומסי עבודה של Pod.
-
יוצרים משאב
ForwardingRuleפנימי שמגדיר את ה-VIP שבו השירות זמין.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT_NAME name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: name: CIDR_NAME ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOFמחליפים את מה שכתוב בשדות הבאים:
-
FORWARDING_RULE_INTERNAL_NAME: השם שבחרתם למשאבForwardingRuleInternal. -
CIDR_NAME: השדהcidrRefהוא אופציונלי. אם לא מציינים CIDR, המערכת שומרת באופן אוטומטי CIDR שלIPv4/32ממאגר ה-IP האזורי. צריך לציין את השם של משאבSubnetבאותו מרחב שמות של כלל ההעברה הזה. משאבSubnetמייצג את פרטי הבקשה וההקצאה של רשת משנה אזורית. מידע נוסף על משאביSubnetזמין במאמר דוגמאות למשאבים בהתאמה אישית. -
PORT: משתמשים בשדהportsכדי לציין מערך של יציאות L4, שהחבילות מועברות אליהן לקצוות העורפיים שהוגדרו באמצעות כלל ההעברה הזה. צריך לציין לפחות יציאה אחת. משתמשים בשדהportכדי לציין מספר יציאה. היציאה החשופה חייבת להיות זהה ליציאה שהאפליקציה בפועל חושפת בתוך הקונטיינר.
PROTOCOL: הפרוטוקול שבו משתמשים בכלל ההעברה, למשלTCP. רשומה במערךportsצריכה להיראות כך:ports: - port: 80 protocol: TCP
-
כדי לאמת את ה-ILB שהוגדר, צריך לוודא שהתנאי
Readyמתקיים בכל אחד מהאובייקטים שנוצרו. מאמתים את התנועה באמצעות בקשתcurlל-VIP:כדי לקבל את ה-VIP, משתמשים ב-
kubectl get:kubectl get forwardingruleinternal -n PROJECT_NAMEהפלט אמור להיראות כך:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 10.200.32.59/32 Trueמאמתים את התנועה באמצעות בקשת
curlל-VIP ביציאה שצוינה בשדהPORTבכלל ההעברה:curl http://FORWARDING_RULE_VIP:PORTמחליפים את
FORWARDING_RULE_VIPבכתובת ה-VIP של כלל ההעברה.
Kubernetes Service
כדי ליצור מאזני עומסים פנימיים ב-GDC, יוצרים אובייקט Service של Kubernetes מסוג LoadBalancer באשכול Kubernetes. ה-ILB הזה מטרגט רק עומסי עבודה באשכול שבו נוצר האובייקט Service.
כדי ליצור ILB עם האובייקט Service:
יוצרים קובץ YAML להגדרה של
ServiceמסוגLoadBalancer. צריך להגדיר את שירות ה-ILB כפנימי באמצעות ההערהnetworking.gke.io/load-balancer-type: internal.האובייקט
Serviceהבא הוא דוגמה לשירות ILB:apiVersion: v1 kind: Service metadata: annotations: networking.gke.io/load-balancer-type: internal name: ILB_SERVICE_NAME namespace: PROJECT_NAME spec: ports: - port: 1234 protocol: TCP targetPort: 1234 selector: k8s-app: my-app type: LoadBalancerמחליפים את מה שכתוב בשדות הבאים:
-
ILB_SERVICE_NAME: השם של שירות ה-ILB. -
PROJECT_NAME: מרחב השמות של הפרויקט שמכיל את עומסי העבודה בקצה העורפי.
בשדה
portמגדירים את יציאת הקצה הקדמי שחושפים בכתובת ה-VIP. בשדהtargetPortמגדירים את היציאה של הקצה העורפי שאליה רוצים להעביר את התנועה בעומסי העבודה של הקצה העורפי. מאזן העומסים תומך בתרגום כתובת רשת (NAT). היציאות של החזית והקצה העורפי יכולות להיות שונות.-
בשדה
selectorשל ההגדרהService, מציינים פודים או מכונות וירטואליות כעומסי העבודה בקצה העורפי.הבורר מגדיר אילו עומסי עבודה ייחשבו כעומסי עבודה לקצה העורפי של השירות הזה, על סמך התאמה בין התוויות שאתם מציינים לבין התוויות של עומסי העבודה. ה-
Serviceיכול לבחור רק עומסי עבודה לקצה העורפי באותו פרויקט ובאותו אשכול שבהם הגדרתם את ה-Service.מידע נוסף על בחירת שירות זמין בכתובת https://kubernetes.io/docs/concepts/services-networking/service/.
שומרים את קובץ ההגדרה של
Serviceבאותו פרויקט שבו נמצאים עומסי העבודה בקצה העורפי. שירות ה-ILB יכול לבחור רק עומסי עבודה שנמצאים באותו אשכול כמו ההגדרה שלService.מחילים את קובץ ההגדרה
Serviceעל האשכול:kubectl apply -f ILB_FILEמחליפים את
ILB_FILEבשם של קובץ ההגדרה שלServiceלשירות ILB.כשיוצרים שירות ILB, השירות מקבל כתובת IP. כדי לקבל את כתובת ה-IP של שירות ה-ILB, אפשר להציג את סטטוס השירות:
kubectl -n PROJECT_NAME get svc ILB_SERVICE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NAME: מרחב השמות של הפרויקט שמכיל את עומסי העבודה בקצה העורפי. -
ILB_SERVICE_NAME: השם של שירות ה-ILB.
הפלט אמור להיראות כמו בדוגמה הבאה:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ilb-service LoadBalancer 10.0.0.1 10.0.0.1 1234:31930/TCP 22hהשדות
CLUSTER-IPו-EXTERNAL-IPצריכים להציג את אותו ערך, שהוא כתובת ה-IP של שירות ה-ILB. עכשיו אפשר לגשת לכתובת ה-IP הזו מאשכולות אחרים בארגון, בהתאם למדיניות הרשת של הפרויקט.אם לא מתקבל פלט, צריך לוודא ששירות ה-ILB נוצר בהצלחה.
ב-GDC יש תמיכה בשמות של שירותים במערכת שמות הדומיינים (DNS). עם זאת, השמות האלה פועלים רק באותו אשכול של שירותי ILB. מאשכולות אחרים, צריך להשתמש בכתובת ה-IP כדי לגשת לשירות ILB.
-
יצירת ILB גלובלי
יוצרים מאזן עומסים פנימי גלובלי באמצעות gdcloud CLI או KRM API.
gdcloud
יצירת ILB שמטרגט עומסי עבודה של פודים או של מכונות וירטואליות באמצעות gdcloud CLI.
ה-ILB הזה מטרגט את כל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט Backend. המשאב המותאם אישית Backend חייב להיות מוגדר לאזור.
כדי ליצור ILB באמצעות ה-CLI של gdcloud:
יוצרים משאב
Backendכדי להגדיר את נקודת הקצה של ה-ILB:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --cluster-name=CLUSTER_NAME \ --zone=ZONEמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_NAME: השם שבחרתם למשאב העורפי, למשלmy-backend. -
LABELS: בורר שמגדיר באילו נקודות קצה בין Pods לבין מכונות וירטואליות להשתמש במשאב העורפי הזה. לדוגמה,app=web. -
PROJECT_NAME: שם הפרויקט. -
CLUSTER_NAME: האשכול שההיקף של הסלקטורים שהוגדרו מוגבל אליו. אם לא מציינים את השדה הזה, נבחרות כל נקודות הקצה עם התווית שצוינה. השדה הזה הוא אופציונלי. -
ZONE: האזור שבו משתמשים להפעלה הזו. כדי להגדיר מראש את דגל האזור לכל הפקודות שדורשות אותו, מריצים את הפקודה:gdcloud config set core/zone ZONE. הדגל של האזור זמין רק בסביבות עם כמה אזורים. השדה הזה הוא אופציונלי.
-
אם ה-ILB הזה מיועד לעומסי עבודה של Pod, אפשר לדלג על השלב הזה. אם אתם מגדירים מאזן עומסים פנימי לעומסי עבודה של מכונות וירטואליות, צריך להגדיר בדיקת תקינות למאזן העומסים הפנימי:
gdcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --check-interval=CHECK_INTERVAL \ --healthy-threshold=HEALTHY_THRESHOLD \ --timeout=TIMEOUT \ --unhealthy-threshold=UNHEALTHY_THRESHOLD \ --port=PORT \ --globalמחליפים את מה שכתוב בשדות הבאים:
-
HEALTH_CHECK_NAME: השם שבחרתם למשאב של בדיקת התקינות, למשלmy-health-check. CHECK_INTERVAL: משך הזמן בשניות מתחילת בדיקה אחת לתחילת הבדיקה הבאה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval.-
HEALTHY_THRESHOLD: משך הזמן שצריך להמתין לפני שמודיעים על כישלון. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. -
TIMEOUT: משך הזמן בשניות שצריך להמתין לפני שמודיעים על כישלון. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval. -
UNHEALTHY_THRESHOLD: מספר הבדיקות הרציפות שצריכות להיכשל כדי שנקודת הקצה תיחשב לא תקינה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא2. -
PORT: היציאה שבה מתבצעת בדיקת התקינות. ערך ברירת המחדל הוא80. השדה הזה הוא אופציונלי.
-
יוצרים משאב
BackendServiceומוסיפים לו את המשאבBackendשיצרתם קודם:gdcloud compute backend-services create BACKEND_SERVICE_NAME \ --project=PROJECT_NAME \ --target-ports=TARGET_PORTS \ --health-check=HEALTH_CHECK_NAME \ --globalמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_SERVICE_NAME: השם שנבחר לשירות לקצה העורפי. -
TARGET_PORTS: רשימה מופרדת בפסיקים של יציאות יעד שהשירות לקצה העורפי מתרגם, כאשר כל יציאת יעד מציינת את הפרוטוקול, את היציאה בכלל ההעברה ואת היציאה במכונה לקצה העורפי. אפשר לציין כמה יציאות יעד. השדה הזה חייב להיות בפורמטprotocol:port:targetport, כמוTCP:80:8080. השדה הזה הוא אופציונלי. -
HEALTH_CHECK_NAME: השם של משאב בדיקת התקינות. השדה הזה הוא אופציונלי. צריך לכלול את השדה הזה רק אם מגדירים ILB לעומסי עבודה של VM.
-
מוסיפים את המשאב
BackendServiceלמשאבBackendשנוצר קודם:gdcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --backend-zone BACKEND_ZONE \ --backend=BACKEND_NAME \ --project=PROJECT_NAME \ --globalיוצרים משאב
ForwardingRuleפנימי שמגדיר את ה-VIP שבו השירות זמין:gdcloud compute forwarding-rules create FORWARDING_RULE_INTERNAL_NAME \ --backend-service=BACKEND_SERVICE_NAME \ --cidr=CIDR \ --ip-protocol-port=PROTOCOL_PORT \ --load-balancing-scheme=INTERNAL \ --project=PROJECT_NAME \ --globalמחליפים את מה שכתוב בשדות הבאים:
-
FORWARDING_RULE_INTERNAL_NAME: השם שבחרתם לכלל ההעברה. -
CIDR: השם של משאבSubnetבאותו מרחב שמות של כלל ההעברה הזה. משאבSubnetמייצג את פרטי הבקשה וההקצאה של רשת משנה גלובלית. למידע נוסף על משאביSubnet, קראו את המאמר דוגמאות למשאבים בהתאמה אישית. אם לא מציינים טווח, המערכת מקצה באופן אוטומטי טווח CIDR שלIPv4/32ממאגר כתובות ה-IP הגלובלי. השדה הזה הוא אופציונלי. -
PROTOCOL_PORT: הפרוטוקול והיציאה שרוצים לחשוף בכלל ההעברה. השדה הזה חייב להיות בפורמטip-protocol=TCP:80. היציאה החשופה חייבת להיות זהה ליציאה שהאפליקציה בפועל חושפת בתוך הקונטיינר.
-
כדי לאמת את ה-ILB שהוגדר, צריך לוודא שהתנאי
Readyמתקיים בכל אחד מהאובייקטים שנוצרו. מאמתים את התנועה באמצעות בקשתcurlל-VIP:כדי לקבל את כתובת ה-VIP שהוקצתה, מתארים את כלל ההעברה:
gdcloud compute forwarding-rules describe FORWARDING_RULE_INTERNAL_NAME --globalמאמתים את התנועה באמצעות בקשת
curlל-VIP ביציאה שצוינה בשדהPROTOCOL_PORTבכלל ההעברה:curl http://FORWARDING_RULE_VIP:PORTמחליפים את מה שכתוב בשדות הבאים:
-
FORWARDING_RULE_VIP: כתובת ה-VIP של כלל ההעברה. -
PORT: מספר היציאה של השדהPROTOCOL_PORTבכלל ההעברה.
-
API
יצירת ILB שמטרגט עומסי עבודה של Pod או VM באמצעות KRM API. ה-ILB הזה מטרגט את כל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט של ה-backend. כדי ליצור ILB אזורי באמצעות KRM API:
יוצרים משאב
Backendכדי להגדיר את נקודות הקצה של ה-ILB. יוצרים משאביBackendלכל אזור שבו נמצאים עומסי העבודה:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: Backend metadata: namespace: PROJECT_NAME name: BACKEND_NAME spec: clusterName: CLUSTER_NAME endpointsLabels: matchLabels: app: server EOFמחליפים את מה שכתוב בשדות הבאים:
-
MANAGEMENT_API_SERVER: הנתיב של kubeconfig בשרת Management API הגלובלי. מידע נוסף מופיע במאמר מעבר להקשר הגלובלי. -
PROJECT_NAME: שם הפרויקט. -
BACKEND_NAME: השם של המשאבBackend. -
CLUSTER_NAME: השדה הזה אופציונלי. השדה הזה מציין את האשכול שההיקף של הבוררים שהוגדרו מוגבל אליו. השדה הזה לא רלוונטי לעומסי עבודה של מכונות וירטואליות. אם משאבBackendלא כולל את השדהclusterName, התוויות שצוינו חלות על כל עומסי העבודה בפרויקט.
אפשר להשתמש באותו משאב
Backendלכל אזור, או ליצור משאביBackendעם קבוצות שונות של תוויות לכל אזור.-
אם ה-ILB הזה מיועד לעומסי עבודה של Pod, אפשר לדלג על השלב הזה. אם אתם מגדירים מאזן עומסים פנימי לעומסי עבודה של מכונות וירטואליות, צריך להגדיר בדיקת תקינות למאזן העומסים הפנימי:
apiVersion: networking.global.gdc.goog/v1 kind: HealthCheck metadata: namespace: PROJECT_NAME name: HEALTH_CHECK_NAME spec: tcpHealthCheck: port: PORT timeoutSec: TIMEOUT checkIntervalSec: CHECK_INTERVAL healthyThreshold: HEALTHY_THRESHOLD unhealthyThreshold: UNHEALTHY_THRESHOLDמחליפים את מה שכתוב בשדות הבאים:
-
HEALTH_CHECK_NAME: השם שבחרתם למשאב של בדיקת התקינות, למשלmy-health-check. -
PORT: היציאה שבה מתבצעת בדיקת התקינות. ערך ברירת המחדל הוא80. -
TIMEOUT: משך הזמן בשניות שצריך להמתין לפני שמודיעים על כישלון. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval. CHECK_INTERVAL: משך הזמן בשניות מתחילת בדיקה אחת לתחילת הבדיקה הבאה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא5. לא מומלץ להגדיר זמן קצוב לתפוגה ארוך יותר מ-checkInterval.-
HEALTHY_THRESHOLD: מספר הבדיקות הרציפות שצריכות לעבור כדי שנקודת הקצה תיחשב תקינה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא2. -
UNHEALTHY_THRESHOLD: מספר הבדיקות הרציפות שצריכות להיכשל כדי שנקודת הקצה תיחשב לא תקינה. אם משמיטים את הפרמטר או מגדירים אותו ל-0, ברירת המחדל היא2.
מכיוון שמדובר ב-ILB גלובלי, צריך ליצור את בדיקת התקינות ב-API הגלובלי.
-
יוצרים אובייקט
BackendServiceבאמצעות המשאבBackendשנוצר קודם. אם אתם מגדירים מאזן עומסים פנימי לעומסי עבודה של מכונות וירטואליות, צריך לכלול את המשאבHealthCheck.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: BackendService metadata: namespace: PROJECT_NAME name: BACKEND_SERVICE_NAME spec: backendRefs: - name: BACKEND_NAME zone: ZONE healthCheckName: HEALTH_CHECK_NAME targetPorts: - port: PORT protocol: PROTOCOL targetPort: TARGET_PORT EOFמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_SERVICE_NAME: השם שבחרתם למשאבBackendService. -
HEALTH_CHECK_NAME: השם של משאבHealthCheckשיצרתם קודם. אל תכללו את השדה הזה אם אתם מגדירים ILB לעומסי עבודה של Pod.
ZONE: האזור שבו נוצר המשאבBackend. אפשר לציין כמה קצוות עורפיים בשדהbackendRefs. לדוגמה:- name: my-be zone: Zone-A - name: my-be zone: Zone-Bהשדה
targetPortsהוא אופציונלי. המשאב הזה מפרט את היציאות שמשאבBackendServiceמתרגם. אם אתם משתמשים באובייקט הזה, צריך לספק ערכים לשדות הבאים:-
PORT: היציאה שהשירות חושף. -
PROTOCOL: פרוטוקול שכבה 4 שאליו התנועה צריכה להתאים. יש תמיכה רק ב-TCP וב-UDP.
TARGET_PORT: היציאה שאליה מתורגם הערך שלPORT, למשל8080. אי אפשר לחזור על הערך שלTARGET_PORTבאובייקט נתון. דוגמה ל-targetPorts:targetPorts: - port: 80 protocol: TCP targetPort: 8080
-
-
יוצרים משאב
ForwardingRuleפנימי שמגדיר את ה-VIP שבו השירות זמין.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: networking.global.gdc.goog/v1 kind: ForwardingRuleInternal metadata: namespace: PROJECT_NAME name: FORWARDING_RULE_INTERNAL_NAME spec: cidrRef: name: CIDR_NAME ports: - port: PORT protocol: PROTOCOL backendServiceRef: name: BACKEND_SERVICE_NAME EOFמחליפים את מה שכתוב בשדות הבאים:
-
FORWARDING_RULE_INTERNAL_NAME: השם שבחרתם למשאבForwardingRuleInternal. -
CIDR_NAME: השם של משאבSubnetבאותו מרחב שמות של כלל ההעברה הזה. משאבSubnetמייצג את פרטי הבקשה וההקצאה של רשת משנה גלובלית. למידע נוסף על משאביSubnet, קראו את המאמר דוגמאות למשאבים בהתאמה אישית. אם לא מציינים טווח, המערכת מקצה באופן אוטומטי טווח CIDR שלIPv4/32ממאגר כתובות ה-IP הגלובלי. השדה הזה הוא אופציונלי. -
PORT: משתמשים בשדהportsכדי לציין מערך של יציאות L4, שהחבילות מועברות אליהן לקצוות העורפיים שהוגדרו עם כלל ההעברה הזה. צריך לציין לפחות יציאה אחת. בשדהportמציינים את מספר היציאה. היציאה החשופה חייבת להיות זהה ליציאה שהאפליקציה בפועל חושפת בתוך הקונטיינר.
PROTOCOL: הפרוטוקול שבו משתמשים בכלל ההעברה, למשלTCP. רשומה במערךportsצריכה להיראות כך:ports: - port: 80 protocol: TCP
-
כדי לאמת את ה-ILB שהוגדר, צריך לוודא שהתנאי
Readyמתקיים בכל אחד מהאובייקטים שנוצרו. מאמתים את התנועה באמצעות בקשתcurlל-VIP:כדי לקבל את ה-VIP, משתמשים ב-
kubectl get:kubectl get forwardingruleinternal -n PROJECT_NAMEהפלט אמור להיראות כך:
NAME BACKENDSERVICE CIDR READY ilb-name BACKEND_SERVICE_NAME 10.200.32.59/32 Trueבודקים את התנועה באמצעות בקשת
curlל-VIP ביציאה שצוינה בשדהPORTבכלל ההעברה:curl http://FORWARDING_RULE_VIP:PORTמחליפים את
FORWARDING_RULE_VIPבכתובת ה-VIP של כלל ההעברה.
יצירת מאזן עומסים פנימי לאשכולות רגילים
אתם יכולים ליצור מאזני עומסים פנימיים (ILB) אזוריים לאשכולות רגילים. אין תמיכה במאזני עומסים פנימיים גלובליים. ההיקף של מאזני עומסים פנימיים אזוריים מוגבל לאזור שצוין בזמן היצירה. מידע נוסף זמין במאמר מאזני עומסים גלובליים ואזוריים.
יצירת מאזני עומסים פנימיים (ILB) אזוריים לאשכולות רגילים באמצעות שירות Kubernetes ישירות באשכול Kubernetes. כשמשתמשים בשירות Kubernetes ישירות מאשכול Kubernetes, אפשר לטרגט רק עומסי עבודה באשכול שבו נוצר האובייקט Service.
יצירת ILB אזורי לאשכולות רגילים
כדי ליצור מאזני עומסים פנימיים ב-GDC, יוצרים אובייקט Service של Kubernetes מסוג LoadBalancer באשכול Kubernetes.
ה-ILB הזה מטרגט רק עומסי עבודה באשכול שבו נוצר האובייקט Service.
כדי ליצור ILB עם האובייקט Service:
יוצרים קובץ YAML להגדרה של
ServiceמסוגLoadBalancer. צריך להגדיר את שירות ה-ILB כפנימי באמצעות ההערהnetworking.gke.io/load-balancer-type: internal.האובייקט
Serviceהבא הוא דוגמה לשירות ILB:apiVersion: v1 kind: Service metadata: annotations: networking.gke.io/load-balancer-type: internal name: ILB_SERVICE_NAME namespace: ILB_SERVICE_NAMESPACE spec: ports: - port: 1234 protocol: TCP targetPort: 1234 selector: k8s-app: my-app type: LoadBalancerמחליפים את מה שכתוב בשדות הבאים:
-
ILB_SERVICE_NAME: השם של שירות ה-ILB. -
ILB_SERVICE_NAMESPACE: מרחב השמות שמכיל את עומסי העבודה בקצה העורפי.
בשדה
portמגדירים את יציאת הקצה הקדמי שחושפים בכתובת ה-VIP. בשדהtargetPortמגדירים את היציאה של הקצה העורפי שאליה רוצים להעביר את התנועה בעומסי העבודה של הקצה העורפי. מאזן העומסים תומך בתרגום כתובת רשת (NAT). היציאות של החזית והקצה העורפי יכולות להיות שונות.-
בשדה
selectorשל ההגדרהService, מציינים את הפודים שישמשו כעומסי העבודה בקצה העורפי.הבורר מגדיר אילו עומסי עבודה ייחשבו כעומסי עבודה לקצה העורפי של השירות הזה, על סמך התאמה בין התוויות שאתם מציינים לבין התוויות של עומסי העבודה. ה-
Serviceיכול לבחור רק עומסי עבודה לקצה העורפי באותו פרויקט ובאותו אשכול שבהם הגדרתם את ה-Service.מידע נוסף על בחירת שירות זמין בכתובת https://kubernetes.io/docs/concepts/services-networking/service/.
שומרים את המפרט של
Serviceבקובץ YAML. מחליפים את שם הקובץ ב-ILB_FILE בפקודה הבאה. שירות ה-ILB יכול לבחור רק עומסי עבודה שנמצאים באותו אשכול כמו ההגדרה שלService.מחילים את קובץ ההגדרה
Serviceעל האשכול:export KUBECONFIG=KUBECONFIG_PATH kubectl apply -f ILB_FILEמחליפים את מה שכתוב בשדות הבאים:
-
ILB_FILE:השם של קובץ ההגדרה שלServiceלשירות ILB. -
KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של האשכול הרגיל.
כשיוצרים שירות ILB, השירות מקבל כתובת IP. כדי לקבל את כתובת ה-IP של שירות ה-ILB, אפשר להציג את סטטוס השירות:
kubectl -n ILB_SERVICE_NAMESPACE get svc ILB_SERVICE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
ILB_SERVICE_NAMESPACE: מרחב השמות שמכיל את עומסי העבודה בקצה העורפי. -
ILB_SERVICE_NAME: השם של שירות ה-ILB. -
KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של האשכול הרגיל.
הפלט שיתקבל יהיה דומה לדוגמה הבאה:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ilb-service LoadBalancer 10.0.0.1 198.51.0.1 1234:31930/TCP 22hעכשיו אפשר לגשת לכתובת ה-IP הזו מאשכולות אחרים בארגון, בהתאם למדיניות הרשת של הפרויקט.
-
בחירת VM כקצה עורפי למאזן עומסים
כדי לקשר מכונה וירטואלית למאזן העומסים:
מוודאים שלמכונה הווירטואלית יש תווית שתואמת לבורר התוויות שמשמש בהגדרת מאזן העומסים.
לדוגמה, אם למכונה הווירטואלית אין תווית מתאימה, אפשר להוסיף למכונה הווירטואלית את התווית שצוינה מהאובייקט לקצה העורפי של האזור המתאים:
kubectl --kubeconfig MANAGEMENT_API_SERVER label virtualmachine VM_NAME -n PROJECT_NAMELABELמחליפים את מה שכתוב בשדות הבאים:
-
LABEL: תווית שתואמת ל-LabelSelectorבהגדרות של מאזן העומסים, כמוapp=server. -
VM_NAME: השם של המכונה הווירטואלית שמקושרת. -
PROJECT_NAME: שם הפרויקט.
-
מוודאים שהשרת מאזין לאותה יציאה שצוינה באובייקט
HealthCheck.