אם הארגון שלכם משתמש ב-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" [...]
הסרת המשאבים
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.