PracticU

הסבר על Kubernetes - Namespace

בלי כתוביותעם כתוביות
PracticU › קורס קוברנטיקס - Kubernetes › הסבר על Kubernetes - Namespace
מילון מושגים:
Kubernetes - מערכת לניהול ותזמור של קונטיינרים בקנה מידה גדול, שמפעילה, מרחיבה ומתחזקת אותם אוטומטית.
קלאסטר - קבוצת מחשבים או שרתים שעובדים יחד כמערכת אחת, לשם זמינות גבוהה, ביצועים או חלוקת עומס.
WordPress - מערכת ניהול תוכן בקוד פתוח לבניית אתרים ובלוגים, מבוססת PHP ומסד נתונים.
MySQL - מערכת ניהול מסדי נתונים יחסיים בקוד פתוח, נפוצה מאוד באתרים וביישומי אינטרנט.
חבילה - אוסף ארוז של קוד, ספריות או קבצים המופץ כיחידה אחת ומותקן בעזרת מנהל חבילות.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.

הסבר על Kubernetes - Namespace
הרצאה זו מדגימה בעיית אבטחה בקלאסטר שבו שני לקוחות, כל אחד עם WordPress ו-MySQL משלו, נמצאים באותו namespace, ומראה איך מפרידים ביניהם. הפתרון הראשון הוא namespace נפרד לכל לקוח, ואחריו הגבלת התקשורת בעזרת Network Policy.
הבעיה
כשכל האובייקטים נמצאים באותו namespace, פוד של לקוח אחד יכול להגיע לשירות של לקוח אחר. ההדגמה הראתה שאפשר לפתור שמות של שירותים מתוך פוד של לקוח אחד ולהגיע לשרת ה-MySQL של השני. תמונת הפוד הרגילה אינה כוללת כלי DNS וכלי MySQL, ולכן נדרשה התקנה של החבילות האלה לצורך ההדגמה.
איך מפרידים
1. קובץ הגדרות: kubeconfig שומר את כתובת השרת, שם המשתמש והמפתחות. הקובץ נמצא בתיקייה .kube בתיקיית המשתמש.
2. קובץ קסטומיזציה: קובץ בשם kustomization.yaml מרכז רשימה של כל קבצי ה-YAML. הפקודה kubectl apply -k מיישמת את כל הרשימה בפקודה אחת, ו-kubectl delete -k מוחקת את כל מה שברשימה.
3. יצירת namespace: namespace נוצר בקובץ YAML נפרד, עם שם ותוויות (labels). התוויות לא מבודדות דבר, אבל אפשר לחפש אובייקטים לפיהן.
4. שיוך אובייקטים: כל אובייקט מקבל את שם ה-namespace בשדה metadata. בלי שדה כזה האובייקט נוצר ב-default. בהרצאה נשכחה שורה כזאת בפוד MySQL, והוא נוצר במקום הלא נכון.
5. בדיקה: מומלץ לוודא שאין קבצים שנשכחו ברשימה. בהרצאה נשכח קובץ של namespace אחד, והוא נשאר לאחר המחיקה.
Network Policy
הפרדה ב-namespace לא מבודדת תקשורת. כדי לבודד תקשורת צריך אובייקט Network Policy. הפוליסה הראשונה חלה על כל הפודים ב-namespace של הלקוח הראשון, ומאפשרת כניסה רק ממי שנמצא באותו namespace. בפוליסה השנייה ב-namespace של הלקוח השני התקשורת בין הפודים מותרת. לאחר החלת הפוליסה הראשונה החיבור מהלקוח הראשון נחסם, ומחיקת הפוליסות החזירה את התקשורת.
שימו לב
כשלא מציינים namespace, הפקודות נשלחות ל-default. את ההגדרה הנוכחית אפשר לבדוק בפקודת kubectl config view. Network Policy מגביל תקשורת נכנסת ויוצאת לפי namespace ולפי תוויות, ואת ההרצאה אפשר לראות כהדגמה בלבד ולא כרשימה מלאה של אפשרויות ההגדרה.
הפרדת namespace מונעת התנגשות שמות וחלוקה של אובייקטים, ו-Network Policy מוסיף את הבידוד ברמת התקשורת.
השיעור הבא בקורס: הסבר על Kubernetes - RBAC - Users & Roles

פרקי ההרצאה: הסבר על Kubernetes - Namespace

  1. 00:00

    בעיית אבטחה: כולם באותו Namespace

  2. 00:43

    בדיקת הבעיה לפני הפתרון

  3. 01:27

    קובץ kubeconfig: חיבור לקלאסטר ולמשתמש

  4. 04:04

    ניהול כל הקבצים עם kustomization

  5. 06:41

    יצירת Namespace נפרד לכל לקוח

  6. 09:07

    שיוך אובייקטים ל-Namespace

  7. 10:32

    בדיקת ה-Context הנוכחי

  8. 12:38

    שיוך Deployment ו-Service ל-Namespace

תמלול ההרצאה: הסבר על Kubernetes - Namespace

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

  1. 00:02

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

  2. 00:33

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

  3. 00:55

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

  4. 01:18

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

  5. 01:53

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

  6. 02:20

    בקיצור אני לוקח את כל הקובץ הזה, עושה לו קופי לתיקיית הבית, לתיקיית הבית יש פה נקודה קיוב. בואו נראה, עוד פעם קופי, הולך לתיקיית הבית.

  7. 02:41

    הוא אומר לו להראות לי את כל התיקיות הסודיות גם כן. שהוא hidden, מה זה hidden? משהו שמתחיל בנקודה.

  8. 02:50

    ויש לנו פה ב-hidden קיוב, שזה ה-client של הקיוב, כן? תראו, יש לנו את ה-client של הדוקר, זוכרים כל ההגדרות של דוקר קליינט? וזה כל ההגדרות של קיוב CTL, הקליינט ואנחנו מחליפים את הקובץ הזה זאת אומרת אנחנו עושים קופי פייסט יש פה קובץ קונפיג כנראה שזה איזשהו קונפיג שמשהו פה לא עובד לא יודע מה לא עובד כאן

  9. 03:18

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

  10. 03:58

    עכשיו אני רוצה להרוג את כל מה שעשינו איתכם ביחד, כל מה שעשינו לא טוב לי, למה? כי אין הפרדה בין name space אחד לשני, אין הפרדה בין היוזרים, אני רוצה שנקים פודים וסרוויסים, אז אני פותח טרמינל פה, ואני אראה לכם עכשיו משהו, יש לי קובץ customization.yaml, הוא חייב להיקרא ככה,

  11. 04:26

    ויש פה רשימה של כל קבצי הyaml, ואז מה שקורה, אתם רואים יש פה שבע קבצים, שזה בדיוק כל השבע קבצים שנמצאים פה, שמונה פחות אחד שבע, ואז מה שאני עושה, אני עושה במכה אחת קיוב סיטי-אל דליט, תמחק לי, לא מינוס F אלא מינוס K, K זה קוסטומיזיישן, ואומר לו באיזה תיקייה, בתיקה נוכחית,

  12. 04:52

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

  13. 05:18

    הכל מההתחלה כן שימו לב הופה יוצר לי הכל מההתחלה כך אני לוקח כמה קבצי יאמל שם אותם ברשימה אחת בתוך קובץ קוסטומיזיישן ואז כשאני מעריץ אז הוא מבצע אותם אז קיוב סיטי אל נניח get services, הנה הוא יצר לי את כל הסרוויסים, get pods, הוא יצר לי את כל הפודים, שזה מאחורי הקלעים, קונטיינרים,

  14. 05:48

    ועכשיו אני רוצה למחוק את הכל ולעשות הפרדה, ליצור עוד name space אחד. אז מחקנו את הכל, בואו נלך לתיקייה שלי בדסקטופ, הכנתי פה הכל מראש כמובן, נעשה open in terminal, kubectl get nodes, הכל עובד, get pods, אין כלום,

  15. 06:25

    get services, יש רק אחד של קוברנטיס, זה שמקבל API, את כל הפניות של API שלי. טוב, אז אנחנו רוצים לדבר איך אנחנו יוצרים ניימספייס חדש.

  16. 06:43

    עכשיו אני אראה לכם עד שהוא נפתח, שאם אתם תבואו לניימספייסס אנחנו יכולים ללחוץ קריאייט, וכשלוחצים קריאייט מה מקבלים?

  17. 06:55

    קובץ ימל API version 1 kind namespace, ותרשום לבד הלאה מה שאתה רוצה. איזה כיף לנו, ואי אפשר לבחור ניימספייס, כן? כי אנחנו כביכול ברמת שרת יוצרים ניימספייס.

  18. 07:11

    יש. אז זה לא באמת עוזר לי, הממשק הגרפי פה נורא אי, אבל יש לנו פה קובץ ימל שאני הכנתי שמכין את הניימספייס כמו שראינו, נותן לו איזשהו שם, וגם אני נותן לו איזה שם לייבלים.

  19. 07:40

    נניח שזה קרוז, הוא הלקוח השני שלנו, והוא כועס על זה שה-Namespace שלו זמין לכולם. שימו לב, זה לייבלים חסרי משמעות. סתם אני מראה לכם איך לתלות לייבלים.

  20. 07:52

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

  21. 08:04

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

  22. 08:44

    ואנחנו כמובן גם יכולים לעשות קיוב ctl get namespaces ולראות את כל הניימספייסים זה החדש שעשינו כרגע יפה מאוד טוב אז עשינו ניימספייס עכשיו אנחנו צריכים לשייך לניימספייס הזה אובייקטים, נכון?

  23. 09:07

    לשייך אליו אובייקטים של הקליינט 2. איך אנחנו עושים את זה? מאוד פשוט, אנחנו באים ל-MySQL של קליינט 2 ומוסיפים לו רק שורה הזאת, ניימספייס והשם של הניימספייס.

  24. 09:23

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

  25. 09:35

    הוא הולך לדיפולט. דרך אגב, כל פקודה שאני שולח, קיוב CTL, איך זה הולך? קונפיקט ויו, בואו נראה בצ'יט. זה הצ'יט שלי, ויש פה ניימספייס, בואו נחפש ניימספייס, הנה ניימספייס, ניימספייס, איפה כל הניימספייסים?

  26. 10:26

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

  27. 10:59

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

  28. 11:48

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

  29. 12:31

    יופי אז יש לנו קליינט אחד וקליינט שתיים יופי יש לנו שני ניימספייסים עכשיו אנחנו רוצים לקחת ולהתחיל לשייך אובייקטים לכל ניימספייס אז זה שייך לניימספייס 1 וזה הולך להיות deployment לניימספייס 2. זה אובייקט של deployment שפורס לי את הבודים.

  30. 13:02

    יופי. זה הכל מה שיש פה. אני מחפש כל המקומות שיש בהם פריצה של אובייקטים. אז כאן עשינו, רק אנחנו צריכים פה קליינט 1, כן?

  31. 13:12

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

  32. 13:26

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

  33. 13:51

    לקליינט 2 אני רואה הוא שייך לניימספייס 2 וגם כאן הוא משוייך לניימספייס 2. Terrific Web UI בכלל שייך לסיסטם, כן, כל ה-Terrific הזה שייך לעולם של הסיסטם.

  34. 14:07

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

  35. 14:21

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

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

ההרצאה הקודמת: הסבר על Kubernetes - Ingrees

ההרצאה הבאה: הסבר על Kubernetes - RBAC - Users & Roles

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

  • הסבר על Kubernetes
  • מרחבי שמות - namespace
  • שינוי מרחב השמות - Namespace

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

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