במדריך הזה מוסבר איך להפעיל אפליקציית אינטרנט מאחורי מאזן עומסים חיצוני של אפליקציות על ידי הגדרת משאב Ingress.
הדף הזה מיועד למומחי רשתות שתפקידם לתכנן את הרשת של הארגון, להתקין ציוד רשת, להגדיר אותו ולתת לו תמיכה. כדי לקבל מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בGoogle Cloud תוכן, אפשר לעיין במאמר תפקידים נפוצים של משתמשי GKE ומשימות.
רקע
Google Kubernetes Engine (GKE) מציע תמיכה משולבת בשני סוגים של Cloud Load Balancing לאפליקציה שזמינה לציבור:
במדריך הזה משתמשים ב-Ingresses.
תעבורת נתונים נכנסת (Ingress)
כשמציינים kind: Ingress במניפסט של משאב, נותנים ל-GKE הוראה ליצור משאב Ingress. אפשר ליצור בקר Ingress בהתאמה אישית על ידי הוספת הערות ותמיכה בעומסי עבודה ובשירותים.
אחרת, GKE מבצע קריאות מתאימות ל-API של Google Cloud Google Cloud כדי ליצור מאזן עומסים חיצוני של אפליקציות. כללי המארח והתאמת הנתיבים במפת כתובות ה-URL של מאזן העומסים מפנים לשירותי קצה עורפיים אחד או יותר, כאשר כל שירות קצה עורפי תואם לשירות GKE מסוג NodePort, כפי שמצוין ב-Ingress. הבק-אנדים של כל שירות לקצה העורפי הם קבוצות של מכונות או קבוצות של נקודות קצה ברשת (NEGs). קבוצות NEG נוצרות כשמגדירים איזון עומסים ברמת הקונטיינר כחלק מההגדרה של Ingress. לכל שירות לקצה העורפי, GKE יוצר בדיקת תקינות על סמך הגדרות בדיקת המוכנות של עומס העבודה שאליו מתייחס השירות המתאים של GKE. Google Cloud
אם אתם חושפים שירות HTTP(S) שמתארח ב-GKE, איזון עומסים מסוג HTTP(S) היא השיטה המומלצת לאיזון עומסים.
מטרות
- יוצרים אשכול GKE.
- פורסים את אפליקציית האינטרנט לדוגמה באשכול.
- חשיפת האפליקציה לדוגמה לאינטרנט מאחורי מאזן עומסים חיצוני של אפליקציות (ALB).
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אפשר להשתמש במחשבון התמחור.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
כדי להפעיל את Kubernetes Engine API:- נכנסים ל דף Kubernetes Engine במסוף Google Cloud .
- יוצרים או בוחרים פרויקט.
- מחכים עד שממשק ה-API והשירותים הקשורים מופעלים. הפעולה יכולה להימשך כמה דקות.
-
Verify that billing is enabled for your Google Cloud project.
מתקינים את כלי שורת הפקודה הבאים שמשמשים במדריך הזה:
-
הדגל
gcloudמשמש ליצירה ולמחיקה של אשכולות Kubernetes Engine. gcloudכלול ב-gcloudCLI. -
kubectlמשמש לניהול Kubernetes, מערכת תזמור האשכולות שמשמשת את Kubernetes Engine. אפשר להתקין אתkubectlבאמצעותgcloud:gcloud components install kubectl
משכפלים את הקוד לדוגמה מ-GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/networking/load-balancing
הגדרת ברירות מחדל לכלי שורת פקודה gcloud
כדי לחסוך זמן בהקלדת מזהה הפרויקט ואפשרויות אזור Compute Engine בכלי gcloud של שורת הפקודה, אפשר להגדיר את ברירות המחדל:
gcloud config set project project-id gcloud config set compute/zone compute-zone
יצירת אשכול GKE
יוצרים אשכול GKE Autopilot:
gcloud container clusters create-auto loadbalancedcluster
פריסת אפליקציית אינטרנט
קובץ המניפסט הבא מתאר פריסה שמריצה את קובץ האימג' של קונטיינר אפליקציית האינטרנט לדוגמה בשרת HTTP ביציאה 8080:
החלת המשאב על האשכול:
kubectl apply -f web-deployment.yaml
חשיפת הפריסה בתוך האשכול
המניפסט הבא מתאר Service שמאפשר גישה לפריסת web בתוך אשכול הקונטיינרים:
החלת המשאב על האשכול:
kubectl apply -f web-service.yaml
כשיוצרים שירות מסוג NodePort באמצעות הפקודה הזו, GKE מאפשר גישה לשירות במספר יציאה גבוה שנבחר באופן אקראי (למשל, 32640) בכל הצמתים באשכול.
מוודאים שהשירות נוצר ושהוקצתה יציאת צומת:
פלט:kubectl get service web
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.35.245.219 <none> 8080:32640/TCP 5m
בדוגמה של הפלט, יציאת הצומת של שירות
webהיא32640. בנוסף, חשוב לזכור שלא מוקצית כתובת IP חיצונית לשירות הזה. מכיוון שצמתי GKE לא נגישים חיצונית כברירת מחדל, יצירת השירות הזה לא מאפשרת גישה לאפליקציה מהאינטרנט.
כדי להפוך את אפליקציית שרת האינטרנט HTTP(S) לזמינה לציבור, צריך ליצור משאב Ingress.
יצירת משאב Ingress
Ingress הוא משאב Kubernetes שמכיל אוסף של כללים והגדרות לניתוב תנועת HTTP(S) חיצונית לשירותים פנימיים.
ב-GKE, Ingress מיושם באמצעות Cloud Load Balancing. כשיוצרים Ingress באשכול, GKE יוצר מאזן עומסים ב-HTTP(S) ומגדיר אותו להפניית תנועה לאפליקציה.
קובץ המניפסט הבא מתאר משאב Ingress שמפנה תנועה לשירות web:
החלת המשאב על האשכול:
kubectl apply -f basic-ingress.yaml
אחרי שמבצעים פריסה של המניפסט הזה, Kubernetes יוצר משאב Ingress באשכול. בקר ה-Ingress של GKE יוצר ומגדיר מאזן עומסים מסוג HTTP(S) בהתאם למידע ב-Ingress, ומנתב את כל תנועת ה-HTTP החיצונית (ביציאה 80) לשירות NodePort web שחשפתם.
כניסה לאפליקציה
כדי לגלות את כתובת ה-IP החיצונית של מאזן העומסים שמשרת את האפליקציה, מריצים את הפקודה הבאה:
kubectl get ingress basic-ingress
NAME HOSTS ADDRESS PORTS AGE basic-ingress * 203.0.113.12 80 2m
פותחים את כתובת ה-IP החיצונית של האפליקציה בדפדפן ורואים תגובת HTTP בטקסט פשוט, כמו בדוגמה הבאה:
Hello, world! Version: 1.0.0 Hostname: web-6498765b79-fq5q5
אפשר להיכנס אל Load Balancing במסוף Google Cloud ולבדוק את משאבי הרשת שנוצרו על ידי בקר GKE Ingress.
(אופציונלי) הגדרת כתובת IP קבועה
כשחושפים שרת אינטרנט בשם דומיין, צריך שכתובת ה-IP החיצונית של האפליקציה תהיה כתובת IP סטטית שלא משתנה.
כברירת מחדל, GKE מקצה כתובות IP חיצוניות זמניות לאפליקציות HTTP שנחשפות דרך Ingress. כתובות זמניות עשויות להשתנות. אם אתם מתכננים להפעיל את האפליקציה שלכם למשך זמן רב, אתם צריכים להשתמש בכתובת IP חיצונית סטטית.
שימו לב: אחרי שמגדירים כתובת IP סטטית למשאב Ingress, מחיקה של ה-Ingress לא מוחקת את כתובת ה-IP הסטטית שמשויכת אליו. חשוב לנקות את כתובות ה-IP הסטטיות שהגדרתם כשאתם כבר לא מתכננים להשתמש בהן שוב.
כדי להגדיר כתובת IP קבועה, מבצעים את השלבים הבאים:
שמירת כתובת IP חיצונית סטטית בשם
web-static-ip:gcloud
gcloud compute addresses create web-static-ip --global
Config Connector
הערה: כדי לבצע את השלב הזה, צריך להשתמש ב-Config Connector. פועלים לפי הוראות ההתקנה כדי להתקין את Config Connector באשכול.
כדי לפרוס את קובץ המניפסט הזה, מורידים אותו למחשב בתור compute-address.yaml ומריצים את הפקודה:kubectl apply -f compute-address.yaml
המניפסט
basic-ingress-static.yamlמוסיף הערה ל-Ingress כדי להשתמש במשאב כתובת ה-IP הסטטית שנקראweb-static-ip:צפייה במניפסט:
cat basic-ingress-static.yaml
החלת המשאב על האשכול:
kubectl apply -f basic-ingress-static.yaml
בודקים את כתובת ה-IP החיצונית:
kubectl get ingress basic-ingress
מחכים עד שכתובת ה-IP של האפליקציה משתנה לכתובת ה-IP השמורה של משאב
web-static-ip.יכול להיות שיעברו כמה דקות עד שמשאב ה-Ingress הקיים יתעדכן, מאזן העומסים (LB) יוגדר מחדש וכללי איזון העומסים יופצו בכל העולם. אחרי שהפעולה הזו מסתיימת, GKE משחרר את כתובת ה-IP הזמנית שהוקצתה קודם לאפליקציה.
(אופציונלי) הצגת כמה אפליקציות במאזן עומסים
אפשר להפעיל כמה שירותים במאזן עומסים אחד ובכתובת IP ציבורית אחת על ידי הגדרת כללי ניתוב ב-Ingress. אם מארחים כמה שירותים באותו Ingress, אפשר להימנע מיצירה של מאזני עומסים נוספים (שהם משאבים שניתנים לחיוב) לכל שירות שחושפים לאינטרנט.
המניפסט הבא מתאר פריסה עם גרסה 2.0 של אותה אפליקציית אינטרנט:
החלת המשאב על האשכול:
kubectl apply -f web-deployment-v2.yaml
המניפסט הבא מתאר שירות שחושף את web2 באופן פנימי לאשכול בשירות NodePort שנקרא web2:
החלת המשאב על האשכול:
kubectl apply -f web-service-v2.yaml
המניפסט הבא מתאר משאב Ingress ש:
- מנתב את הבקשות עם הנתיב שמתחיל ב-
/v2/לשירותweb2 - מעבירה את כל שאר הבקשות אל
webהשירות
החלת המשאב על האשכול:
kubectl create -f fanout-ingress.yaml
אחרי הפריסה של Ingress, מריצים את הפקודה kubectl get ingress fanout-ingress כדי לגלות את כתובת ה-IP הציבורית של האשכול.
לאחר מכן, נכנסים לכתובת ה-IP כדי לוודא שאפשר להגיע לשתי האפליקציות באותו מאזן עומסים:
- נכנסים אל
http://<IP_ADDRESS>/ורואים שהתגובה מכילה אתVersion: 1.0.0(כי הבקשה מנותבת לשירותweb) - נכנסים אל
http://<IP_ADDRESS>/v2/ורואים שהתגובה מכילה אתVersion: 2.0.0(כי הבקשה מנותבת לשירותweb2)
התו הכללי היחיד שאפשר להשתמש בו בשדה path של Ingress
הוא התו *. התו * חייב להופיע אחרי קו נטוי (/) ולהיות התו האחרון בתבנית. לדוגמה, /*, /foo/* ו-/foo/bar/* הן תבניות תקינות, אבל *, /foo/bar* ו-/foo/*/bar לא תקינות.
דפוס ספציפי יותר מקבל עדיפות על פני דפוס פחות ספציפי. אם יש לכם גם /foo/* וגם /foo/bar/*, המערכת תתייחס ל-/foo/bar/bat כאילו הוא תואם ל-/foo/bar/*.
מידע נוסף על מגבלות הנתיב והתאמת התבניות זמין במסמכי התיעוד בנושא מיפויי כתובות URL.
(אופציונלי) מעקב אחרי הזמינות והחביון של השירות
Google Cloud בדיקות זמני פעילות מבצעות מעקב של אפליקציות מנקודת המבט של המשתמש, וקובעות את זמן האחזור והזמינות מכתובות IP חיצוניות שונות לכתובת ה-IP של מאזן העומסים. לעומת זאת, Google Cloud בדיקות תקינות מבצעות בדיקה פנימית מול כתובות ה-IP של ה-Pod, וקובעות את הזמינות ברמת המופע. הבדיקות משלימות זו את זו ומספקות תמונה הוליסטית של תקינות האפליקציה.
אפשר ליצור בדיקת זמינות באמצעות מסוף Google Cloud, Cloud Monitoring API או ספריות הלקוח של Cloud Monitoring. Google Cloud מידע נוסף זמין במאמר בנושא ניהול בדיקות זמינות. כדי ליצור בדיקת זמני פעילות באמצעות מסוף Google Cloud :
נכנסים לדף Services & Ingress במסוף Google Cloud .
לוחצים על השם של השירות שעבורו רוצים ליצור בדיקת זמינות.
לוחצים על יצירת בדיקת זמינות.
בחלונית Create Uptime Check, מזינים שם לבדיקת זמינות ולוחצים על Next כדי לעבור להגדרות Target.
השדות Target של בדיקת הזמינות מאוכלסים באופן אוטומטי באמצעות המידע ממאזן העומסים של השירות.
מסמכים מלאים על כל השדות בבדיקת זמני פעילות זמינים במאמר בנושא יצירת בדיקה של זמני פעילות.
לוחצים על הבא כדי לעבור להגדרות של אימות תשובות.
לוחצים על הבא כדי לעבור לקטע התראות והודעות.
כדי לעקוב אחרי בדיקת זמני פעילות, אפשר ליצור כללי מדיניות התראות או להציג את לוח הבקרה של בדיקת זמני הפעילות. מדיניות התראות יכולה לשלוח לכם התראה באימייל או בערוץ אחר אם בדיקת זמן הפעולה שלכם נכשלת. מידע כללי על מדיניות התראות זמין במאמר מבוא להתראות.
מוסבר איך ליצור מדיניות התראות כפעולה עצמאית.לוחצים על יצירה.
הערות
כברירת מחדל, Ingress מבצע בדיקת תקינות תקופתית על ידי שליחת בקשת GET בנתיב / כדי לקבוע את תקינות האפליקציה, ומצפה לתגובה מסוג HTTP 200. אם רוצים לבדוק נתיב אחר או לצפות לקוד תגובה אחר, אפשר להשתמש בנתיב מותאם אישית לבדיקת תקינות.
Ingress תומך בתרחישי שימוש מתקדמים יותר, כמו:
אירוח וירטואלי מבוסס-שם: אפשר להשתמש ב-Ingress כדי לעשות שימוש חוזר במאזן העומסים עבור כמה שמות דומיינים ותתי-דומיינים, וכדי לחשוף כמה שירותים בכתובת IP אחת ובמאזן עומסים אחד. כדי ללמוד איך להגדיר Ingress למשימות האלה, אפשר לעיין בדוגמאות של fanout פשוט ושל אירוח וירטואלי מבוסס-שם.
סיום HTTPS: אפשר להגדיר את Ingress כדי לסיים את תעבורת ה-HTTPS באמצעות Cloud Load Balancer.
כשמוחקים Ingress, בקר ה-Ingress של GKE מנקה באופן אוטומטי את המשאבים המשויכים (למעט כתובות IP סטטיות שמורות).
הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במדריך הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מוחקים כל כללי העברה ושרתי proxy של יעד שנוצרו באופן ידני ומפנים אל Ingress:
פרוקסי יעד תלוי באוויר שמפנה למפת URL מנוהלת של בקר GKE Ingress יגרום למחיקה של Ingress להיכשל ב-GKE בגרסאות 1.15.4-gke.22 ואילך. כדאי לבדוק את משאב ה-Ingress כדי למצוא אירוע עם הודעת שגיאה שדומה להודעה הבאה:
Error during GC: error running load balancer garbage collection routine: googleapi: Error 400: The url_map resource 'projects/project-id/global/urlMaps/k8s2-um-tlw9rhgp-default-my-ingress-9ifnni82' is already being used by 'projects/project-id/global/targetHttpsProxies/k8s2-um-tlw9rhgp-default-my82-target-proxy', resourceInUseByAnotherResource
בהודעת השגיאה שלמעלה,
k8s2-um-tlw9rhgp-default-my82-target-proxyהוא שרת proxy של יעד HTTPS שנוצר באופן ידני ועדיין מפנה למפת ה-URLk8s2-um-tlw9rhgp-default-my-ingress-9ifnni82שנוצרה ונוהלה על ידי בקר Ingress.צריך למחוק את משאבי ה-Frontend שנוצרו באופן ידני (גם כלל ההעברה וגם שרת היעד הפרוקסי) לפני שממשיכים במחיקה של Ingress.
מוחקים את ה-Ingress: בשלב הזה מתבטלת ההקצאה של כתובת ה-IP החיצונית הזמנית ושל משאבי איזון העומסים שמשויכים לאפליקציה:
kubectl delete ingress basic-ingress
אם ביצעתם את השלב האופציונלי ליצירת Ingress כדי לנתב בקשות לפי נתיב, צריך למחוק את ה-Ingress:
kubectl delete ingress fanout-ingress
מחיקת כתובת ה-IP הסטטית: מבצעים את השלב הזה רק אם ביצעתם את השלב האופציונלי ליצירת כתובת IP סטטית.
אם פעלתם לפי 'אפשרות 1' כדי להמיר כתובת IP זמנית קיימת לכתובת IP סטטית, אתם צריכים להיכנס למסוףGoogle Cloud כדי למחוק את כתובת ה-IP הסטטית.
אם פעלתם לפי 'אפשרות 2' כדי ליצור כתובת IP סטטית חדשה, מריצים את הפקודה הבאה כדי למחוק את כתובת ה-IP הסטטית:
gcloud compute addresses delete web-static-ip --global
מחיקת האשכול: בשלב הזה יימחקו צמתי החישוב של אשכול הקונטיינרים ומשאבים אחרים, כמו פריסות באשכול:
gcloud container clusters delete loadbalancedcluster
המאמרים הבאים
- פרטים נוספים על התכונות של Ingress זמינים במדריך למשתמש של Ingress.
- הגדרת כתובת IP סטטית ושם דומיין לאפליקציית Ingress באמצעות Ingress.
- מגדירים אישורי SSL למאזן העומסים של Ingress.
- מידע נוסף על שימוש באישור SSL בניהול Google עם Ingress
אם יש לכם אפליקציה שפועלת בכמה אשכולות של Kubernetes Engine באזורים שונים, אתם יכולים להגדיר Ingress מרובה אשכולות כדי לנתב את תעבורת הנתונים לאשכול באזור הקרוב ביותר למשתמש.
אפשר לעיין במדריכים נוספים בנושא Kubernetes Engine.
כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.