Créer et utiliser des identifiants pour importer des images depuis Cloud Storage pour l'environnement d'exécution de VM sur GDC

Ce document explique comment créer et utiliser des identifiants pour accéder à Cloud Storage à l'aide de l'environnement d'exécution de VM sur GDC. Un plug-in Cloud Storage vous permet d'utiliser Containerized Data Importer (CDI) pour importer des images de VM à partir de buckets Cloud Storage. Vous pouvez ensuite créer des disques virtuels à partir de ces images dans Cloud Storage et les associer à des VM qui s'exécutent dans votre cluster. CDI est automatiquement activé dans un cluster qui exécute l'environnement d'exécution de VM sur GDC.

Avant de commencer

Pour suivre les instructions de ce document, vous devez disposer des ressources suivantes :

Présentation des identifiants

Pour accéder à Cloud Storage, vous devez utiliser un compte de service qui fournit des identifiants au bucket de stockage. Le compte de service nécessite différents privilèges pour accéder à un bucket de stockage :

  • Bucket de stockage public : vous utilisez un compte de service pour vous identifier automatiquement, mais aucune autorisation spécifique n'est requise.
  • Bucket de stockage privé : le compte de stockage nécessite le droit de lecteur ou d'administrateur sur le bucket de stockage.

Il existe deux manières de fournir les identifiants du compte de service à CDI :

  • Configurer les identifiants par défaut de l'application Google sur les nœuds de votre cluster. Pour en savoir plus, consultez la section Authentification en tant que compte de service.
  • Fournir un secret contenant la clé du compte de service pour accéder à Cloud Storage. Le reste de ce document vous explique comment créer une clé de compte de service et un secret.

Créer un secret

Vous transmettez la clé de compte de service à Kubernetes à l'aide d'un secret créé dans l'espace de noms du volume de données. La section data du secret contient une entrée pour creds-gcp.json. Sa valeur correspond aux données encodées en base64 du fichier de clé du compte de service. La CLI crée ces données encodées en base64. Si vous utilisez un fichier manifeste YAML pour créer le secret, commencez par créer un hachage en base64 du contenu du fichier de clé de votre compte de service.

CLI

  • Créez le secret à l'aide de kubectl :

    kubectl create secret generic SECRET_NAME \
      --from-file=creds-gcp.json=SERVICE_ACCOUNT_KEY_PATH \
      --namespace NAMESPACE_NAME
    

    Remplacez les valeurs suivantes :

    • SECRET_NAME : nom de votre secret.
    • SERVICE_ACCOUNT_KEY_PATH : chemin d'accès au fichier de clé de votre compte de service.
    • NAMESPACE_NAME : espace de noms de votre secret.
      • Créez votre secret dans le cluster où CDI s'exécute et dans le même espace de noms que le volume de données. CDI est automatiquement activé dans un cluster qui exécute l'environnement d'exécution de VM sur GDC.

Fichier manifeste

  1. Créez un fichier manifeste Secret (my-secret.yaml par exemple) dans l'éditeur de votre choix :

    nano my-secret.yaml
    
  2. Copiez et collez le fichier manifeste YAML suivant :

    apiVersion: v1
    data:
      creds-gcp.json: BASE64_SERVICE_ACCOUNT_FILE
    kind: Secret
    metadata:
      name: SECRET_NAME
      namespace: NAMESPACE_NAME
    type: Opaque
    

    Remplacez les valeurs suivantes :

    • BASE64_SERVICE_ACCOUNT_FILE : hachage en base64 du contenu du fichier de clé de votre compte de service.
    • SECRET_NAME : nom de votre secret.
    • NAMESPACE_NAME : espace de noms de votre secret.
      • Créez votre secret dans le cluster où CDI s'exécute et dans le même espace de noms que le volume de données. CDI est automatiquement activé dans un cluster qui exécute l'environnement d'exécution de VM sur GDC.
  3. Enregistrez et fermez le fichier manifeste de secret dans votre éditeur.

  4. Appliquez le fichier manifeste de secret à l'aide de kubectl :

    kubectl apply -f my-secret.yaml
    

Transférer un secret existant

Au lieu de créer un secret, vous pouvez créer un SecretForwarder pour transférer un secret existant à utiliser. L'objet SecretForwarder accepte le transfert de secrets au sein du même cluster ou entre clusters, par exemple du cluster d'administrateur vers un cluster d'utilisateur.

Pour utiliser le secret cible afin d'accéder à Cloud Storage, celui-ci doit disposer d'une clé creds-gcp.json dans sa section data.

Dans le même cluster

L'exemple de fichier manifeste SecretForwarder suivant transfère un secret dans le même cluster :

apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
  name: cdi-gcs
  namespace: default
spec:
  inClusterTargetSecrets:
    name: gcs-sa
    namespaces:
    - default
  sourceSecret:
    name: gke-connect
    namespace: anthos-creds

Cet exemple effectue les opérations suivantes :

  • Il crée un SecretForwarder nommé cdi-gcs dans l'espace de noms default.
  • Il transfère le secret nommé gke-connect dans l'espace de noms anthos-creds vers un nouveau secret nommé gcs-sa dans l'espace de noms default.
  • Il crée le nouveau secret dans le même cluster.

Pour transférer un secret dans le même cluster, procédez comme suit :

  1. Créez un fichier manifeste SecretForwarder, tel que my-forwarded-secret.yaml, dans l'éditeur de votre choix :

    nano my-forwarded-secret.yaml
    
  2. Copiez et collez le fichier manifeste YAML suivant :

    apiVersion: baremetal.cluster.gke.io/v1
    kind: SecretForwarder
    metadata:
      name: SECRET_FORWARDER_NAME
      namespace: NAMESPACE_NAME
    spec:
      inClusterTargetSecrets:
        name: TARGET_SECRET_NAME
        namespaces:
        - TARGET_NAMESPACE_NAME
      sourceSecret:
        name: SOURCE_SECRET_NAME
        namespace: SOURCE_NAMESPACE_NAME
    

    Remplacez les valeurs suivantes :

    • SECRET_FORWARDER_NAME : nom de votre fichier SecretForwarder.
    • NAMESPACE_NAME : espace de noms de votre fichier SecretForwarder.
    • TARGET_SECRET_NAME : nom de votre nouveau secret.
    • TARGET_NAMESPACE_NAME : espace de noms de votre nouveau secret.
      • Créez votre secret dans le cluster où CDI s'exécute et dans le même espace de noms que le volume de données. CDI est automatiquement activé dans un cluster qui exécute l'environnement d'exécution de VM sur GDC.
    • SOURCE_SECRET_NAME : nom du secret source à transférer.
    • SOURCE_NAMESPACE_NAME : espace de noms du secret source à transférer.
  3. Enregistrez et fermez le fichier manifeste SecretForwarder dans votre éditeur.

  4. Appliquez le fichier manifeste SecretForwarder à l'aide de kubectl :

    kubectl apply -f my-forwarded-secret.yaml
    

Sur plusieurs clusters

L'exemple de fichier manifeste SecretForwarder suivant transfère un secret sur plusieurs clusters :

apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
  name: cdi-gcs
  namespace: cluster-user1
spec:
  RemoteClusterTargetSecrets:
    name: gcs-sa
    namespaces:
    - default
  sourceSecret:
    name: gke-connect
    namespace: anthos-creds

Cet exemple effectue les opérations suivantes :

  • Il crée un SecretForwarder nommé cdi-gcs dans l'espace de noms cluster-user1.
  • Il transfère le secret nommé gke-connect dans l'espace de noms anthos-creds vers un nouveau secret nommé gcs-sa dans l'espace de noms default.
  • Il crée le nouveau secret dans le cluster nommé user1.

Pour transférer un secret dans le même cluster, procédez comme suit :

  1. Créez un fichier manifeste SecretForwarder, tel que my-forwarded-secret.yaml, dans l'éditeur de votre choix :

    nano my-forwarded-secret.yaml
    
  2. Copiez et collez le fichier manifeste YAML suivant :

    apiVersion: baremetal.cluster.gke.io/v1
    kind: SecretForwarder
    metadata:
      name: SECRET_FORWARDER_NAME
      namespace: NAMESPACE_NAME
    spec:
      RemoteClusterTargetSecrets:
        name: TARGET_SECRET_NAME
        namespaces:
        - TARGET_NAMESPACE_NAME
      sourceSecret:
        name: SOURCE_SECRET_NAME
        namespace: SOURCE_NAMESPACE_NAME
    

    Remplacez les valeurs suivantes :

    • SECRET_FORWARDER_NAME : nom de votre fichier SecretForwarder dans le cluster distant.
    • NAMESPACE_NAME : espace de noms de votre fichier SecretForwarder dans le cluster distant.
    • TARGET_SECRET_NAME : nom de votre nouveau secret dans le cluster distant.
    • TARGET_NAMESPACE_NAME : espace(s) de noms de votre nouveau secret dans le cluster distant.
      • Créez votre secret dans le cluster où CDI s'exécute et dans le même espace de noms que le volume de données. CDI est automatiquement activé dans un cluster qui exécute l'environnement d'exécution de VM sur GDC.
    • SOURCE_SECRET_NAME : nom du secret source à transférer.
    • SOURCE_NAMESPACE_NAME : espace de noms du secret source à transférer.
  3. Enregistrez et fermez le fichier manifeste SecretForwarder dans votre éditeur.

  4. Appliquez le fichier manifeste SecretForwarder dans le cluster d'administrateur à l'aide de kubectl avec le KUBECONFIG du cluster d'administrateur :

    kubectl apply -f my-forwarded-secret.yaml
    

Utiliser un secret pour importer une image

Pour utiliser le secret pour importer une image depuis Cloud Storage lorsque vous créez un disque virtuel et une VM, procédez comme suit :

  1. Créez un fichier manifeste définissant des fichiers VirtualMachineDisk et VirtualMachine (my-vm.yaml, par exemple) dans l'éditeur de votre choix :

    nano my-vm.yaml
    
  2. Copiez et collez la définition YAML suivante :

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: VM_NAME-boot-dv
    spec:
      size: 20Gi
      source:
        gcs:
          url: IMAGE_URL
          secretRef: SECRET_NAME
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
    

    Remplacez les valeurs suivantes :

    • VM_NAME : nom de votre VM.
    • IMAGE_URL : URL de votre image disque Cloud Storage, telle que gs://my-images-bucket/disk.qcow2.
    • SECRET_NAME : nom de votre secret.
  3. Enregistrez et fermez le fichier manifeste dans votre éditeur.

  4. Créez la VM et le disque en utilisant kubectl :

    kubectl apply -f my-vm.yaml
    

Étape suivante