כניסה ל-Docker ול-Helm

בדף הזה מוסבר איך להיכנס ל-Docker או ל-Helm באמצעות כלי העזר לפרטי כניסה של Managed Harbor Service ‏ (MHS) או סודות של CLI.

כדי לספק גמישות, Google Distributed Cloud ‏ (GDC) air-gapped מספק שתי שיטות לאימות באמצעות Docker ו-Helm ממופע הרישום של Harbor. השיטה הראשונה היא שימוש בכלי העזר לפרטי כניסה של Managed Harbor Service ‏ (MHS) ובזהות GDC שלכם כדי להיכנס ל-Docker או ל-Helm CLI. אחרי האימות באמצעות GDC, אפשר להיכנס ללקוח Docker ולבצע פעולות Docker, בלי ליצור או לנהל סודות נפרדים של CLI ב-Harbor.

השיטה השנייה היא שימוש בסודות של CLI. אחרי שתעברו אימות באמצעות שרת proxy לאימות זהויות (IAP) ותיכנסו לממשק של Harbor בפעם הראשונה, תוכלו להשתמש ב-CLI של Docker או של Helm כדי לגשת ל-Harbor. רכיבי ה-CLI של Docker ו-Helm לא יכולים לטפל בהפניה אוטומטית ל-IAP, ולכן Harbor מספק סוד של CLI לשימוש כשנכנסים מ-Docker או מ-Helm. השיטה הזו זמינה רק כש-Harbor משתמש באימות IAP.

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

כדי להגדיר אימות של Docker ו-Helm למופעי מאגר Harbor, צריך להתקין בסביבה את כלי העזר לאישורי MHS ‏ (docker-credential-mhs). עוזר פרטי הכניסה כלול כברירת מחדל בחבילת ה-CLI של gcloud. מידע נוסף זמין במאמר סקירה כללית על gcloud CLI.

התפקידים שצריך ב-IAM

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

כניסה ל-Docker באמצעות הזהות ב-GDC

משתמשים בכלי העזר לפרטי כניסה של MHS עם הזהות ב-GDC כדי להיכנס ל-Docker CLI. כדי לבצע אימות באמצעות Docker, פועלים לפי השלבים הבאים:

  1. נכנסים לשרת Management API באמצעות GDC CLI לפי ההוראות שבקטע כניסה.

  2. מגדירים את Docker לשימוש בכלי העזר לפרטי כניסה של MHS‏ docker-credential-mhs:

    TENANT_PROJECT=PROJECT_NAME
    HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME
    REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)
    
    docker-credential-mhs configure-docker --registries=${REGISTRY}
    

    מחליפים את מה שכתוב בשדות הבאים:

  3. פועלים לפי ההוראות במאמר בנושא הגדרת Docker כך שיסמוך על CA הבסיסי של Harbor.

  4. אופציונלי: כדי לוודא שהכלי לעזרה בפרטי הכניסה הוגדר בהצלחה, בודקים שהערך mhs נוסף ל-~/.docker/config.json:

    cat DOCKER_CONFIG_PATH
    

    מחליפים את DOCKER_CONFIG_PATH בנתיב לקובץ התצורה של Docker. לדוגמה, ~/.docker/config.json.

    הפלט אמור להיראות כך:

    {
        "auths": {
            "10.200.0.1": {
                "auth": "YWRtaW46YWRtaW4="
            },
            "10.200.16.5:10443": {
                "auth": "YWRtaW46ZEROVVJCVWE1a1FBcE4xQQ=="
            }
        },
        "credHelpers": {
            "asia.gcr.io": "gcloud",
            "eu.gcr.io": "gcloud",
            "gcr.io": "gcloud",
            "marketplace.gcr.io": "gcloud",
            "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs",
            "staging-k8s.gcr.io": "gcloud",
            "us-central1-docker.pkg.dev": "gcloud",
            "us.gcr.io": "gcloud"
        }
    }
    

    בדוגמה הזו מוצג פלט תקין של "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs".

  5. מגדירים את פרויקט הדייר ב-gdcloud:

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    הפלט הבא מוצג:

    Updated property [core/project].
    
  6. מאתרים פרויקט Harbor שיש לכם גישת ניהול אליו. יוצרים פרויקט ב-Harbor אם אין פרויקט קיים.

  7. ביצוע פעולות ב-Docker, כמו שליחה או משיכה של תמונה:

    TENANT_PROJECT=PROJECT_NAME
    HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME
    REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)
    HARBOR_PROJECT=HARBOR_PROJECT_NAME
    
    # Push image
    docker pull nginx
    docker tag nginx ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest
    docker push ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest
    
    # Pull image
    docker pull ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest
    

    פלט מוצלח ייראה כך:

    # Push image
    root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker push ${REGISTRY}/harbor-project/nginx:latest
    The push refers to repository [myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx]
    e4e9e9ad93c2: Pushed
    6ac729401225: Pushed
    8ce189049cb5: Pushed
    296af1bd2844: Pushed
    63d7ce983cd5: Pushed
    b33db0c3c3a8: Pushed
    98b5f35ea9d3: Pushed
    latest: digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc size: 1778
    
    # Pull image
    root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker pull ${REGISTRY}/library/nginx:latest
    latest: Pulling from library/nginx
    Digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc
    Status: Image is up to date for myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx:latest
    

    אם הפעולה לא תצליח, יכול להיות שיוצג הפלט הבא:

    E1025 19:21:39.322290 1273587 get.go:24] failed to get user name: user is not logged in or login expired, please login again
    

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

כניסה ל-Helm באמצעות הזהות ב-GDC

משתמשים בכלי העזר לפרטי כניסה של MHS עם הזהות שלכם ב-GDC כדי להיכנס ל-CLI של Helm.

כדי לבצע אימות באמצעות Helm, פועלים לפי השלבים הבאים:

  1. אחרי שמבצעים אימות באמצעות GDC, מאחזרים את פרטי הכניסה של המשתמש מהכלי לעזרה בפרטי כניסה:

    echo $REGISTRY | docker-credential-mhs get
    

    הפלט אמור להיראות כך:

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. מתחברים ל-Helm CLI באמצעות פרטי הכניסה. כשמתבקשים להזין את פרטי הכניסה, משתמשים בפרטי הכניסה שמוחזרים על ידי הכלי לעזרה בפרטי הכניסה.

    helm registry login $REGISTRY
    Username: tokenreview$fop-infrastructure-operator@example.com
    Password: STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw
    

    פלט תקין של הפעולה הזו נראה כך:

    Login Succeeded
    

כניסה ל-Docker או ל-Helm באמצעות סודות של CLI

כדי להיכנס ל-Docker או ל-Helm באמצעות סודות של CLI, פועלים לפי השלבים הבאים:

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

  5. אם יצרתם סוד חדש של CLI, לוחצים על העתקה כדי להעתיק אותו.

  6. עכשיו אפשר להשתמש בסוד של ה-CLI כסיסמה כשנכנסים ל-Harbor מ-Docker או מ-Helm CLI:

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USERNAME: שם המשתמש בחשבון Harbor
  • ‫CLI_SECRET: הסוד שנוצר ב-CLI.
  • ‫HARBOR_INSTANCE_URL: כתובת ה-URL של מופע Harbor.

המאמרים הבאים

אחרי שנכנסים ל-Docker ול-Helm, המאגר מחובר באופן מלא ואפשר להתחיל להשתמש בו: