שימוש ב-Artifact Registry כמאגר פרטי של קובצי אימג' של עומסי עבודה

בדף הזה מוסבר איך להגדיר Google Distributed Cloud (תוכנה בלבד) עבור אשכול אדמין של VMware כדי להשתמש ב-Artifact Registry של Google כמאגר Docker פרטי שבו אפשר לאחסן תמונות של עומסי עבודה. כשמגדירים מאגר פרטי לאחסון תמונות של עומסי עבודה, גם תמונות המערכת של Google Distributed Cloud מאוחסנות במאגר הפרטי כשיוצרים או משדרגים אשכולות.

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

הגדרת קובץ פרטי כניסה

  1. אם לא הגדרתם אימות למאגר, אתם צריכים לפעול לפי השלבים במאמר הגדרת אימות ל-Artifact Registry עבור Docker כדי להגדיר אימות באמצעות חשבון שירות. כדי לבצע אימות, צריך להשתמש בחשבון שירות עם קובץ מפתח JSON.

  2. יוצרים קובץ תצורה של פרטי הכניסה, admin-creds.yaml, כמו שמוצג בדוגמה הבאה. הערך של username חייב להיות "_json_key". אפשר להשתמש בכל ערך בשדה name, כל עוד הוא תואם לערך שתוסיפו לשדה privateRegistry.entry.

    apiVersion: v1
    kind: "CredentialFile"
    items:
    - name: "private-registry-creds"
      username: "_json_key"
      password:
    
  3. בספרייה שבה נמצא קובץ מפתח ה-JSON של חשבון השירות של המאגר, מריצים את הפקודה cat בקובץ המפתח כדי להציג את התוכן.

  4. מעתיקים את כל התוכן של מפתח ה-JSON ומדביקים אותו בשדה password. חשוב להקיף את התוכן של מפתח ה-JSON בגרשיים, כי התוכן כולל מירכאות כפולות. לדוגמה:

    apiVersion: v1
    kind: "CredentialFile"
    items:
    - name: "private-registry-creds"
      username: "_json_key"
      password: '{
    "type": "service_account",
    "project_id": "example-project-12345",
    "private_key_id": "d2661ccb21e686658c6552cf1e0166b857091b2e",
    "private_key": "-----BEGIN PRIVATE ... -----END PRIVATE KEY-----\n",
    "client_email": "test-537@example-project-12345.iam.gserviceaccount.com",
    "client_id": "111772984510027821291",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-537%40example-project-12345.iam.gserviceaccount.com",
    "universe_domain": "googleapis.com"
    }
    '
    

הגדרת privateRegistry בקובץ התצורה של אשכול האדמין

כדי להשתמש במאגר פרטי, צריך להגדיר את הקטע privateRegistry כשיוצרים את אשכול האדמין. אחרי שיוצרים את האשכול, אי אפשר לשנות את privateRegistry.address, אבל אפשר לשנות את שאר ההגדרות ולעדכן אותן לפי הצורך.

  1. מריצים את הפקודה הבאה כדי לקבל את כתובת המאגר:

    gcloud artifacts repositories describe REGISTRY_NAME \
        --project=PROJECT_ID
        --location=REGION
    

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

    • REGISTRY_NAME: שם המרשם.
    • PROJECT_ID: מזהה הפרויקט שבו נוצר המאגר.
    • LOCATION: האזור שבו נוצר המאגר, למשל us-west2.

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

    Encryption: Google-managed key
    Repository Size: 0.000MB
    cleanupPolicyDryRun: true
    createTime: '2025-01-28T03:27:57.701672Z'
    dockerConfig: {}
    format: DOCKER
    mode: STANDARD_REPOSITORY
    name: projects/example-project-12345/locations/us-west2/repositories/test
    registryUri: us-west2-docker.pkg.dev/example-project-12345/test
    satisfiesPzi: true
    updateTime: '2025-01-28T03:27:57.701672Z'
    vulnerabilityScanningConfig:
      enablementConfig: INHERITED
      enablementState: SCANNING_ACTIVE
      lastEnableTime: '2025-01-28T03:27:49.385246079Z'
    

    משתמשים בערך registryUri בפלט של privateRegistry.address.

  2. מריצים את הפקודה הבאה כדי לחלץ את אישור ה-CA של נקודת הקצה של Artifact Registry ולשמור אותו בקובץ בשם ar-ca.pem:

    true | openssl s_client -connect REGION-docker.pkg.dev:443 -showcerts 2>/dev/null| sed -ne '/-BEGIN/,/-END/p' > ar-ca.pem
    
  3. ממלאים את הקטע privateRegistry באופן הבא:

    privateRegistry:
      address: "REGISTRY_ADDRESS"
      credentials:
        fileRef:
          path: "CREDENTIAL_FILE_PATH"
          entry: "private-registry-creds"
      caCertPath: "CA_CERT_PATH"
    componentAccessServiceAccountKeyPath: "COMPONENT_ACCESS_KEY_PATH"
    

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

    • REGISTRY_ADDRESS: הערך של registryUri.
    • CREDENTIAL_FILE_PATH: הנתיב המלא או היחסי של קובץ admin-creds.yaml.
    • CA_CERT_PATH: הנתיב המלא או היחסי של קובץ ar-ca.pem.
    • COMPONENT_ACCESS_KEY_PATH: הנתיב המלא או היחסי של קובץ המפתח של חשבון השירות לגישה לרכיב.