אם הארגון שלכם משתמש ב-Policy Controller כדי לנהל מדיניות באשכולות Google Kubernetes Engine, אתם יכולים לאמת את הגדרת הפריסה של אפליקציה בצינור השילוב הרציף (CI) שלה. במדריך הזה נסביר איך להגיע לתוצאה הזו. אימות האפליקציה שימושי אם אתם מפתחים שיוצרים צינור CI לאפליקציה, או מהנדסי פלטפורמה שיוצרים תבנית של צינור CI לכמה צוותים של אפליקציות.
הדף הזה מיועד לאדמינים ממחלקת IT ולאופרטורים שרוצים לוודא שכל המשאבים שפועלים בפלטפורמת הענן עומדים בדרישות התאימות של הארגון. לשם כך, הם מספקים ומנהלים פעולות אוטומטיות לביצוע ביקורת או לאכיפה, ומנהלים את מחזור החיים של תשתית הטכנולוגיה הבסיסית. כדי לקבל מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בGoogle Cloud תוכן, אפשר לעיין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE.
כללי המדיניות הם חלק חשוב מהאבטחה והתאימות של הארגון. הכלי Policy Controller מאפשר לארגון שלכם לנהל את המדיניות הזו באופן מרכזי ודקלרטיבי בכל האשכולות. מפתחים יכולים לנצל את היתרונות של המדיניות הזו, שהיא מרכזית ומוצהרת. אתם יכולים להשתמש במאפיינים האלה כדי לאמת את האפליקציה מול כללי המדיניות האלה מוקדם ככל האפשר בתהליך הפיתוח. יש שני יתרונות עיקריים ללמידה על הפרות מדיניות בצינור ה-CI במקום במהלך הפריסה: אפשר להקדים את האבטחה, ולצמצם את משוב הלולאה, וכך להקטין את הזמן והעלות שנדרשים לתיקון ההפרות.
במדריך הזה נשתמש ב-Cloud Build ככלי CI ובמאגר לדוגמה ב-GitHub שמכיל מדיניות להדגמות.
משאבים
במדריך הזה נעשה שימוש בכמה כלי Kubernetes. בקטע הזה מוסבר מהם הכלים האלה, איך הם פועלים יחד והאם אפשר להחליף אותם במשהו אחר.
הכלים שבהם משתמשים במדריך הזה כוללים את:
Policy Controller: מבוסס על פרויקט הקוד הפתוח Open Policy Agent – Gatekeeper. Policy Controller אוכף מדיניות לגבי האובייקטים שנוצרים באשכול Kubernetes (לדוגמה, מניעת השימוש באפשרות ספציפית או אכיפת השימוש בתווית ספציפית). המדיניות הזו נקראת אילוצים. ההגבלות מוגדרות כמשאבים מותאמים אישית של Kubernetes. Policy Controller זמין כחלק מ-GKE, אבל אפשר להשתמש ב-Open Policy Agent – Gatekeeper במקום ב-Policy Controller לצורך ההטמעה.
GitHub: במדריך הזה אנחנו משתמשים ב-GitHub כדי לארח את מאגרי Git: אחד לאפליקציה לדוגמה, ואחד שמכיל את האילוצים של Policy Controller. כדי לפשט את התהליך, שני המאגרים הם שני תיקיות שונות במאגר Git אחד. בפועל, אלה יהיו מאגרי מידע שונים. אפשר להשתמש בכל פתרון Git.
Cloud Build: Cloud Build הוא פתרון ה-CI של Google Cloud. במדריך הזה נשתמש בו כדי להריץ את בדיקות האימות. הפרטים של ההטמעה יכולים להשתנות ממערכת CI אחת לאחרת, אבל אפשר להשתמש במושגים שמתוארים במדריך הזה עם כל מערכת CI מבוססת-קונטיינר.
Kustomize: Kustomize הוא כלי להתאמה אישית של הגדרות Kubernetes. היא פועלת על ידי לקיחת תצורות "בסיסיות" והחלת התאמות אישיות עליהן. הוא מאפשר לכם להשתמש בגישת DRY (Don't Repeat Yourself) להגדרות של Kubernetes. בעזרת Kustomize, אפשר לשמור את הרכיבים שמשותפים לכל הסביבות בתצורות הבסיסיות וליצור התאמות אישיות לכל סביבה. במדריך הזה, אנחנו שומרים את ההגדרות של Kustomize במאגר האפליקציות, ויוצרים (לדוגמה, מחילים את ההתאמות האישיות) את ההגדרות בצינור ה-CI. אפשר להשתמש במושגים שמתוארים במדריך הזה עם כל כלי שמייצר הגדרות Kubernetes שמוכנות להחלה על אשכול (לדוגמה, הפקודה helm template).
Kpt: Kpt הוא כלי ליצירת תהליכי עבודה להגדרות של Kubernetes. Kpt מאפשרת לאחזר, להציג, להתאים אישית, לעדכן, לאמת ולהחיל הגדרות של Kubernetes. הוא תואם לרוב הכלים הקיימים במערכת האקולוגית של Kubernetes, כי הוא פועל עם קובצי Git ו-YAML. במדריך הזה אנחנו משתמשים ב-kpt בצינור ה-CI כדי לאחזר את האילוצים ממאגר anthos-config-management-samples, וכדי לאמת את הגדרות ה-Kubernetes מול האילוצים האלה.
פייפליין
בתרשים הבא מוצג צינור ה-CI שבו אנחנו משתמשים במדריך הזה:
צינור הנתונים פועל ב-Cloud Build, והפקודות מופעלות בספרייה שמכילה עותק של מאגר האפליקציה לדוגמה. הצינור מתחיל ביצירת ההגדרות הסופיות של Kubernetes באמצעות Kustomize. לאחר מכן, המערכת מאחזרת את האילוצים שרוצים לבצע לגביהם אימות ממאגר anthos-config-management-samples באמצעות kpt. לבסוף, המערכת משתמשת ב-kpt כדי לאמת את תצורות Kubernetes בהתאם למגבלות האלה. כדי לבצע את השלב האחרון הזה, אנחנו משתמשים בפונקציית הגדרה ספציפית שנקראת gatekeeper, שמבצעת את האימות הזה. במדריך הזה מפעילים את צינור ה-CI באופן ידני, אבל בפועל כדאי להגדיר אותו כך שיפעל אחרי git push למאגר Git.
מטרות
- הפעלת צינור עיבוד נתונים של CI לאפליקציה לדוגמה באמצעות Cloud Build.
- שימו לב שצינור עיבוד הנתונים נכשל בגלל הפרת מדיניות.
- משנים את מאגר האפליקציות לדוגמה כך שיעמוד בדרישות המדיניות.
- מריצים שוב את צינור ה-CI בהצלחה.
עלויות
במדריך הזה השתמשנו ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- Cloud Build
- Google Kubernetes Engine
כדי ליצור הערכת עלויות על סמך השימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
כדי להימנע מחיובים נוספים אחרי שסיימתם את המדריך, תוכלו למחוק את המשאבים שיצרתם. פרטים נוספים זמינים בקטע הסרת המשאבים.
לפני שמתחילים
בוחרים או יוצרים Google Cloud פרויקט. במסוף Google Cloud , עוברים לדף Manage resources:
כדי להריץ את הפקודות שמפורטות במדריך הזה, פותחים את Cloud Shell:
ב-Cloud Shell, מריצים את הפקודה
gcloud config get-value project.אם הפקודה לא מחזירה את המזהה של הפרויקט שבחרתם, מגדירים את Cloud Shell להשתמש בפרויקט:
gcloud config set project PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט.ב-Cloud Shell, מפעילים את Cloud Build API הנדרש:
gcloud services enable cloudbuild.googleapis.com
אימות ההגדרות של האפליקציה לדוגמה
בקטע הזה מריצים צינור CI באמצעות Cloud Build למאגר אפליקציות לדוגמה שאנחנו מספקים. בצינור הזה מתבצעת אימות של הגדרת Kubernetes שזמינה במאגר של אפליקציית הדוגמה, בהתאם למגבלות שזמינות במאגר anthos-config-management-samples.
כדי לאמת את הגדרות האפליקציה:
ב-Cloud Shell, משכפלים את מאגר האפליקציה לדוגמה:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.gitמריצים את צינור ה-CI באמצעות Cloud Build. יומני ה-Build מוצגים ישירות ב-Cloud Shell.
cd anthos-config-management-samples/ci-app/app-repo gcloud builds submit .הצינור שאתם מריצים מוגדר בקובץ הבא.
ב-Policy Controller, אילוצים הם מופעים של תבניות אילוצים. תבניות אילוצים מכילות את קוד Rego בפועל שמשמש להטמעת האילוץ. כדי שהפונקציה
gcr.io/kpt-fn/gatekeeperתפעל, צריך להגדיר גם את תבנית האילוצים וגם את האילוצים. מאגר המדיניות לדוגמה מכיל את שניהם, אבל במציאות הם יכולים להיות מאוחסנים במקומות שונים. משתמשים בפקודהkpt pkg getלפי הצורך כדי להוריד גם תבניות אילוצים וגם אילוצים.במדריך הזה משתמשים ב-
gcr.io/kpt-fn/gatekeeperעם Cloud Build כדי לאמת משאבים, אבל יש עוד שתי אפשרויות חלופיות:- שימוש בפונקציה
gcr.io/kpt-fn/gatekeeperעםkpt:
kpt fn eval hydrated-manifests/kpt-manifests.yaml --image gcr.io/kpt-fn/gatekeeper:v0.2- משתמשים בכלי שורת הפקודה
gator:
gator test -f hydrated-manifests/kpt-manifests.yaml- שימוש בפונקציה
אחרי כמה דקות, תראו שצינור עיבוד הנתונים נכשל עם השגיאה הבאה:
[...] Step #2 - "Validate against policies": [error] apps/v1/Deployment/nginx-deployment : Deployment objects should have an 'owner' label indicating who created them. Step #2 - "Validate against policies": violatedConstraint: deployment-must-have-owner Finished Step #2 - "Validate against policies" 2022/05/11 18:55:18 Step Step #2 - "Validate against policies" finished 2022/05/11 18:55:19 status changed to "ERROR" ERROR ERROR: build step 2 "gcr.io/kpt-fn/gatekeeper:v0.2" failed: exit status 1 2022/05/11 18:55:20 Build finished with ERROR statusההגבלה שההגדרה מפרה מוגדרת בקובץ הבא. זהו משאב מותאם אישית של Kubernetes שנקרא
K8sRequiredLabels.תבנית האילוצים שמתאימה לאילוץ הזה מופיעה ב-
requiredlabels.yamlב-GitHub.יוצרים את ההגדרה המלאה של Kubernetes בעצמכם, ורואים שהתווית
ownerבאמת חסרה. כדי ליצור את ההגדרה:kubectl kustomize config/prod
תיקון האפליקציה כך שתעמוד בדרישות המדיניות של החברה
בקטע הזה מוסבר איך לתקן את הפרת המדיניות באמצעות Kustomize:
ב-Cloud Shell, מוסיפים קטע
commonLabelsלקובץ הבסיס של Kustomization:cat <<EOF >> config/base/kustomization.yaml commonLabels: owner: myself EOFיוצרים את ההגדרה המלאה של Kubernetes ורואים שהתווית
ownerמופיעה עכשיו:kubectl kustomize config/prodמריצים מחדש את צינור ה-CI באמצעות Cloud Build:
gcloud builds submit .הפלט של התהליך יהיה:
[...] Step #2 - "Validate against policies": [RUNNING] "gcr.io/kpt-fn/gatekeeper:v0" Step #2 - "Validate against policies": [PASS] "gcr.io/kpt-fn/gatekeeper:v0" [...]
הסרת המשאבים
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.