Utiliser Artifact Registry comme registre privé pour les images de charge de travail

Cette page explique comment configurer un cluster d'administrateur Google Distributed Cloud (logiciel uniquement) pour VMware afin qu'il utilise Artifact Registry de Google comme registre Docker privé dans lequel vous pouvez stocker des images de charge de travail. Lorsque vous configurez un registre privé pour stocker les images de charge de travail, les images système Google Distributed Cloud sont également stockées dans le registre privé lorsque vous créez ou mettez à niveau des clusters.

Bien qu'Artifact Registry soit compatible avec plusieurs méthodes d'authentification, vous devez utiliser une clé de compte de service pour l'authentification afin d'utiliser Artifact Registry comme registre privé. Les étapes de cette page expliquent comment obtenir l'adresse, les identifiants et le certificat CA requis par la section privateRegistry du fichier de configuration du cluster d'administrateur.

Configurer un fichier d'identifiants

  1. Si vous n'avez pas configuré l'authentification pour le registre, suivez les étapes décrites dans Configurer l'authentification sur Artifact Registry pour Docker afin de configurer l'authentification à l'aide d'un compte de service. Vous devez utiliser un compte de service avec un fichier de clé JSON pour l'authentification.

  2. Créez un fichier de configuration des identifiants, admin-creds.yaml, comme illustré dans l'exemple suivant. La valeur username doit être "_json_key". Vous pouvez utiliser n'importe quelle valeur pour le champ name, à condition qu'elle corresponde à celle que vous ajouterez au champ privateRegistry.entry.

    apiVersion: v1
    kind: "CredentialFile"
    items:
    - name: "private-registry-creds"
      username: "_json_key"
      password:
    
  3. Dans le répertoire où se trouve le fichier de clé JSON du compte de service du registre, exécutez cat sur le fichier de clé pour afficher le contenu.

  4. Copiez l'intégralité du contenu de la clé JSON et collez-le dans le champ password. Veillez à entourer le contenu de la clé JSON de guillemets simples, car il contient des guillemets doubles. Exemple :

    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"
    }
    '
    

Configurer privateRegistry dans le fichier de configuration du cluster d'administrateur

Pour utiliser un registre privé, vous devez configurer la section privateRegistry lorsque vous créez le cluster d'administrateur. Une fois le cluster créé, vous ne pouvez pas modifier le privateRegistry.address, mais les autres paramètres sont modifiables et vous pouvez les mettre à jour si nécessaire.

  1. Exécutez la commande suivante pour obtenir l'adresse du registre :

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

    Remplacez les éléments suivants :

    • REGISTRY_NAME : nom du registre.
    • PROJECT_ID : ID du projet dans lequel le registre a été créé.
    • LOCATION : région dans laquelle le registre a été créé, par exemple us-west2.

    Le résultat ressemble à ce qui suit :

    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'
    

    Utilisez la valeur registryUri dans la sortie pour privateRegistry.address.

  2. Exécutez la commande suivante pour extraire le certificat CA du point de terminaison Artifact Registry et l'enregistrer dans un fichier nommé 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. Remplissez la section privateRegistry comme suit :

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

    Remplacez les éléments suivants :

    • REGISTRY_ADDRESS : valeur pour registryUri.
    • CREDENTIAL_FILE_PATH : chemin d'accès complet ou relatif au fichier admin-creds.yaml.
    • CA_CERT_PATH : chemin d'accès complet ou relatif du fichier ar-ca.pem.
    • COMPONENT_ACCESS_KEY_PATH : chemin d'accès complet ou relatif au fichier de clé du compte de service d'accès au composant.