PracticU

הסבר על secret
Kubernetes

בלי כתוביותעם כתוביות
PracticU › קורס קוברנטיקס - Kubernetes › הסבר על secret Kubernetes
מילון מושגים:
Kubernetes - מערכת לניהול ותזמור של קונטיינרים בקנה מידה גדול, שמפעילה, מרחיבה ומתחזקת אותם אוטומטית.
פריסה - העברת תוכנה מסביבת פיתוח לסביבה שבה היא תרוץ בפועל, כדי להעמידה לשימוש.
GitHub - שירות ענן לאחסון מאגרי קוד מבוססי Git, המאפשר שיתוף פעולה, מעקב גרסאות וניהול פרויקטים.
משתנה סביבה - ערך בעל שם שמוגדר במערכת ההפעלה ומשמש תוכנות להגדרות, כמו נתיבים או מפתחות תצורה.
קונטיינר - חבילה קלה ומבודדת שאורזת אפליקציה עם כל תלויותיה, ורצה באופן אחיד בכל סביבה, למשל ב-Docker.
Base64 - שיטת קידוד שממירה נתונים בינאריים לטקסט מתווים מודפסים, כדי להעבירם בבטחה בערוצים טקסטואליים.
Bash - מעטפת שורת פקודה נפוצה במערכות Linux, המשמשת להרצת פקודות ולכתיבת סקריפטים.
API - ממשק תכנותי שמגדיר כיצד תוכנה אחת פונה לאחרת ומחליפה איתה נתונים ופעולות.

הסבר על secret Kubernetes
מידע רגיש כמו שם משתמש וסיסמה ל-database לא צריך לשבת בגלוי בקובץ ה-deployment, כי הקובץ הזה עלול להגיע ל-GitHub. ההרצאה מראה איך להפריד אותו לאובייקט secret.
איך זה עובד
1. משתני סביבה: בהגדרת הקונטיינר אפשר לתת ערך ישירות, למשל app log level עם הערך error. זה בסדר לערך רגיל, אבל לא לשם משתמש או סיסמה.
2. הפניה ל-secret: משתנה כמו app database user מקבל value from secret key reference שמצביע על secret לפי שמו ועל המפתח database username. המפתח חייב להתאים לשדה שב-secret.
3. ה-secret עצמו: זה אובייקט נפרד עם שדות username ו-password, ואותו לא מעלים לשום מקום ולא נותנים לאיש.
4. קידוד, לא הצפנה: הערכים נשמרים ב-base64, וקל לפענח אותם באתר decode. הקידוד רק מונע מעין סקרנית על המסך לקרוא את הערך. אפשר לזהות base64 לפי סימן שווה בסוף.
5. בדיקה: kubectl apply -f . --dry-run בודק בצד הלקוח, ו-dry run בשרת מאשר שהשרת מקבל את הקבצים. רק אחר כך מריצים apply אמיתי.
6. בתוך הפוד: kubectl describe pod מראה את app log level עם ערכו, אבל עבור ה-secret מציג רק את שם ה-secret ואת שם השדה, בלי הערך.
7. מבחינת האפליקציה: אחרי kubectl exec ל-bin/bash והפקודה env רואים את המשתנים הסודיים בפועל. האפליקציה מקבלת משתני סביבה רגילים ואינה יודעת שהם הגיעו מ-secret.
למה זה שימושי
- ריכוז המידע הסודי בקובץ אחד שלא מעלים לשום מקום.
- הסתרתו מעין מציצה ומתצוגות של Kubernetes.
- אפשר לשמור שם גם טוקנים של API ומפתחות כניסה למערכות.
אחרי ההרצאה אפשר להוציא סיסמאות מקובץ ה-deployment ולהפנות אליהן מ-secret.
השיעור הבא בקורס: הצגת secret כקובץ בתוך קונטיינר

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

  1. 00:00

    מהו secret בקוברנטיס

  2. 00:42

    משתני סביבה חשופים בקונטיינר

  3. 01:23

    שליפת ערך בעזרת secretKeyRef

  4. 02:06

    base64 קידוד ולא הצפנה

  5. 02:40

    בדיקת הקבצים עם dry-run

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

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

  1. 00:02

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

  2. 00:22

    ה-deployment שמתאר לנו את הפודים שלנו, ומה שמעניין שבתוך הפוד שלנו, בספציפיקציה של הקונטייнер, יש פה משתני סביבה. משתני סביבה שהאפליקציה משתמשת בהם. אני יכול ליצור משתני סביבה משלי, לדוגמה, app log level, ואני נותן לו איזשהו ערך, נניח error, והנחת היסוד שהאפליקציה שלי משתמשת במשתנה סביבה הזה.

  3. 00:49

    מה היא עושה איתו? זה כבר עניינה. אבל שימו לב פה שה-value חשוף, ואם הייתי רוצה לכתוב בפנים גם מידע רגיש כמו username או password, היינו בבעיה רצינית, כי אז ה-deployment הזה היה עולה לאיזה GitHub והיו נחשפים הפרטים הרגישים שלי.

  4. 01:09

    ולכן app database user, הוא לא לוקח value בצורה ישירה, אלא הוא לוקח value from secret key reference. וה-secret key reference מפנה ל-secret בשם PracticU database secret credentials.

  5. 01:26

    זה ה-secret שהגדרתי אותו פה. זאת אומרת, האובייקט הזה של ה-secret, שאני לא מעלה אותו לשום מקום ולא נותן אותו לאף אחד, זה השם שלו, ובפנים יש שדות username, password, ופה בפנים אני אומר לו לקחת את הערך מתוך ה-secret שלי, מתוך ה-key שנקרא database username.

  6. 01:45

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

  7. 01:56

    זאת אומרת שאם אני אבוא לפה ואני אכתוב base64 decode ואבחר איזשהו אתר שעושה decode online, אתם תראו שאפשר בקלות לעשות לו decode, והוא יכתוב לי שזה admin בלי שום סיסמה סודית.

  8. 02:10

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

  9. 02:19

    חשוב לי להדגיש לכם שזאת לא הצפנה, אלא קידוד. base64, אפשר לזהות אותו לפי סימן שווה. גם הסיסמה שלי מקודדת ולא מוצפנת. בכל מקרה, זה השם של ה-secret שלי, זה השדות שלו.

  10. 02:32

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

  11. 02:54

    זה תרגול על יבש אצלי בתוך הקליינט בלי לשלוח שום דבר לשרת. הנה ה-dry run הצליח. עכשיו אפשר גם לשלוח לשרת ולהגיד לו, "אל

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

ההרצאה הקודמת: בדיקת אתר אינטרנט - בתוך הקונטיינר

ההרצאה הבאה: הצגת secret - כקובץ בתוך קונטיינר

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

  • הסבר על Kubernetes
  • Swarm - Secret
  • יצירת ConnectionString - ב-App Secret

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

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