יישום פריסה מבוססת משיכה באמצעות GitOps למען אבטחה

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

למה פריסת pull-based נשברת בעריכות ידניות

פריסת pull-based נשענת על הנחה אחת: המאגר מתאר את המצב הרצוי של הסביבה במלואו, והסוכן בתוך האשכול בודק מולו את המציאות באופן קבוע ומביא אותה למצב המתואר. כל עוד ההנחה מתקיימת, ההפצה היא שינוי במאגר, והתוצאה שלה צפויה.

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

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

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

מה נותנת אספקה מנוהלת של שינויים לאשכול

עוברים לפריסת pull-based: תיאורי עומסי העבודה נמצאים במאגר, והבקר בתוך האשכול מושך את השינויים בעצמו ומביא את המצב למתואר. אף אחד לא ניגש לפרוד ביד, ולכן סוג הכשל "החילו לא את הדבר הנכון ולא במקום הנכון" נעלם יחד עם הגישה הישירה.

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

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

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

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

אפשרויות של פריסת pull-based: השוואת מצבי עבודה

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

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

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

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

איך אנחנו בונים מסלול אספקת שינויים: שלבי העבודה

סדר העבודה בנוי כך שהסיכונים יוסרו לפני שהמסלול יתחיל להיות מיושם בפרוד. צוואר הבקבוק העיקרי בהטמעת פריסת pull-based — לא הסוכן, אלא ההפצה הנוכחית האטומה: שינויים מגיעים ביד ובסקריפטים, ואף אחד לא יכול לומר בוודאות מה נמצא כרגע באשכול.

  1. ביקורת הפצה. אוספים מפת סביבות, הרשאות גישה וכל נקודות היישום הידני של שינויים. בפלט — מפת פערים בין המאגרים למצב בפועל.
  2. תכנון המסלול. מפרידים בין מאגר הקוד למאגר המצב, מתארים את מודל הסביבות ואת כלל הרקונסיליאציה.
  3. הגדרת סוכנים. הסוכן פועל בתוך הסגמנט ומושך את המצב מהמאגר בעצמו — אין צורך בחיבורים נכנסים מבחוץ. מגדירים הרשאות מינימליות וסדר עבודה עם סודות.
  4. העברת ההפצה. מעבירים שירותים אחד אחד, החל מהלא-קריטיים, ומשווים את התוצאה להתנהגות הקודמת. מיד מגדירים התראות על פערים וחזרה לאחור באמצעות החזרת קומיט.
  5. בדיקת קבלה. מריצים תרחישים: שחרור מתוכנן, חזרה לאחור, עריכה ידנית ישירות באשכול, אי-זמינות של שירותים חיצוניים. מודדים את זמן יישום השינוי והשחזור.
  6. מסירה לתפעול. מוסרים תיעוד, תקנון עריכות והוראות לתורן, ומדריכים את הצוות. המסלול מתקבל כשמשמרת תורנית מוציאה שחרור ומחזירה אותו לאחור בלעדינו.

בהמשך — תמיכה לפי תקנון מוסכם: מערך העריכות משתנה, ואופן האספקה נשאר ללא שינוי.

מה נשאר אצלכם אחרי ההטמעה: ארטיפקטים ותקנונים

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

  • תרשימי מסלולים: בדיקות, קדם-פרוד ופרוד, עם ציון היכן פועל הסוכן, אילו חיבורים יוצאים הוא פותח ומה נשאר בלתי נגיש מבחוץ.
  • מטריצת גישות: עבור כל תפקיד — מה מותר לקרוא, לשנות וליישם, ואילו פעולות דורשות אישור שני.
  • מדיניות גישה של סוכנים: מה מותר לסוכן למשוך מהמאגר, לאילו חלקים בתשתית הוא קשור ומה קורה באובדן הקשר איתו.
  • תקנון חזרה לאחור: חזרה מדורגת לגרסה הקודמת, כולל בדיקת מצב התלויות והקריטריון שלפיו התורן מחליט לחזור לאחור.
  • תיעוד תפעול: סבב מפתחות וטוקנים, עדכון הסוכן, טיפול באותות חירום אופייניים.
  • הוראות למשמרת תורנית: תרחישים קצרים "אות → מה לבדוק → מה לעשות" עבור 5-8 כשלים נפוצים.
  • סדר הענקת גישות: איך לחבר מהנדס חדש ואיך לשלול את גישתו בעזיבה.

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

מקרה בוחן: פערים בין הסביבה למאגר טופלו

נקודת התחלה

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

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

מה שינו

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

מה נהיה

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

במה סקר המצב מהמאגר שונה מהפצה?

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

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

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

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

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

ספקות טכניים: גישות, חזרות לאחור, סחיפת קונפיגורציות

חמש שאלות שנשאלות לרוב בשלב התכנון של פריסת pull-based. עונים לעניין: איך זה בנוי ומה קורה במצב לא שגרתי.

אילו הרשאות גישה נדרשות לסוכן בתוך התשתית?

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

איך מחזירים לאחור שחרור כושל?

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

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

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

איך להפריד כמה סביבות במאגר אחד?

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

מה יקרה אם הסוכן יאבד קשר עם המאגר?

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

נדון במשימה שלכם: נחזור עם הערכה ותוכנית עבודה

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

  • אילו סביבות מעבירים לפריסת pull-based ובאיזה סדר — מהבדיקות לייצור;
  • היכן נמצאים כעת המניפסטים והגדרות הסביבות: מאגר, ענפים, כללי בדיקת שינויים;
  • כמה צוותים מפרסמים שינויים, באיזו תדירות וכמה מהירה צריכה להיות ההפצה;
  • איך בנויות הגישות: מי מנפיק פרטי זיהוי, איך עובד סבב הסודות והסוכן באשכול;
  • מה קריטי לשמר: חלונות הפצה, סדר אישורים, חזרה לגרסה הקודמת;
  • אילו בדיקות חובה לפני יישום: בנייה, בדיקות, סריקת תמונות לאיתור פגיעויות.

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

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

מוכנים לדון במשימה — נחזור עם הערכה ותוכנית עבודה ונציין את הרכב הצוות בהתאם להיקף שלכם.