בדף הזה מוסבר איך לפרוס שירות LoadBalancer חיצוני שיוצר מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות backend. לפני שקוראים את הדף הזה, חשוב לוודא שאתם מכירים את הנושאים הבאים:
למידע נוסף על מאזני עומסי רשת חיצוניים להעברת סיגנל ללא שינוי, אפשר לעיין במאמר מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות קצה עורפי.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
דרישות
במדריך הזה משתמשים ב-
spec.loadBalancerClassכדי ליצור מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות קצה עורפי עם קצוות עורפיים שלGCE_VM_IPNEG. כדי לבצע את ההדרכה הזו, צריך להשתמש ב-GKE בגרסה 1.33.1-gke.1779000 ואילך, כיspec.loadBalancerClassדורש GKE בגרסה 1.33.1-gke.1779000 ואילך. בנוסף, גרסה 1.33.1-gke.1779000 ואילך עומדת בדרישות המי��ימום של גרסת GKE לשימוש ב-NEG backends או בתכונה של איזון עומסים משוקלל.אם האשכול שלכם הוא בגרסה קודמת ל-1.36, צריך להפעיל את התוסף
HttpLoadBalancingבאשכול. התוסף הזה מופעל כברירת מחדל. מידע נוסף זמין במאמר תנאים מוקדמים ל-HttpLoadBalancing.כדי להפעיל את Cloud Logging בשביל שירות LoadBalancer חיצוני, אשכול GKE צריך להיות בגרסה 1.36.0-gke.2459000 ואילך.
בחירת אשכול
אפשר ליצור אשכול חדש או לבחור אשכול קיים שעומד בדרישות.
יצירת אשכול חדש
Autopilot
כדי ליצור אשכול חדש של Autopilot:
gcloud container clusters create-auto CLUSTER_NAME \
--release-channel=RELEASE_CHANNEL \
--cluster-version=VERSION \
--location=COMPUTE_LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול החדש. -
RELEASE_CHANNEL: השם של ערוץ ההפצה של GKE לאשכול. -
VERSION: גרסת GKE של האשכול. -
COMPUTE_LOCATION: האזור של Compute Engine שבו נמצא האשכול.
כדי להשבית את היצירה האוטומטית של כללי חומת אש ב-VPC עבור שירותי LoadBalancer, צריך לכלול את הדגל --disable-l4-lb-firewall-reconciliation. מידע נוסף זמין במאמר כללים של חומת אש בניהול המשתמשים לשירותי LoadBalancer ב-GKE.
רגילה
כדי ליצור אשכול רגיל חדש:
gcloud container clusters create CLUSTER_NAME \
--release-channel=RELEASE_CHANNEL \
--cluster-version=VERSION \
--location=COMPUTE_LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול החדש. -
RELEASE_CHANNEL: השם של ערוץ ההפצה של GKE לאשכול. -
VERSION: גרסת GKE של האשכול. -
COMPUTE_LOCATION: האזור של Compute Engine שבו נמצא האשכול.
כדי להשבית את היצירה האוטומטית של כללי חומת אש ב-VPC עבור שירותי LoadBalancer, צריך לכלול את הדגל --disable-l4-lb-firewall-reconciliation. מידע נוסף זמין במאמר כללים של חומת אש בניהול המשתמשים לשירותי LoadBalancer ב-GKE.
שדרוג של אשכול קיים
משתמשים ב-CLI של gcloud כדי לעדכן אשכול קיים:
gcloud container clusters upgrade CLUSTER_NAME \
--cluster-version=VERSION \
--master \
--location=COMPUTE_LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול הקיים. -
VERSION: גרסת GKE הספציפית שאליה רוצים לשדרג את האשכול. מידע נוסף זמין במאמר שדרוג ידני של מישור הבקרה. -
COMPUTE_LOCATION: האזור של Compute Engine שבו נמצא האשכול.
כדי להשבית את היצירה האוטומטית של כללי חומת אש ב-VPC עבור שירותי LoadBalancer, צריך לכלול את הדגל --disable-l4-lb-firewall-reconciliation. מידע נוסף זמין במאמר כללים של חומת אש בניהול המשתמשים לשירותי LoadBalancer ב-GKE.
פריסת עומס עבודה לדוגמה
פורסים את עומס העבודה לדוגמה הבא, שמספק את ה-Pods של השרתים עבור שירות LoadBalancer חיצוני.
שומרים את דוגמת הפריסה הבאה בתור
store-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: store spec: replicas: 20 selector: matchLabels: app: store template: metadata: labels: app: store spec: containers: - image: registry.k8s.io/echoserver:1.10 imagePullPolicy: Always name: echoserver ports: - name: http containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 scheme: HTTPמחילים את המניפסט על האשכול:
kubectl apply -f store-deployment.yamlמוודאים שיש 20 פודים של שרתים לפריסה:
kubectl get podsהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE store-cdb9bb4d6-s25vw 1/1 Running 0 10s store-cdb9bb4d6-vck6s 1/1 Running 0 10s ....
יצירה של שירות LoadBalancer חיצוני
כדי לחשוף את עומס העבודה לדוגמה, יוצרים שירות LoadBalancer חיצוני.
שומרים את מניפסט השירות הבא בשם
store-v1-lb-svc.yaml:apiVersion: v1 kind: Service metadata: name: store-v1-lb-svc spec: type: LoadBalancer loadBalancerClass: networking.gke.io/l4-regional-external selector: app: store ports: - name: tcp-port protocol: TCP port: 8080 targetPort: 8080מחילים את המניפסט על האשכול:
kubectl apply -f store-v1-lb-svc.yaml
חשוב לשים לב לנקודות הבאות לגבי קובץ המניפסט לדוגמה:
צריך להגדיר את השדה
spec.loadBalancerClassלערךnetworking.gke.io/l4-regional-externalבזמן שהמניפסט מוחל על האשכול בפעם הראשונה. השדה הזה מורה ל-GKE ליצור מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות לקצה העורפי. חובה להשתמש במאזני עומסים חיצוניים של רשתות להעברת סיגנל ללא שינוי שמבוססים על שירות בק-אנד כדי לתמוך בתכונות כמו IPv6 ואיזון עומסים משוקלל.ב-GKE נעשה שימוש ב-
GCE_VM_IPNEG backends או ב-unmanaged instance group backends, בה��אם לגרסת האשכול. בקטגוריות עם גרסה 1.32.2-gke.1652000, מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות קצה עורפי משתמש ב-GCE_VM_IPNEGs. בגרסאות קודמות, מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות backend משתמש בקבוצות של מופעים לא מנוהלים.השדה
spec.loadBalancerClassהזה הוא קבוע וצריך להגדיר אותו כשיוצרים את השירות. אי אפשר להוסיף או לשנות את השדה הזה במניפסט של שירות LoadBalancer קיים, כי הוא בלתי ניתן לשינוי. כל ניסיון לעשות זאת יגרום לשגיאה, והעדכון של השירות ייכשל.
הפעלת איזון עומסים משוקלל
כדי לחלק את החיבורים החדשים באופן יחסי לצמתים על סמך מספר הפודים (Pods) שמוכנים להצגה, שאינם מסיימים את הפעולה ומוצגים בכל צומת, צריך להפעיל איזון עומסים משוקלל על ידי הוספת ההערה networking.gke.io/weighted-load-balancing:
"pods-per-node" למניפסט של השירות.
מוסיפים את ההערה
networking.gke.io/weighted-load-balancing: "pods-per-node"למניפסט של שירותstore-v1-lb-svc.yaml, ומוודאים שמגדירים גם את הערךexternalTrafficPolicy: Localכך שהוא ייראה כך:apiVersion: v1 kind: Service metadata: name: store-v1-lb-svc annotations: networking.gke.io/weighted-load-balancing: "pods-per-node" spec: type: LoadBalancer loadBalancerClass: networking.gke.io/l4-regional-external externalTrafficPolicy: Local selector: app: store ports: - name: tcp-port protocol: TCP port: 8080 targetPort: 8080מחילים את המניפסט על האשכול:
kubectl apply -f store-v1-lb-svc.yaml
שימו לב לנקודות הבאות לגבי הדוגמה הזו של איזון עומסים משוקלל:
מניפסט השירות משתמש ב-
externalTrafficPolicy: Local. אם לא צריך להפעיל איזון עומסים משוקלל, אפשר גם להשתמש ב-externalTrafficPolicy: Cluster. לפרטים על האופן שבוexternalTrafficPolicyמגדיר קיבוץ צמתים, אילו צמתים עוברים את בדיקות התקינות של מאזן העומסים ואיך מעבדים מנות מידע, אפשר לעיין במאמר מושגים בנושא LoadBalancer Service.אם מפעילים איזון עומסים לפי משקל, GKE לא מונע את השימוש ב-
externalTrafficPolicy: Cluster, אבלexternalTrafficPolicy: Clusterמשבית למעשה את איזון העומסים לפי משקל כי יכול להיות שהמנות ינותבו, אחרי מאזן העומסים, לצומת אחר.
אפשר גם להפעיל איזון עומסים משוקלל בשירות LoadBalancer חיצוני קיים באמצעות kubectl edit svc service-name. הפקודה kubectl edit פותחת את מניפסט השירות של איזון העומסים הקיים בעורך הטקסט שהגדרתם, שבו תוכלו לשנות את המניפסט ולשמור את השינויים.
כשעורכים שירות LoadBalancer חיצוני קיים, חשוב לשים לב לנקודות הבאות:
שירות LoadBalancer חיצוני קיים חייב להוביל ליצירה של מאזני עומסים חיצוניים של רשת להעברת סיגנל ללא שינוי שמבוססים על שירות לקצה העורפי. כלומר, בשדה
spec.loadBalancerClassשל שירות LoadBalancer חיצוני קיים חייב להיות הערךnetworking.gke.io/l4-regional-externalכשמחילים את המניפסט על האשכול בפעם הראשונה.הוספת ה
networking.gke.io/weighted-load-balancing: "pods-per-node"אנ��ט������ ��שי��ות LoadBalancer חיצוני קיים ��מ��תמש במ��זן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על מאגר כתובות IP ליעד לא משפיעה על השירות.כשמעדכנים את המניפסט הקיים של שירות LoadBalancer חיצוני, צריך להגדיר את הערך
externalTrafficPolicy: Local. השימוש ב-externalTrafficPolicy: Clusterמשבית למעשה את איזון העומסים המשוקלל, כי יכול להיות שהמנה תנותב, אחרי מאזן העומסים, לצומת אחר.
השבתה של איזון עומסים משוקלל
כדי להפיץ חיבורים חדשים לצמתים בלי קשר למספר ה-Pods של שרתים שנמצאים בכל צומת, צריך להשבית את איזון העומסים המשוקלל על ידי הסרת ההערה networking.gke.io/weighted-load-balancing: "pods-per-node" ממניפסט השירות.
הפעלת רישום ביומן לשירותי קצה עורפי
אתם יכולים להפעיל, להשבית ולראות יומנים של מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות לקצה העורפי.
כדי להגדיר את Cloud Logging, יוצרים משאב בהתאמה אישית מסוג L4LBConfig שמציין את הגדרות הרישום ביומן. המשאב L4LBConfig מקושר לשירות Kubernetes במניפסט השירות. אחרי שמחילים את המניפסט, בקר GKE מגדיר את הרישום ביומן עבור שירות לקצה העורפי. אם לא מקשרים משאב L4LBConfig לשירות, בקר התנועה מפסיק לנהל את הגדרות הרישום ביומן ומשאיר את שירות לקצה העורפי במצב האחרון הידוע שלו. מידע נוסף זמין במאמר הסבר על אופן הפעולה של COAST.
אפשר להגדיר את השדות הבאים:
-
enabled: אם הערך מוגדר ל-true, מופעלת רישום ביומן של השירות הזה והיומנים זמינים ב-Cloud Logging. אחרת, הרישום מושבת בשירות הזה. -
sampleRate: מציין ערך מ-0עד1,000,000(ברירת מחדל), כאשר0אומר שלא מתבצעת רישום ביומן של מנות ו-1,000,000אומר שמתבצעת רישום ביומן של 100% מהמנות. השדהsampleRateהוא אופציונלי, והוא רלוונטי רק אם הערך של השדהenableמוגדר כ-true. -
optionalMode: קובע אילו שדות אופציונליים של מטא-נתונים נכללים ביומנים שנוצרו עבור מאזן העומסים. השדה מקבל אחד מהערכים הבאים:-
EXCLUDE_ALL_OPTIONAL: הגדרת ברירת המחדל אם לא מצויןoptionalMode. אם מגדירים את האפשרות הזו, אף שדה אופציונלי לא נכלל ביומנים, ומתקבל פורמט היומן הכי תמציתי. -
INCLUDE_ALL_OPTIONAL: מאפשר רישום ביומן של כל השדות האופציונליים הזמינים, ומספק את רשומות היומן הכי מפורטות. -
CUSTOM: מציין רשימה מותאמת אישית של שדות אופציונליים שנכללים ביומנים. במצבCUSTOM, צריך להשתמש גם בפרמטרoptionalFieldsכדי לספק רשימה של השדות שרוצים לקבל, כשהשדות מופרדים בפסיקים.
-
-
optionalFields: מחרוזת מופרדת בפסיקים של שמות שדות. הגדרה של שדות המטא-נתונים האופציונליים שרוצים לכלול ביומנים שנוצרו. השדה הזה משמש רק כשהערך שלoptionalModeהואCUSTOM. אחרת, המערכת מתעלמת מכל הערכים.
כדי להגדיר את Cloud Logging, צריך ליצור את המשאב L4LBConfig באותו מרחב שמות כמו משאב השירות. במניפסט של L4LBConfig שמוצג בדוגמה הבאה מופעל Cloud Logging, וקצב הדגימה מוגדר ל-50% מהבקשות לשירות מאזן עומסים נתון.
שומרים את קובץ המניפסט הבא בשם
svc-l4lb-config.yaml:apiVersion: networking.gke.io/v1 kind: L4LBConfig metadata: name: svc-l4lb-config namespace: default spec: logging: enabled: true # must be included sampleRate: 500000 optionalMode: "INCLUDE_ALL_OPTIONAL"מחילים את קובץ המניפסט L4LBConfig על האשכול:
kubectl apply -f svc-l4lb-config.yamlמוסיפים את ההערה
networking.gke.io/l4lb-configלמניפסט של השירותstore-v1-lb-svc.yaml:apiVersion: v1 kind: Service metadata: name: store-v1-lb-svc annotations: cloud.google.com/l4-rbs: "enabled" networking.gke.io/l4lb-config: "svc-l4lb-config" spec: type: LoadBalancer selector: app: store ports: - name: tcp-port protocol: TCP port: 8080 targetPort: 8080מחילים את מניפסט השירות על האשכול:
kubectl apply -f store-v1-lb-svc.yaml
אימות של שירות איזון העומסים החיצוני והרכיבים שלו
בודקים שהשירות פועל:
kubectl get svc store-v1-lb-svcהפלט אמור להיראות כך:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-v1-lb-svc LoadBalancer 10.44.196.160 35.193.28.231 8080:32466/TCP 11mמערכת GKE הקצתה
EXTERNAL_IPלמאזן עומסי הרשת החיצוני להעברת סיגנל ללא שינוי.בודקים את החיבור למאזן העומסים:
curl EXTERNAL_IP:PORTמחליפים את מה שכתוב בשדות הבאים:
-
EXTERNAL_IP: כתובת ה-IP שהוקצתה למאזן עומסי הרשת החיצוני להעברת סיגנל ללא שינוי. -
PORT: מספר היציאה שהוקצה למאזן עומסי הרשת החיצוני להעברת סיגנל ללא שינוי.
הפלט אמור להיראות כך:
Hostname: store-v1-lb-svc-cdb9bb4d6-hflxd Pod Information: -no pod information available- Server values: server_version=nginx: 1.13.3 - lua: 10008 Request Information: client_address=10.128.0.50 method=GET real path=/ query= request_version=1.1 request_scheme=http request_uri=EXTERNAL_IP Request Headers: accept=*/* host=EXTERNAL_IP user-agent=curl/7.81.0 Request Body: -no body in request--
בודקים את שירות LoadBalancer ואת קבוצת ההערות שלו שמתארות אתGoogle Cloud המשאבים שלו:
kubectl describe svc store-v1-lb-svcהפלט אמור להיראות כך:
Name: store-v1-lb-svc Namespace: default Labels: <none> Annotations: cloud.google.com/neg-status: {"network_endpoint_groups":{"0":"k8s2-qvveq1d8-default-my-service-ext-5s55db85"},"zones":["us-central1-c"]} #This annotation appears in the output only if the service uses NEG backends. networking.gke.io/weighted-load-balancing: pods-per-node #This annotation appears in the output only if weighted load balancing is enabled. service.kubernetes.io/backend-service: k8s2-qvveq1d8-default-my-service-ext-5s55db85 service.kubernetes.io/firewall-rule: k8s2-qvveq1d8-default-my-service-ext-5s55db85 service.kubernetes.io/firewall-rule-for-hc: k8s2-qvveq1d8-default-my-service-ext-5s55db85-fw service.kubernetes.io/healthcheck: k8s2-qvveq1d8-default-my-service-ext-5s55db85 service.kubernetes.io/tcp-forwarding-rule: a808124abf8ce406ca51ab3d4e7d0b7d Selector: app=store Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.18.102.23 IPs: 10.18.102.23 LoadBalancer Ingress: 35.184.160.229 Port: tcp-port 8080/TCP TargetPort: 8080/TCP NodePort: tcp-port 31864/TCP Endpoints: 10.20.1.28:8080,10.20.1.29:8080 Session Affinity: None External Traffic Policy: Local HealthCheck NodePort: 30394 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 4m55s loadbalancer-controller default/my-service-extיש כמה שדות שמציינים שמאזן עומסי רשת חיצוני מסוג העברת סיגנל ללא שינוי שמבוסס על שירות לקצה העורפי והמשאבים שלו נוצרו בהצלחה: Google Cloud
Events. השדה הזה ריק אם שירות LoadBalancer והמשאבים שלו נוצרו בהצלחה. אם אירעה שגיאה, היא מפורטת כאן.רשימה של
Annotationsמופעל: GKE מוסיף את ��שימת ההערות הבאה לקריאה בלבד למניפסט של השירות. כל הערה שהשם שלה מתחיל ב-service.kubernetes.io/משמשת לציון השם שלGoogle Cloud משאב שנוצר כחלק ממאזן העומסים או כדי לתמוך בו.- ההערה
networking.gke.io/weighted-load-balancing: pods-per-nodeמציינת שנעשה שימוש באיזון עומסים משוקלל, ומאזן העומסים מחלק את התנועה לתרמילי קצה עורפיים על סמך מספר התרמילים שפועלים בכל צומת. - ההערה
service.kubernetes.io/backend-serviceמציינת את השם של השירות לקצה העורפי של מאזן העומסים. - ההערה
service.kubernetes.io/healthcheckמציינת את השם של בדיקת תקינות מאזן העומסים שבה נעשה שימוש בשירות הקצה העורפי. - ההערה
service.kubernetes.io/tcp-forwarding-ruleאוservice.kubernetes.io/udp-forwarding-ruleמציינת את השם של כלל ההעברה של מאזן העומסים. - ההערה
service.kubernetes.io/firewall-ruleמציינת את השם של כלל חומת האש שנוצר כדי לאפשר תנועה לצמתי האשכול. אפשר להתאים אישית את טווחי המקורות של כלל חומת האש הזה באמצעותspec.loadBalancerSourceRanges[]. פרטים נוספים על כללי חומת האש לשירותי LoadBalancer זמינים במאמר בנושא כללי חומת האש ורשימת כתובות ה-IP המותרות. - ההערה
service.kubernetes.io/firewall-rule-for-hcמציינת את השם של כלל חומת האש שנדרש לבדיקות התקינות של מאזן העומסים. ההערה
cloud.google.com/neg-statusמציינת את קבוצות נקודות הקצה ברשת (NEG) שמשמשות את מאזן העומסים ואת האזורים שלהן. ההערה הזו מופיעה רק אם מתקיימים שני התנאים הבאים:- האשכול הפעיל את גרסת GKE 1.32.2-gke.1652000 ואילך כשמניפסט הוחל על האשכול.
- השדה
spec.loadBalancerClassשהוגדר לערךnetworking.gke.io/l4-regional-externalהיה קיים במניפסט של השירות כשהוא הוחל על האשכול.
- ההערה
מוודאים שנוצרו משאבי מאזן עומסים וכללי חומת אש עבור שירות LoadBalancer חיצוני:
כדי לראות את כלל ההעברה, מריצים את הפקודה הבאה:
gcloud compute forwarding-rules describe FWD_RULE_NAME \ --region=REGION_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
FWD_RULE_NAME: שם כלל ההעברה שסופק על ידי ההערות לקריאה בלבדservice.kubernetes.io/tcp-forwarding-ruleאוservice.kubernetes.io/udp-forwarding-rule. כדי לבדוק את ההערות האלה, מריצים את הפקודהkubectl describe svc SERVICE_NAME. -
REGION_NAME: Google Cloud האזור שבו נמצא האשכול. באשכולות אזוריים, האזור מכיל את האזור שבו האשכול נמצא.
-
כדי לראות את שירות לקצה העורפי, מריצים את הפקודה הבאה:
gcloud compute backend-services describe BACKEND_SERVICE_NAME \ --region=REGION_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
BACKEND_SERVICE_NAME: השם של שירות ה-Backend שמוגדר על ידי ההערהservice.kubernetes.io/backend-serviceלקריאה בלבד. כדי לבדוק את ההערה הזו לקריאה בלבד, מריצים את הפקודהkubectl describe svc SERVICE_NAME. -
REGION_NAME: Google Cloud האזור שבו נמצא האשכול. באשכולות אזוריים, האזור מכיל את התחום שבו נעשה שימוש באשכול.
-
כדי לראות את בדיקת התקינות של מאזן העומסים, מריצים את הפקודה הבאה:
gcloud compute health-checks describe HEALTH_CHECK_NAME \ --region=REGION_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
HEALTH_CHECK_NAME: השם של בדיקת תקינות מאזן העומסים. השם של בדיקת התקינות מופיע בהערה לקריאה בלבדservice.kubernetes.io/healthcheck. כדי לבדוק את ההערה הזו לקריאה בלבד, מריצים את הפקודהkubectl describe svc SERVICE_NAME. -
REGION_NAME: Google Cloud האזור שבו נמצא האשכול. באשכולות אזוריים, האזור מכיל את התחום שבו נעשה שימוש באשכול.
-
כדי לראות את הכללים של חומת האש, מריצים את הפקוד��ת הבאות:
gcloud compute firewall-rules describe FIREWALL_RULE_NAMEgcloud compute firewall-rules describe HEALTH_CHECK_FIREWALL_RULE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
FIREWALL_RULE_NAME: השם של כלל חומת האש שמאפשר תנועה למאזן העומסים. השם של כלל חומת האש הזה מסופק על ידי ההערהservice.kubernetes.io/firewall-ruleלקריאה בלבד. כדי לבדוק את ההערה הזו לקריאה בלבד, מריצים את הפקודהkubectl describe svc SERVICE_NAME. -
HEALTH_CHECK_FIREWALL_RULE_NAME: השם של כלל חומת האש שמאפשר בדיקות תקינות של השרתים העורפיים של מאזן העומסים (הצמתים של האשכול). השם של כלל חומת האש הזה מסופק על ידי ההערה לקריאה בלבדservice.kubernetes.io/firewall-rule-for-hc. כדי לבדוק את ההערה הזו לקריאה בלבד, מריצים אתkubectl describe svc SERVICE_NAME.
-
כדי לראות את קבוצות ה-NEG של מאזן העומסים, מריצים את הפקודה הבאה:
gcloud compute network-endpoint-groups describe NEG_NAME \ --zone=ZONE_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
NEG_NAME: שם ה-NEG של מאזן העומסים. השם של קבוצת ה-NEG מסופק על ידי ההערהcloud.google.com/neg-statusלקריאה בלבד. כדי לבדוק את ההערה הזו לקריאה בלבד, מריצים את הפקודהkubectl describe svc SERVICE_NAME. ההערה מכילה נתונים מובנים עם מידע על שמות ה-NEG והאזורים שבהם נעשה שימוש במאזן העומסים. במקרה של אשכולות אזוריים, ההערה הזו מכילה מידע על קבוצת נקודות קצה ברשת אחת. במקרה של אשכולות אזוריים, ההערה הזו מכילה מידע על NEG בכל אזור שבו האשכול ממוקם. -
ZONE_NAME: האזור Google Cloud שמכיל את ה-NEG.
-
מוודאים ש-Cloud Logging הופעל בשירות לקצה העורפי:
kubectl get svc SERVICE_NAME --output yamlמחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_NAME: השם של שירות ה-Backend.
בפלט, מוודאים שהשדה
Status.Conditionsמכיל את הערכיםType: LoggingConfigManagedו-Reason: Reconciled.-
מחיקת שירות איזון העומסים החיצוני
כדי למחוק את שירות מאזן העומסים החיצוני לדוגמה store-v1-lb-svc, משתמשים בפקודה הבאה:
kubectl delete service store-v1-lb-svc
GKE מסיר באופן אוטומטי את כל משאבי מאזן העומסים שהוא יצר עבור שירות LoadBalancer חיצוני.
העברה לשרתי קצה של GCE_VM_IP NEG
שירותים מסוג LoadBalancer חיצוניים עם השדה spec.loadBalancerClass שמוגדר לערך networking.gke.io/l4-regional-external או עם ההערה cloud.google.com/l4-rbs: "enabled" יוצרים מאזני עומסים חיצוניים להעברת סיגנל ללא שינוי שמבוססים על שירות קצה עורפי, שמשתמשים בקבוצת נקודות קצה ברשת GCE_VM_IP או בקצה עורפי של קבוצת מופעים, בהתאם לגרסת GKE של האשכול:
אם קובץ המניפסט של השירות הוחל על אשכול שמריץ GKE בגרסה 1.32.2-gke.1652000 ואילך, מאזן עומסי הרשת החיצוני להעברת סיגנל ללא שינוי שנוצר משתמש בקצה העורפי של
GCE_VM_IPקבוצת נקודות קצה (endpoint) ברשת (NEG).אם קובץ המניפסט של השירות הוחל על אשכול שפועלת בו גרסה קודמת של GKE, מאזן עומסי רשת חיצוני מסוג passthrough שנוצר משתמש בקצה עורפי של קבוצת מופעים לא מנוהלת.
מידע נוסף זמין במאמר קיבוץ צמתים בנושא שירותי LoadBalancer.
אתם יכולים ליצור שירות LoadBalancer חיצוני חדש שמבוסס על מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות קצה עורפי ומשתמש בקצוות עורפיים של GCE_VM_IP NEG, אם השירות הקיים שלכם משתמש באחד ממאזני העומסים הבאים:
- מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות לקצה העורפי עם קצוות עורפיים של קבוצת מופעים
- מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על מאגר יעד
כדי לעבור למאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות קצה עורפי באמצעות קצוות עורפיים של GCE_VM_IP NEG:
אם עדיין לא עשיתם זאת, שדרגו את האשכול לגרסה 1.32.2-gke.1652000 של GKE או לגרסה חדשה יותר.
מזהים את שירות LoadBalancer החיצוני שרוצים להעביר למאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על שירות קצה עורפי באמצעות קצוות עורפיים של
GCE_VM_IPNEG. כדי לתאר את השירות, משתמשים בפקודה הבאה:kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACEמחליפים את מה שכתוב בשדות הבאים:
SERVICE_NAME: השם של שירות LoadBalancer חיצוני קיים.
SERVICE_NAMESPACE: מרחב השמות של שירות LoadBalancer חיצוני קיים.
בפלט פקודה, שימו לב לכתובת ה-IPv4 החיצונית של מאזן העומסים שמופיעה אחרי
LoadBalancer Ingress.מאחזרים את מניפסט השירות של שירות LoadBalancer הקיים:
הכי טוב אם יש לכם את מניפסט השירות המקורי שהחלפתם באשכול בעבר. לדוגמה, יכול להיות שזה יופיע במאגר של מערכת בקרת מקור.
אם אין לכם את מניפסט השירות המקורי:
מריצים את הפקודה הבאה כדי לקבל עותק YAML של מניפסט השירות שמייצג את ההטמעה הנוכחית של איזון העומסים:
kubectl get svc SERVICE_NAME -n SERVICE_NAMESPACE -o yamlמעתיקים את קובץ ה-YAML של המניפסט לכלי לעריכת טקסט. מסירים את המאפיין
statusואת המאפיינים הבאים:metadata- כל ההערות הבאות:
- ההערה
kubectl.kubernetes.io/last-applied-configuration - כל ההערות שמתחילות ב-
service.kubernetes.io
- ההערה
creationTimestampfinalizersresourceVersionuid
- כל ההערות הבאות:
מוודאים שקובץ המניפסט כולל את השדה
spec.loadBalancerClassעם הערךnetworking.gke.io/l4-regional-external. אם אתם מעבירים נתונים ממאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי שמבוסס על מאגר יעד, צריך להוסיף את השדה.
שומרים את קובץ המניפסט ורושמים לעצמכם איפה שמרתם אותו. בהמשך התהליך הזה, הנתיב שבו שמרתם את קובץ המניפסט נקרא MANIFEST_FILE_PATH.
מגדירים משאב של כתובת IPv4 חיצונית סטטית כדי להחזיק את כתובת ה-IPv4 החיצונית שמשמשת את מאזן העומסים הקיים:
gcloud compute addresses create IP_ADDRESS_NAME --region=CLUSTER_REGION --addresses LB_EXTERNAL_IPמחליפים את מה שכתוב בשדות הבאים:
IP_ADDRESS_NAME: השם של כתובת ה-IP החיצונית הסטטית. השם צריך לעמוד במוסכמות למתן שמות למשאבי Compute Engine.
CLUSTER_REGION: האזור שבו נמצא האשכול. במקרה של אשכולות אזוריים, זהו האזור שמכיל את התחום של האשכול.
LB_EXTERNAL_IP: כתובת ה-IPv4 החיצונית שבה נעשה שימוש במאזן העומסים הנוכחי, שנקבעה בשלב השני של התהליך הזה.
מוודאים שנוצר משאב של כתובת IPv4 חיצונית סטטית:
gcloud compute addresses describe IP_ADDRESS_NAME --region=CLUSTER_REGIONמחליפים את המשתנים כמו שמוסבר בשלב הקודם.
מוחקים את השירות הקיים:
kubectl delete svc SERVICE_NAME -n SERVICE_NAMESPACEמוסיפים את ההערה הבאה לקובץ המניפסט של שירות
MANIFEST_FILE_PATH:networking.gke.io/load-balancer-ip-addresses: IP_ADDRESS_NAMEמידע נוסף על ההערה הזו זמין במאמר כתובות IP סטטיות בפרמטרים של שירות LoadBalancer.
מחילים את מניפסט השירות המעודכן על האשכול:
kubectl apply -f MANIFEST_FILE_PATH(אופציונלי) משחררים את המשאב של כתובת ה-IPv4 הסטטית.
gcloud compute addresses delete IP_ADDRESS_NAME --region=CLUSTER_REGION
פתרון בעיות
בקטע הזה מתוארת בעיה שאולי תיתקלו בה כשאתם מגדירים איזון עומסים משוקלל.
מדיניות שגויה לגבי תנועה חיצונית לאיזון עומסים משוקלל
אם לא מגדירים את הערך externalTrafficPolicy: Local כשמפעילים איזון עומסים משוקלל, יכול להיות שתקבלו אירוע אזהרה כשמתארים את השירות באמצעות הפקודה הבאה:
kubectl describe svc store-v1-lb-svc`
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning UnsupportedConfiguration 4m55s loadbalancer-controller Weighted load balancing by pods-per-node has no effect with External Traffic Policy: Cluster.
כדי להפעיל בצורה יעילה איזון עומסים משוקלל, צריך להגדיר את הערך של externalTrafficPolicy: Local.
המאמרים הבאים
- סקירה כללית על שירותי מאזן עומסים זמינה במאמר בנושא שירותי LoadBalancer.
- תיאור של הפרמטרים של Load Balancer Services מופיע במאמר פרמטרים של LoadBalancer Service.
- פתרון בעיות באיזון עומסים ב-GKE