Crea e utilizza le credenziali per importare immagini da Cloud Storage per il runtime VM su Google Distributed Cloud

Questo documento mostra come creare e utilizzare le credenziali per accedere a Cloud Storage utilizzando VM Runtime su Google Distributed Cloud. Un plug-in Cloud Storage consente di utilizzare il CDI (Containerized Data Importer) per importare immagini VM dai bucket Cloud Storage. Puoi quindi creare dischi virtuali da queste immagini in Cloud Storage e collegarli alle VM in esecuzione nel cluster. CDI è abilitata automaticamente in un cluster che esegue VM Runtime su Google Distributed Cloud.

Prima di iniziare

Per completare questo documento, devi avere accesso alle seguenti risorse:

Panoramica delle credenziali

Per accedere a Cloud Storage, utilizza un account di servizio che fornisce le credenziali al bucket di archiviazione. L'account di servizio richiede privilegi diversi per accedere correttamente a un bucket di archiviazione:

  • Bucket di archiviazione pubblica: utilizzi un account di servizio per l'identificazione personale, ma non sono necessarie autorizzazioni specifiche.
  • Bucket di archiviazione privata: l'account di archiviazione richiede il privilegio Visualizzatore o Amministratore per il bucket di archiviazione.

Esistono due modi per fornire le credenziali dell'account di servizio a CDI:

  • Configura le credenziali predefinite dell'applicazione Google (ADC) sui nodi nel cluster. Per maggiori informazioni, consulta Autenticazione come account di servizio.
  • Fornisci un secret contenente la chiave dell'account di servizio per accedere a Cloud Storage. Il resto di questo documento mostra come creare una chiave e un secret dell'account di servizio.

Crea un secret

Puoi passare la chiave dell'account di servizio a Kubernetes utilizzando un secret creato nello spazio dei nomi del volume di dati. La sezione data del secret contiene una voce per creds-gcp.json. Il valore è costituito dai dati codificati in Base64 del file della chiave dell'account di servizio. L'interfaccia a riga di comando crea automaticamente questi dati codificati in Base64. Se utilizzi un manifest YAML per creare il secret, crea prima un hash base64 dei contenuti del file della chiave del tuo account di servizio.

CLI

  • Crea il secret utilizzando kubectl:

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

    Sostituisci i seguenti valori:

    • SECRET_NAME: il nome del tuo secret.
    • SERVICE_ACCOUNT_KEY_PATH: il percorso del file della chiave dell'account di servizio.
    • NAMESPACE_NAME: lo spazio dei nomi per il tuo secret.
      • Crea il tuo secret nel cluster in cui viene eseguito CDI e nello stesso spazio dei nomi del volume di dati. CDI viene abilitata automaticamente in un cluster che esegue VM Runtime su Google Distributed Cloud.

Manifest

  1. Crea un manifest Secret, ad esempio my-secret.yaml, nell'editor di tua scelta:

    nano my-secret.yaml
    
  2. Copia e incolla il seguente manifest YAML:

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

    Sostituisci i seguenti valori:

    • BASE64_SERVICE_ACCOUNT_FILE: l'hash base64 dei contenuti del file della chiave dell'account di servizio.
    • SECRET_NAME: il nome del tuo secret.
    • NAMESPACE_NAME: lo spazio dei nomi per il tuo secret.
      • Crea il tuo secret nel cluster in cui viene eseguito CDI e nello stesso spazio dei nomi del volume di dati. CDI viene abilitata automaticamente in un cluster che esegue VM Runtime su Google Distributed Cloud.
  3. Salva e chiudi il manifest del secret nell'editor.

  4. Applica il manifest del secret utilizzando kubectl:

    kubectl apply -f my-secret.yaml
    

Inoltra un secret esistente

Anziché creare un secret, puoi creare un SecretForwarder per inoltrare un secret esistente da utilizzare. SecretForwarder supporta l'inoltro dei secret all'interno dello stesso cluster o in più cluster, ad esempio dal cluster di amministrazione a un cluster utente.

Per utilizzare il secret di destinazione per accedere a Cloud Storage, il secret di origine deve avere una chiave creds-gcp.json nella sezione data.

Stesso cluster

Il seguente manifest SecretForwarder di esempio inoltra un secret nello stesso 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

In questo esempio si verifica quanto segue:

  • Crea un SecretForwarder denominato cdi-gcs nello spazio dei nomi default.
  • Inoltra il secret denominato gke-connect nello spazio dei nomi anthos-creds a un nuovo secret denominato gcs-sa nello spazio dei nomi default.
  • Crea il nuovo secret nello stesso cluster.

Per inoltrare un secret nello stesso cluster, completa i seguenti passaggi:

  1. Crea un manifest SecretForwarder, ad esempio my-forwarded-secret.yaml, nell'editor a tua scelta:

    nano my-forwarded-secret.yaml
    
  2. Copia e incolla il seguente manifest YAML:

    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
    

    Sostituisci i seguenti valori:

    • SECRET_FORWARDER_NAME: il nome del tuo SecretForwarder.
    • NAMESPACE_NAME: lo spazio dei nomi per SecretForwarder.
    • TARGET_SECRET_NAME: il nome del tuo nuovo secret.
    • TARGET_NAMESPACE_NAME: lo spazio dei nomi o gli spazi dei nomi per il nuovo secret.
      • Crea il tuo secret nel cluster in cui viene eseguito CDI e nello stesso spazio dei nomi del volume di dati. CDI viene abilitata automaticamente in un cluster che esegue VM Runtime su Google Distributed Cloud.
    • SOURCE_SECRET_NAME: il nome del secret di origine da inoltrare.
    • SOURCE_NAMESPACE_NAME: lo spazio dei nomi del secret di origine da inoltrare.
  3. Salva e chiudi il manifest di SecretForwarder nell'editor.

  4. Applica il manifest SecretForwarder utilizzando kubectl:

    kubectl apply -f my-forwarded-secret.yaml
    

Nei vari cluster

Il seguente manifest SecretForwarder di esempio inoltra un secret tra i cluster:

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

In questo esempio si verifica quanto segue:

  • Crea un SecretForwarder denominato cdi-gcs nello spazio dei nomi cluster-user1.
  • Inoltra il secret denominato gke-connect nello spazio dei nomi anthos-creds a un nuovo secret denominato gcs-sa nello spazio dei nomi default.
  • Crea il nuovo secret nel cluster denominato user1.

Per inoltrare un secret nello stesso cluster, completa i seguenti passaggi:

  1. Crea un manifest SecretForwarder, ad esempio my-forwarded-secret.yaml, nell'editor a tua scelta:

    nano my-forwarded-secret.yaml
    
  2. Copia e incolla il seguente manifest YAML:

    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
    

    Sostituisci i seguenti valori:

    • SECRET_FORWARDER_NAME: il nome del tuo SecretForwarder nel cluster remoto.
    • NAMESPACE_NAME: lo spazio dei nomi per il tuo SecretForwarder nel cluster remoto.
    • TARGET_SECRET_NAME: il nome del nuovo secret nel cluster remoto.
    • TARGET_NAMESPACE_NAME: gli spazi dei nomi per il nuovo secret nel cluster remoto.
      • Crea il tuo secret nel cluster in cui viene eseguito CDI e nello stesso spazio dei nomi del volume di dati. CDI viene abilitata automaticamente in un cluster che esegue VM Runtime su Google Distributed Cloud.
    • SOURCE_SECRET_NAME: il nome del secret di origine da inoltrare.
    • SOURCE_NAMESPACE_NAME: lo spazio dei nomi del secret di origine da inoltrare.
  3. Salva e chiudi il manifest di SecretForwarder nell'editor.

  4. Applica il manifest SecretForwarder nel cluster di amministrazione utilizzando kubectl con KUBECONFIG del cluster di amministrazione:

    kubectl apply -f my-forwarded-secret.yaml
    

Utilizza un secret per importare un'immagine

Per utilizzare il secret per importare un'immagine da Cloud Storage quando crei un disco virtuale e una VM, completa i seguenti passaggi:

  1. Crea un manifest che definisca VirtualMachineDisk e VirtualMachine, ad esempio my-vm.yaml,,nell'editor che preferisci:

    nano my-vm.yaml
    
  2. Copia e incolla la seguente definizione YAML:

    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
    

    Sostituisci i seguenti valori:

    • VM_NAME: il nome della VM.
    • IMAGE_URL: l'URL dell'immagine disco su Cloud Storage, ad esempio gs://my-images-bucket/disk.qcow2.
    • SECRET_NAME: il nome del tuo secret.
  3. Salva e chiudi il manifest nell'editor.

  4. Crea la VM e il disco utilizzando kubectl:

    kubectl apply -f my-vm.yaml
    

Passaggi successivi