ב-Harbor, פרויקט משמש כיחידה לוגית לארגון ולניהול של אוסף קובצי אימג' של קונטיינרים. הוא מאפשר לקבץ פריטי מידע שקשורים זה לזה ולהחיל כללי מדיניות, אמצעי בקרת גישה וכללי שכפול ספציפיים על כל האוסף. אי אפשר להעביר תמונות אל Harbor או ממנו לפני שיוצרים פרויקט.
לפני שמתחילים
לפני שמתחילים, צריך לאתחל את הזהות שלכם במרשם Harbor על ידי כניסה לממשק המשתמש של Harbor לפחות פעם אחת.
תפקיד IAM נדרש
כדי ליצור פרויקטים ב-Harbor ולנהל מרחבי שמות של קובצי אימג', צריך לבקש מהאדמין של הפרויקט ב-IAM את התפקיד יצירת פרויקטים ב-Harbor (harbor-project-creator). התפקיד הזה מאפשר ליצור, לקבל ולצפות בפרויקטים ב-Harbor במרחב השמות של הפרויקט. התפקיד הזה כולל את ההרשאות שנדרשות כדי להגדיר מרחבי שמות חדשים של קובצי אימג', כדי שתוכלו לקבוע גבולות אבטחה לאפליקציות בקונטיינרים.
יצירת פרויקט ב-Harbor
יוצרים פרויקט ב-Harbor באמצעות מסוף GDC, gdcloud CLI או ה-API.
המסוף
במסוף GDC, פועלים לפי השלבים הבאים:
- בתפריט הניווט, לוחצים על הקישור Harbor Container Registry בקטע CI/CD.
- לוחצים על Create a Harbor project.
- מזינים את שם הפרויקט.
- אופציונלי: בדיקת נקודות חולשה מופעלת כברירת מחדל. כדי להשבית את בדיקת נקודות החולשה האוטומטית בפרויקטים של Harbor, לוחצים על המתג Enable vulnerability scanning for the project. מידע נוסף זמין במאמר סריקה לאיתור נקודות חולשה.
- לוחצים על יצירה.
- מופיעה הודעת אישור שהפרויקט נוצר בהצלחה.
- אחרי שיוצרים את הפרויקט ב-Harbor, נכנסים לממשק המשתמש של Harbor כדי לוודא שאפשר לראות את הפרויקט.
gdcloud
יוצרים את הפרויקט ב-Harbor:
gdcloud harbor harbor-projects create HARBOR_PROJECT \
--project=PROJECT \
--instance=INSTANCE
מחליפים את מה שכתוב בשדות הבאים:
-
HARBOR_PROJECT: השם של פרויקט Harbor שרוצים ליצור. -
PROJECT: השם של הפרויקט ב-GDC. -
INSTANCE: שם המכונה.
API
מסוף GDC וה-gdcloud CLI מגדירים את יוצר הפרויקט ב-Harbor לחשבון המשתמש שלכם. כשמשתמשים ב-API, צריך להגדיר את השדה spec.creatorSubject בעצמכם.
יוצרים משאב
HarborInstanceProjectבהתאמה אישית בשרת ה-API של הניהול האזורי. אי אפשר לשנות את השדותcreatorSubjectאוautoScanאחרי שיוצרים את המשאב, לכן חשוב לבדוק את שני הערכים לפני שיוצרים אותו.kubectl --kubeconfig MANAGEMENT_API_SERVER create -f - <<EOF apiVersion: artifactregistry.gdc.goog/v1 kind: HarborInstanceProject metadata: name: INSTANCE-HARBOR_PROJECT namespace: PROJECT spec: projectName: HARBOR_PROJECT harborInstanceRef: name: INSTANCE creatorSubject: apiGroup: rbac.authorization.k8s.io kind: User name: HARBOR_USERNAME autoScan: true EOFמחליפים את מה שכתוב בשדות הבאים:
-
MANAGEMENT_API_SERVER: הנתיב לקובץ kubeconfig של שרת ה-API לניהול אזורי. איך עוברים להקשר של אזור? -
INSTANCE: השם של מכונת המרשם של Harbor. -
HARBOR_PROJECT: השם של פרויקט Harbor שרוצים ליצור. -
PROJECT: שם הפרויקט ב-GDC שמכיל את המכונה של מרשם Harbor. -
HARBOR_USERNAME: שם המשתמש שלכם ב-Harbor, בדיוק כמו שהוא מופיע בתפריט המשתמש בממשק של Harbor אחרי שנכנסים לחשבון. המשתמש הזה הופך לאדמין של פרויקט Harbor. צריך להשתמש בשם משתמש של אדם, ולא של חשבון שירות. מידע נוסף מופיע בקטע לפני שמתחילים.
השדה
autoScanמפעיל בדיקת נקודות חולשה אוטומטית בתמונות שנשלחות לפרויקט. כדי להשבית את הסריקה האוטומטית, מגדירים את הערךfalse. מידע נוסף זמין במאמר סריקה לאיתור נקודות חולשה.-
מוודאים שהפרויקט ב-Harbor נוצר ושהיוצר הוקצה:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject INSTANCE-HARBOR_PROJECT \ -n PROJECTבעמודה
PROJECTCREATEDSTATUSמוצג הערךCreated, ובעמודהPROJECTSUBJECTASSIGNEDSTATUSמוצג הערךSubjectAssigned.אם בעמודה
PROJECTSUBJECTASSIGNEDSTATUSמופיע הערךSubjectAssignError, בודקים את הודעת התנאי:kubectl --kubeconfig MANAGEMENT_API_SERVER \ describe harborinstanceproject INSTANCE-HARBOR_PROJECT \ -n PROJECTההודעה
user ... not foundמציינת שהמשתמש שצוין בשדהcreatorSubjectעדיין לא נכנס לממשק המשתמש של Harbor. שירות Harbor מנסה שוב כל 30 שניות, כך שהסטטוס משתנה ל-SubjectAssignedאחרי שהמשתמש נכנס לחשבון.
תיקון פרויקט ב-Harbor שנוצר בלי יוצר
אם במשאב HarborInstanceProject בפרויקט כלשהו בארגון לא מוגדר השדה spec.creatorSubject, שירות Harbor מפסיק לעבד שינויים במשאבי Harbor בארגון. התסמינים כוללים מכונות של Harbor שלא מוכנות, פרויקטים חדשים של Harbor שנשארים ללא סטטוס ושליפות של קובצי אימג' שנכשלות עם שגיאות x509: certificate signed by unknown authority.
כדי לפתור את הבעיה, צריך את התפקיד אדמין של מכונת Harbor (harbor-instance-admin) בפרויקט שכולל את המשאב הרלוונטי. אם אין לכם את התפקיד הזה, בקשו ממשתמש שיש לו את התפקיד לבצע את השלבים האלה. אם אתם לא יודעים איזה משאב מושפע, פנו למפעיל התשתית (IO) שלכם, שיכול למצוא אותו ביומני השירות של Harbor.
בודקים אם המשאב המושפע של
HarborInstanceProjectמגדיר את השדהspec.creatorSubject:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECT -o jsonpath='{.spec.creatorSubject}'מחליפים את מה שכתוב בשדות הבאים:
-
MANAGEMENT_API_SERVER: הנתיב לקובץ kubeconfig של שרת ה-API לניהול אזורי. איך עוברים להקשר של אזור? -
HARBOR_INSTANCE_PROJECT: השם של המשאבHarborInstanceProject. המשאבים שיוצרים מהכרטיסייה API בדף הזה נקראיםINSTANCE-HARBOR_PROJECT. -
PROJECT: שם הפרויקט ב-GDC שמכיל את המשאב.
פלט ריק מציין שהשדה לא מוגדר.
-
מוודאים עם הבעלים של הפרויקט ב-GDC מה שם המשתמש ב-Harbor שיוקצה לתפקיד אדמין של פרויקט ב-Harbor. אי אפשר לשנות את השדה
spec.creatorSubjectאחרי שמגדירים אותו, לכן צריך לאמת את שם המשתמש לפני שמוסיפים את השדה לכל אחד מהמשאבים המושפעים:kubectl --kubeconfig MANAGEMENT_API_SERVER \ patch harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECT --type merge \ -p '{"spec":{"creatorSubject":{"apiGroup":"rbac.authorization.k8s.io","kind":"User","name":"HARBOR_USERNAME"}}}'מחליפים את
HARBOR_USERNAMEבשם המשתמש ב-Harbor של המשתמש שרוצים להקצות כאדמין של הפרויקט ב-Harbor. התפקיד הזה מאפשר למחוק תמונות ולנהל את חברי הפרויקט. המשתמש חייב להיכנס לממשק המשתמש של Harbor לפחות פעם אחת, ושם המשתמש חייב להיות זהה לשם שמוצג בתפריט המשתמש בממשק המשתמש של Harbor.מוודאים שהיוצר הוקצה:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECTאחרי שכל המשאבים המושפעים יתוקנו, שירות Harbor יופעל מחדש וימשיך לעבד את השינויים תוך כ-10 דקות, ובעמודה
PROJECTSUBJECTASSIGNEDSTATUSיוצג הערךSubjectAssigned. אם עדיין לא הצלחתם לשלוף את קובץ האימג' מ-Harbor אחרי 15 דקות, פנו ל-IO. תנו ל-IO את השמות והפרויקטים של המשאבים שתיקנתם, כדי שה-IO יוכל לבדוק אם יש משאבים אחרים שהושפעו ולהפעיל מחדש את שירות Harbor במקרה הצורך.
המאמרים הבאים
אחרי שיוצרים פרויקט ב-Harbor, מגדירים את לקוחות Docker ו-Helm כך שיתחברו למרשם של Harbor: