יצירת פרויקטים ב-Harbor

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

לפני שמתחילים

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

תפקיד IAM נדרש

כדי ליצור פרויקטים ב-Harbor ולנהל מרחבי שמות של קובצי אימג', צריך לבקש מהאדמין של הפרויקט ב-IAM את התפקיד יצירת פרויקטים ב-Harbor (harbor-project-creator). התפקיד הזה מאפשר ליצור, לקבל ולצפות בפרויקטים ב-Harbor במרחב השמות של הפרויקט. התפקיד הזה כולל את ההרשאות שנדרשות כדי להגדיר מרחבי שמות חדשים של קובצי אימג', כדי שתוכלו לקבוע גבולות אבטחה לאפליקציות בקונטיינרים.

יצירת פרויקט ב-Harbor

יוצרים פרויקט ב-Harbor באמצעות מסוף GDC,‏ gdcloud CLI או ה-API.

המסוף

במסוף GDC, פועלים לפי השלבים הבאים:

  1. בתפריט הניווט, לוחצים על הקישור Harbor Container Registry בקטע CI/CD.
  2. לוחצים על Create a Harbor project.
  3. מזינים את שם הפרויקט.
  4. אופציונלי: בדיקת נקודות חולשה מופעלת כברירת מחדל. כדי להשבית את בדיקת נקודות החולשה האוטומטית בפרויקטים של Harbor, לוחצים על המתג Enable vulnerability scanning for the project. מידע נוסף זמין במאמר סריקה לאיתור נקודות חולשה.
  5. לוחצים על יצירה.
  6. מופיעה הודעת אישור שהפרויקט נוצר בהצלחה.
  7. אחרי שיוצרים את הפרויקט ב-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 בעצמכם.

  1. יוצרים משאב 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. מידע נוסף זמין במאמר סריקה לאיתור נקודות חולשה.

  2. מוודאים שהפרויקט ב-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.

  1. בודקים אם המשאב המושפע של 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 שמכיל את המשאב.

    פלט ריק מציין שהשדה לא מוגדר.

  2. מוודאים עם הבעלים של הפרויקט ב-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.

  3. מוודאים שהיוצר הוקצה:

    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: