מאזני עומסים פנימיים (ILB) חושפים שירותים בתוך הארגון ממאגר כתובות IP פנימיות שהוקצה לארגון. אי אפשר לגשת לשירות ILB מנקודת קצה כלשהי מחוץ לארגון.
כברירת מחדל, אפשר לגשת לשירותי ILB באותו פרויקט מכל אשכול בארגון. מדיניות הרשת של הפרויקט שמוגדרת כברירת מחדל לא מאפשרת גישה למשאבים בפרויקט מחוץ לפרויקט, וההגבלה הזו חלה גם על שירותי ILB. אם אדמין הפלטפורמה (PA) מגדיר מדיניות רשת בפרויקט שמאפשרת גישה לפרויקט שלכם מפרויקטים אחרים, אז גם שירות ה-ILB נגיש מהפרויקטים האחרים האלה באותו ארגון.
לפני שמתחילים
כדי להגדיר איזון עומסים פנימי, צריך:
- הבעלים של הפרויקט שבו מגדירים את מאזן העומסים. מידע נוסף מופיע במאמר יצירת פרויקט.
יש לכם את התפקידים הנדרשים לניהול זהויות והרשאות גישה:
- צריך לבקש מאדמין IAM בארגון להקצות לכם את התפקיד Load Balancer Admin (אדמין מאזן עומסים) (
load-balancer-admin). - עבור איזון עומסים גלובלי, צריך לבקש מאדמין IAM בארגון להקצות לכם את התפקיד אדמין איזון עומסים גלובלי (
global-load-balancer-admin). מידע נוסף זמין במאמר בנושא תיאורים של תפקידים מוגדרים מראש.
- צריך לבקש מאדמין IAM בארגון להקצות לכם את התפקיד Load Balancer Admin (אדמין מאזן עומסים) (
חשוב לדעת את סוג האירוח של האשכול שעליו פועלים עומסי העבודה. יש הוראות שונות להגדרת איזון עומסים ב-ILB עבור אשכולות משותפים ורגילים.
יצירת מאזן עומסים פנימי לאשכולות משותפים
אפשר ליצור איזון עומסים פנימי גלובלי או אזורי עבור אשכולות משותפים. ההיקף של מאזני עומס גלובליים חוצה את היקום של GDC. ההיקף של איזון עומסים אזורי מוגבל לאזור שצוין בזמן היצירה. מידע נוסף זמין במאמר מאזני עומסים גלובליים ואזוריים.
אפשר ליצור מאזני עומסים פנימיים בשלוש שיטות שונות ב-GDC:
- משתמשים ב-CLI של gcloud כדי ליצור מאזני עומסים גלובליים או אזוריים.
- משתמשים ב-Networking Kubernetes Resource Model (KRM) API כדי ליצור איזון עומסים פנימיים גלובליים או אזוריים.
- שימוש בשירות Kubernetes ישירות באשכול Kubernetes. השיטה הזו זמינה רק למאזני עומסים פנימיים אזוריים.
אתם יכולים לטרגט עומסי עבודה של פוד או מכונה וירטואלית באמצעות KRM API ו-gdcloud CLI. כשמשתמשים בשירות Kubernetes ישירות מאשכול Kubernetes, אפשר לטרגט רק עומסי עבודה באשכול שבו נוצר אובייקט Service.
יצירת איזון עומסים פנימי אזורי
יוצרים איזון עומסים פנימי אזורי באמצעות gdcloud CLI, KRM API או Kubernetes Service באשכול Kubernetes:
gdcloud
יוצרים מאזן עומסים פנימי שמטרגט עומסי עבודה של פודים או מכונות וירטואליות באמצעות CLI של gcloud.
מאזן העומסים הפנימי מכוון לכל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט Backend.
כדי ליצור מאזן עומסים פנימי באמצעות gdcloud CLI, מבצעים את השלבים הבאים:
יוצרים משאב
Backendכדי להגדיר את נקודת הקצה של איזון העומסים הפנימי:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --zone=ZONE \ --cluster-name=CLUSTER_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_NAME: השם שבחרתם למשאב העורפי, למשלmy-backend. -
LABELS: סלקטור שמגדיר באילו נקודות קצה בין פודים ומכונות וירטואליות להשתמש בשביל משאב ה-Backend הזה. לדוגמה,app=web. -
PROJECT_NAME: שם הפרויקט. -
ZONE: האזור שבו רוצים להשתמש להפעלה הזו. כדי להגדיר מראש את דגל האזור לכל הפקודות שדורשות אותו, מריצים את הפקודה:gdcloud config set core/zone ZONE. הדגל של האזור זמין רק בסביבות מרובות אזורים. השדה הזה הוא אופציונלי. CLUSTER_NAME: האשכול שההיקף של הסלקטורים המוגדרים מוגבל אליו. אם לא מציינים את השדה הזה, נבחרות כל נקודות הקצה עם התווית שצוינה. השדה הזה הוא אופציונלי.
-
אפשר לדלג על השלב הזה אם ה-ILB מיועד לעומסי עבודה של pods. אם מגדירים איזון עומסים פנימי לעומסי עבודה של מכונות וירטואליות, צריך להגדיר את סוג בדיקת התקינות של איזון העומסים הפנימי. לדוגמה, כדי ליצור בדיקת תקינות של 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: האזור שבו יוצרים את איזון העומסים הפנימי.
-
יוצרים משאב
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: השם שנבחר לשירות ה-Backend הזה. -
TARGET_PORTS: רשימה מופרדת בפסיקים של יציאות יעד שהשירות לקצה העורפי הזה מתרגם, כאשר כל יציאת יעד מציינת את הפרוטוקול, את היציאה בכלל ההעברה ואת היציאה בשרת העורפי. אפשר לציין כמה יציאות יעד. השדה הזה חייב להיות בפורמטprotocol:port:targetport, לדוגמהTCP:80:8080. השדה הזה הוא אופציונלי. -
HEALTH_CHECK_NAME: השם של משאב בדיקת תקינות. השדה הזה הוא אופציונלי. צריך לכלול את השדה הזה רק אם מגדירים איזון עומסים פנימי לעומסי עבודה של מכונות וירטואליות.
-
מוסיפים את המשאב
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: השדה הזה הוא אופציונלי. אם לא מציינים כתובת, המערכת שומרת אוטומטית כתובתIPv4/32CIDR ממאגר כתובות ה-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
יוצרים איזון עומסים פנימי שמטרגט עומסי עבודה של פוד או מכונה וירטואלית באמצעות KRM API.
מאזן העומסים הפנימי מכוון לכל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט Backend.
כדי ליצור איזון עומסים פנימי אזורי באמצעות KRM API, פועלים לפי השלבים הבאים:
יוצרים משאב
Backendכדי להגדיר את נקודות הקצה של איזון העומסים הפנימי. יוצרים משאבי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 מיועד לעומסי עבודה של pods. אם מגדירים ILB לעומסי עבודה של מכונות וירטואליות, צריך להגדיר בדיקת תקינות ל-ILB:
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 לעומסי עבודה של פודים.
-
יוצרים משאב פנימי
ForwardingRuleשמגדיר את כתובת ה-IP הווירטואלית שבה השירות זמין.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הוא אופציונלי. אם לא מציינים כתובת, המערכת שומרת אוטומטית כתובתIPv4/32CIDR ממאגר כתובות ה-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, צריך ליצור אובייקט Kubernetes Service מסוג LoadBalancer באשכול Kubernetes. מאזן העומסים הפנימי הזה מכוון רק לעומסי עבודה באשכול שבו נוצר אובייקט 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: השם של שירות איזון העומסים הפנימי. -
PROJECT_NAME: מרחב השמות של הפרויקט שמכיל את עומסי העבודה של ה-Backend.
השדה
portמגדיר את יציאת הקצה הקדמי שמוצגת בכתובת ה-VIP. בשדהtargetPortמגדירים את יציאת הקצה העורפי שאליה רוצים להעביר את התנועה בעומסי העבודה של הקצה העורפי. מאזן העומסים תומך בתרגום כתובות רשת (NAT). יכול להיות שהיציאות של הקצה הקדמי והבק-אנד יהיו שונות.-
בשדה
selectorשל ההגדרהService, מציינים את הפודים או המכונות הווירטואליות כעומסי העבודה של ה-Backend.הבורר מגדיר אילו עומסי עבודה ייחשבו לעומסי עבודה של קצה העורפי בשירות הזה, על סמך התאמה בין התוויות שציינתם לתוויות של עומסי העבודה. אפשר לבחור רק עומסי עבודה של קצה עורפי באותו פרויקט ובאותו אשכול שבו מגדירים את
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: מרחב השמות של הפרויקט שמכיל את עומסי העבודה של ה-Backend. -
ILB_SERVICE_NAME: השם של שירות איזון העומסים הפנימי.
הפלט שמתקבל צריך להיות דומה לדוגמה הבאה:
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.
-
יצירת איזון עומסים גלובלי
יוצרים איזון עומסים גלובלי באמצעות ה-CLI של gcloud או KRM API.
gdcloud
יוצרים מאזן עומסים פנימי שמטרגט עומסי עבודה של פודים או מכונות וירטואליות באמצעות CLI של gcloud.
מאזן העומסים הפנימי מכוון לכל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט Backend. המשאב המותאם אישית Backend צריך להיות בהיקף של אזור.
כדי ליצור מאזן עומסים פנימי באמצעות gdcloud CLI, מבצעים את השלבים הבאים:
יוצרים משאב
Backendכדי להגדיר את נקודת הקצה של איזון העומסים הפנימי:gdcloud compute backends create BACKEND_NAME \ --labels=LABELS \ --project=PROJECT_NAME \ --cluster-name=CLUSTER_NAME \ --zone=ZONEמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_NAME: השם שבחרתם למשאב העורפי, למשלmy-backend. -
LABELS: סלקטור שמגדיר באילו נקודות קצה בין פודים ומכונות וירטואליות להשתמש בשביל משאב ה-Backend הזה. לדוגמה,app=web. -
PROJECT_NAME: שם הפרויקט. -
CLUSTER_NAME: הקלאסטר שאליו מוגבל ההיקף של הסלקטורים המוגדרים. אם לא מציינים את השדה הזה, נבחרות כל נקודות הקצה עם התווית שצוינה. השדה הזה הוא אופציונלי. -
ZONE: האזור שבו רוצים להשתמש להפעלה הזו. כדי להגדיר מראש את דגל האזור לכל הפקודות שדורשות אותו, מריצים את הפקודה:gdcloud config set core/zone ZONE. הדגל של התחום זמין רק בסביבות מרובות תחומים. השדה הזה הוא אופציונלי.
-
אפשר לדלג על השלב הזה אם ה-ILB מיועד לעומסי עבודה של pods. אם מגדירים ILB לעומסי עבודה של מכונות וירטואליות, צריך להגדיר בדיקת תקינות ל-ILB:
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: השם שנבחר לשירות ה-Backend הזה. -
TARGET_PORTS: רשימה מופרדת בפסיקים של יציאות יעד שהשירות לקצה העורפי הזה מתרגם, כאשר כל יציאת יעד מציינת את הפרוטוקול, את היציאה בכלל ההעברה ואת היציאה בשרת העורפי. אפשר לציין כמה יציאות יעד. השדה הזה חייב להיות בפורמטprotocol:port:targetport, לדוגמהTCP:80:8080. השדה הזה הוא אופציונלי. -
HEALTH_CHECK_NAME: השם של משאב בדיקת תקינות. השדה הזה הוא אופציונלי. צריך לכלול את השדה הזה רק אם מגדירים איזון עומסים פנימי לעומסי עבודה של מכונות וירטואליות.
-
מוסיפים את המשאב
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זמין במאמר משאבים מותאמים אישית לדוגמה. אם לא מציינים, המערכת שומרת אוטומטיתIPv4/32CIDR ממאגר כתובות ה-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
יוצרים איזון עומסים פנימי שמטרגט עומסי עבודה של פוד או מכונה וירטואלית באמצעות KRM API. ה-ILB הזה מכוון לכל עומסי העבודה בפרויקט שתואמים לתווית שהוגדרה באובייקט Backend. כדי ליצור איזון עומסים פנימי אזורי באמצעות KRM API, פועלים לפי השלבים הבאים:
יוצרים משאב
Backendכדי להגדיר את נקודות הקצה של איזון העומסים הפנימי. יוצרים משאבי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 מיועד לעומסי עבודה של pods. אם מגדירים ILB לעומסי עבודה של מכונות וירטואליות, צריך להגדיר בדיקת תקינות ל-ILB:
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.
מכיוון שמדובר באיזון עומסים גלובלי, צריך ליצור את בדיקת התקינות ב-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שיצרתם קודם. אל תכללו את השדה הזה אם אתם מגדירים איזון עומסים פנימי לעומסי עבודה של פודים.
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שמגדיר את כתובת ה-IP הווירטואלית שבה השירות זמין.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זמין במאמר משאבים מותאמים אישית לדוגמה. אם לא מציינים, המערכת שומרת אוטומטיתIPv4/32CIDR ממאגר כתובות ה-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 של כלל העברת השיחות.
יצירת מאזן עומסים פנימי לאשכולות רגילים
אפשר ליצור מאזני עומסים פנימיים אזוריים לאשכולות רגילים, אבל אי אפשר ליצור מאזני עומסים פנימיים גלובליים. ההיקף של מאזני עומסים אזוריים מוגבל לאזור שצוין בזמן היצירה. מידע נוסף זמין במאמר מאזני עומסים גלובליים ואזוריים.
יצירת איזון עומסים פנימיים אזוריים לאשכולות רגילים באמצעות Kubernetes Service ישירות באשכול Kubernetes. אפשר לטרגט עומסי עבודה רק באשכול שבו נוצר אובייקט Service כשמשתמשים בשירות Kubernetes ישירות מאשכול Kubernetes.
יצירת איזון עומסים פנימי אזורי לאשכולות רגילים
כדי ליצור מאזני עומסים פנימיים ב-GDC, צריך ליצור אובייקט Kubernetes Service מסוג 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_SERVICE_NAMESPACE: מרחב השמות שמכיל את עומסי העבודה של ה-Backend.
השדה
portמגדיר את יציאת הקצה הקדמי שמוצגת בכתובת ה-VIP. בשדהtargetPortמגדירים את יציאת הקצה העורפי שאליה רוצים להעביר את התנועה בעומסי העבודה של הקצה העורפי. מאזן העומסים תומך בתרגום כתובות רשת (NAT). יכול להיות שהיציאות של הקצה הקדמי והבק-אנד יהיו שונות.-
בשדה
selectorבהגדרה שלService, מציינים את הפודים שישמשו כעומסי העבודה של ה-Backend.הבורר מגדיר אילו עומסי עבודה ייחשבו לעומסי עבודה של קצה העורפי בשירות הזה, על סמך התאמה בין התוויות שציינתם לתוויות של עומסי העבודה. אפשר לבחור רק עומסי עבודה של קצה עורפי באותו פרויקט ובאותו אשכול שבו מגדירים את
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:השם של קובץ ההגדרה של שירות ה-ILBService. -
KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של האשכול הרגיל.
כשיוצרים שירות ILB, השירות מקבל כתובת IP. אפשר לראות את כתובת ה-IP של שירות ה-ILB בסטטוס השירות:
kubectl -n ILB_SERVICE_NAMESPACE get svc ILB_SERVICE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
ILB_SERVICE_NAMESPACE: מרחב השמות שמכיל את עומסי העבודה של ה-Backend. -
ILB_SERVICE_NAME: השם של שירות איזון העומסים הפנימי. -
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 הזו מאשכולות אחרים בארגון, בהתאם למדיניות הרשת של הפרויקט שמוגדרת בפרויקט.
-
בחירת מכונה וירטואלית כקצה עורפי למאזן עומסים
כדי לקשר מכונה וירטואלית למאזן העומסים:
מוודאים שלמכונה הווירטואלית יש תווית שתואמת לבורר התוויות שבו נעשה שימוש בהגדרת מאזן העומסים.
לדוגמה, אם למכונה הווירטואלית אין תווית מתאימה, אפשר להוסיף את התווית שצוינה מאובייקט הקצה העורפי של האזור המתאים למכונה הווירטואלית:
kubectl --kubeconfig MANAGEMENT_API_SERVER label virtualmachine VM_NAME -n PROJECT_NAMELABELמחליפים את מה שכתוב בשדות הבאים:
-
LABEL: תווית שתואמת ל-LabelSelectorבתצורת מאזן העומסים, כמוapp=server. -
VM_NAME: השם של המכונה הווירטואלית שמקשרים. -
PROJECT_NAME: שם הפרויקט.
-
מוודאים שהשרת מאזין לאותו פורט שצוין באובייקט
HealthCheck.