PracticU

הגדרת Service
מסוג NodePort
בתוך Kubernetes

בלי כתוביותעם כתוביות
PracticU › קורס קוברנטיקס - Kubernetes › הגדרת Service מסוג NodePort בתוך Kubernetes
מילון מושגים:
Kubernetes - מערכת לניהול ותזמור של קונטיינרים בקנה מידה גדול, שמפעילה, מרחיבה ומתחזקת אותם אוטומטית.
קלאסטר - קבוצת מחשבים או שרתים שעובדים יחד כמערכת אחת, לשם זמינות גבוהה, ביצועים או חלוקת עומס.
סלקטור - ביטוי, בעיקר ב-CSS, שבוחר אילו רכיבים בדף יושפעו מכלל עיצוב או פעולה.
API - ממשק תכנותי שמגדיר כיצד תוכנה אחת פונה לאחרת ומחליפה איתה נתונים ופעולות.
חומת אש - מערכת שמסננת תעבורת רשת לפי כללים, ומתירה או חוסמת חיבורים כדי להגן על מחשב או רשת.
TCP - פרוטוקול תקשורת אמין שמוודא שכל חבילות המידע מגיעות ליעד בשלמות ובסדר הנכון.
פרוקסי - שרת מתווך שמעביר בקשות בין לקוח ליעד, ויכול לשמש להסתרה, לסינון, למטמון או לבקרת גישה.

הגדרת Service מסוג NodePort בתוך Kubernetes
כש-service מסוג ClusterIP לא מספיק כי הלקוח נמצא מחוץ ל-cluster, משתמשים ב-NodePort: הוא פותח פורט בשרתים הפיזיים (ה-nodes) ומעביר את התקשורת פנימה.
השלבים העיקריים
1. ההבדל מ-ClusterIP: ה-service מקבל תקשורת גם מבפנים וגם מפורט פתוח בכל node. בהגדרה מוסיפים type: NodePort וכותבים איזה פורט לפתוח, בדוגמה 3007.
2. מסלול התקשורת: לקוח פונה ל-IP של node בפורט 3007, משם ל-service בפורט 80 ומשם לפוד בפורט 80. ה-service בוחר פודים לפי ה-selector והתווית, כמו קודם.
3. יצירה: kubectl apply -f . יצר שני פודים ואת payment API service. ב-kubectl get service רואים שפורט 80 ממופה ל-3007 בכל ה-nodes.
4. Firewall בענן: כדי להגיע מהאינטרנט נוצר חוק allow-node-port-site שמתיר TCP 3007 בכיוון ingress, בעזרת gcloud compute firewall-rules create.
5. גישה מבחוץ: kubectl get nodes -o wide מציג כתובות IP, ומתוך עמודת ה-external בוחרים כתובת של node כלשהו וגולשים אליה עם :3007.
6. עמידות לנפילה: אחרי מחיקת הפוד הראשון הלקוח המשיך לפנות לאותה כתובת וקיבל מענה מהפוד השני, כי כל הפודים נוצרו מאותו image.
7. מי מבצע בפועל: kube-proxy ממפה את תקשורת ה-service לפוד הספציפי, באמצעות IP tables או routing משלו.
8. בדיקה פנימית: מתוך פוד test server אפשר לגלוש לשם ה-service בפורט 80, וגם זה עבד.
פקודות והגדרות
- kubectl describe service מציג type NodePort, פורט 80, את פורט ה-node 3007, את ה-selector ואת ה-endpoints.
- בסיום מוחקים את הפודים, את ה-services ואת חוק ה-Firewall (gcloud compute delete עם שם החוק ואישור Yes).
בסוף ההרצאה אפשר לחשוף service לתקשורת חיצונית דרך פורט של ה-node, ולזכור לפתוח את הפורט גם ב-Firewall של הענן.
השיעור הבא בקורס: הגדרת Service מסוג Load Balancer בתוך Kubernetes

פרקי ההרצאה: הגדרת Service מסוג NodePort בתוך Kubernetes

  1. 00:00

    NodePort מול service פנים-קלסטרי

  2. 00:42

    פתיחת פורט בשרת הפיזי

  3. 01:21

    הגדרת type NodePort ופורט

  4. 02:01

    פנייה דרך ה-IP הפיזי

  5. 02:35

    בדיקת מיפוי הפורטים

תמלול ההרצאה: הגדרת Service מסוג NodePort בתוך Kubernetes

הטקסט המלא של הדקות הראשונות בהרצאה «הגדרת Service מסוג NodePort בתוך Kubernetes» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום לכולם. היום אנחנו נדבר על הסוג השני של הסרוויס שפתוח לעולם החיצון. בהרצאה הקודמת דיברנו על סרוויס שהוא פנים קלסטרי.

  2. 00:14

    רק פודים יכולים לפנות אליו. אבל מה קורה אם הטראפיק שלי הוא לא בתוך הקלסטר? אז אני יכול להשתמש בסוג השני שנקרא Node Port.

  3. 00:25

    פה הסרוויס מקבל תקשורת לא רק מבפנים אלא גם מפורט פתוח בשרת הפיזי. זאת אומרת השרתים הפיזיים שמריצים את הקלסטר, הנודים, נפתח אצלהם פורט ואפשר לשלוח תקשורת מבחוץ ל-IP של השרת הפיזי והוא מעביר את התקשורת פנימה לסרוויס שעובד ברשת הפנימית.

  4. 00:47

    זאת אומרת שעכשיו אנחנו מתחילים להאזין ברמת השרת הפיזי, ברמת הנוד, וזה נקרא Node Port. האמת זה די אותו דבר כמו הקלסטר IP הקודם, רק פשוט התקשורת לסרוויס הזה יכולה גם להגיע מפורט בשרת הפיזי.

  5. 01:05

    איך עושים את זה? קודם כל בהגדרה של הסרוויס מוסיפים את הטייפ שלו, Node Port, והדבר השני פה למטה אני כותב איזה פורט לפתוח בשרת הפיזי. נניח שלושת אלפים ושבע.

  6. 01:18

    אז הלקוחות יפנו לשלושת אלפים ושבע, הוא יעביר את זה לתוך הסרוויס, במקרה הזה פורט שמונים, והסרוויס יעביר את זה לתוך הפוד בפורט שמונים. בואו נעשה פה רייט קליק על הקובץ Open, Open Folder in CMD.

  7. 01:34

    אנחנו בתוך תיקייה שיש בתוכה קבצי YAML שמגדירים לנו את הפודים ואת הסרוויס. לפני שאני אפעיל אותו אני רוצה להדגיש עוד הפעם שהסרוויס בוחר את הפוד לפי הסלקטור, לפי התווית, שזאת בדיוק התווית ששמתי פה על הפוד השני וגם על הפוד הראשון, ולכן הסרוויס הזה ישלח את התקשורת גם לפוד הראשון, גם לפוד השני, ואנחנו כלקוחות מהאינטרנט נצטרך לפנות ל-IP הפיזי של הקוברנטיס של השרת הפיזי, נניח בפורט שלושת אלפים ושבע.

  8. 02:08

    בואו נחזור חזרה ל-CLI ונריץ kubectl apply מינוס F שיבנה לי את כל האובייקטים מתוך קבצי YAML בתיקייה הנוכחית. נקודה זה תיקייה נוכחית. הנה server אחד created, הנה הפוד בשם server שתיים created והנה הסרוויס בשם payment API service created.

  9. 02:27

    בואו נבדוק שהכול באמת נוצר. נעשה get pods. רואים את שני הפודים. get service. נראה שהסרוויס שלנו נוצר.

  10. 02:35

    שימו לב פה בפורט כתוב שפורט שמונים של הסרוויס ממופה לפורט שלושת אלפים ושבע של כל השרתים הפיזיים שקיימים. שימו לב כל הנודים בקלסטר פתחו כרגע פורט שלושת אלפים ושבע, ואם אני מהאינטרנט אפנה אליהם אני אכנס לתוך הסרוויס הזה.

  11. 02:53

    רק צריך לפתוח את ה-Firewall בענן. אני מריץ פקודה gcloud compute firewall

לקורס המלא: קורס קוברנטיס – Kubernetes

ההרצאה הקודמת: הגדרת Service - מסוג ClusterIP - בתוך Kubernetes

ההרצאה הבאה: הגדרת Service - מסוג Load Balancer - בתוך Kubernetes

הרצאות קשורות מקורסים אחרים

  • הגדרת צרכן ל-Service
  • הגדרת Cluster מסוג NLB - שרת 2016
  • הגדרת vLAN - בתוך ESXi
  • הגדרת VPN בתוך Kali

קורסים נוספים במסלול

  • קורס AWS - ניהול מכונה וירטואלית בענן
  • קורס Terraform - DevOps - Azure & AWS
  • קורס Docker - עם Swarm Cluster
  • קורס DevOps - Ansible
  • קורס PowerShell
  • קורס Git ו-GitHub עם Visual Studio