Questo documento spiega come creare e utilizzare le credenziali per accedere a Cloud Storage utilizzando VM Runtime su GDC. Un plug-in Cloud Storage ti consente di utilizzare Containerized Data Importer (CDI) 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 è attivato automaticamente in un cluster che esegue VM Runtime su GDC.
Prima di iniziare
Per completare questo documento, devi avere accesso alle seguenti risorse:
- Accesso a un cluster Google Distributed Cloud versione 1.12.0 (
anthosBareMetalVersion: 1.12.0) o successive. Puoi utilizzare qualsiasi tipo di cluster in grado di eseguire carichi di lavoro. Se necessario, prova Google Distributed Cloud su Compute Engine o consulta la panoramica sulla creazione del cluster. - Un account di servizio e una chiave account di servizio che vuoi utilizzare per l'accesso a Cloud Storage. Se necessario, configura un account di servizio che possa accedere a un bucket Cloud Storage.
Panoramica delle credenziali
Per accedere a Cloud Storage, utilizzi un account di servizio che fornisce le credenziali al bucket di archiviazione. Il account di servizio richiede privilegi diversi per accedere correttamente a un bucket di archiviazione:
- Bucket di archiviazione pubblico: utilizzi un account di servizio per l'autoidentificazione, ma non sono richieste autorizzazioni specifiche.
- Bucket di archiviazione privato: l'account di archiviazione richiede il privilegio di visualizzatore o amministratore per il bucket di archiviazione.
Esistono due modi per fornire le credenziali del account di servizio a CDI:
- Configura le Credenziali predefinite dell'applicazione (ADC) di Google sui nodi del cluster. Per saperne di più, consulta Configura ADC per on-premise o un altro provider cloud.
- Fornisci un secret contenente la chiave del account di servizio per accedere a Cloud Storage. Il resto di questo documento spiega come creare una chiave account di servizio e un secret.
Crea un secret
Passa la chiave del 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 è i dati con codifica base64 del file della chiave del service account. L'interfaccia a riga di comando crea questi dati con codifica base64 per te. Se utilizzi un manifest YAML per creare il secret, crea prima un hash base64 dei contenuti del file della chiave del 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_NAMESostituisci i seguenti valori:
SECRET_NAME: il nome del secret.SERVICE_ACCOUNT_KEY_PATH: il percorso del file della chiave del account di servizio.NAMESPACE_NAME: lo spazio dei nomi del secret.- Crea il secret nel cluster in cui è in esecuzione CDI e nello stesso spazio dei nomi del volume di dati. CDI è attivato automaticamente in un cluster che esegue VM Runtime su GDC.
Manifest
Crea un manifest
Secret, ad esempio my-secret.yaml, nell'editor che preferisci:nano my-secret.yamlCopia 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: OpaqueSostituisci i seguenti valori:
BASE64_SERVICE_ACCOUNT_FILE: l'hash base64 dei contenuti del file della chiave del account di servizio.SECRET_NAME: il nome del secret.NAMESPACE_NAME: lo spazio dei nomi del secret.- Crea il secret nel cluster in cui è in esecuzione CDI e nello stesso spazio dei nomi del volume di dati. CDI è attivato automaticamente in un cluster che esegue VM Runtime su GDC.
Salva e chiudi il manifest del secret nell'editor.
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 di secret all'interno dello stesso cluster o tra 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
Questo esempio esegue le seguenti operazioni:
- Crea un
SecretForwarderdenominatocdi-gcsnello spazio dei nomidefault. - Inoltra il secret denominato
gke-connectnello spazio dei nomianthos-credsa un nuovo secret denominatogcs-sanello spazio dei nomidefault. - Crea il nuovo secret nello stesso cluster.
Per inoltrare un secret nello stesso cluster, segui questi passaggi:
Crea un manifest
SecretForwarder, ad esempio my-forwarded-secret.yaml, nell' editor che preferisci:nano my-forwarded-secret.yamlCopia 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_NAMESostituisci i seguenti valori:
SECRET_FORWARDER_NAME: il nome di SecretForwarder.NAMESPACE_NAME: lo spazio dei nomi di SecretForwarder.TARGET_SECRET_NAME: il nome del nuovo secret.TARGET_NAMESPACE_NAME: lo spazio o gli spazi dei nomi del nuovo secret.- Crea il secret nel cluster in cui è in esecuzione CDI e nello stesso spazio dei nomi del volume di dati. CDI è attivato automaticamente in un cluster che esegue VM Runtime su GDC.
SOURCE_SECRET_NAME: il nome del secret di origine da inoltrare.SOURCE_NAMESPACE_NAME: lo spazio dei nomi del secret di origine da inoltrare.
Salva e chiudi il manifest
SecretForwardernell'editor.Applica il manifest
SecretForwarderutilizzandokubectl:kubectl apply -f my-forwarded-secret.yaml
Tra cluster
Il seguente manifest SecretForwarder di esempio inoltra un secret tra 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
Questo esempio esegue le seguenti operazioni:
- Crea un
SecretForwarderdenominatocdi-gcsnello spazio dei nomicluster-user1. - Inoltra il secret denominato
gke-connectnello spazio dei nomianthos-credsa un nuovo secret denominatogcs-sanello spazio dei nomidefault. - Crea il nuovo secret nel cluster denominato
user1.
Per inoltrare un secret nello stesso cluster, segui questi passaggi:
Crea un manifest
SecretForwarder, ad esempio my-forwarded-secret.yaml, nell' editor che preferisci:nano my-forwarded-secret.yamlCopia 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_NAMESostituisci i seguenti valori:
SECRET_FORWARDER_NAME: il nome di SecretForwarder nel cluster remoto.NAMESPACE_NAME: lo spazio dei nomi di SecretForwarder nel cluster remoto.TARGET_SECRET_NAME: il nome del nuovo secret nel cluster remoto.TARGET_NAMESPACE_NAME: lo spazio o gli spazi dei nomi del nuovo secret nel cluster remoto.- Crea il secret nel cluster in cui è in esecuzione CDI e nello stesso spazio dei nomi del volume di dati. CDI è attivato automaticamente in un cluster che esegue VM Runtime su GDC.
SOURCE_SECRET_NAME: il nome del secret di origine da inoltrare.SOURCE_NAMESPACE_NAME: lo spazio dei nomi del secret di origine da inoltrare.
Salva e chiudi il manifest
SecretForwardernell'editor.Applica il manifest
SecretForwardernel cluster di amministrazione utilizzandokubectlconKUBECONFIGdel 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, segui questi passaggi:
Crea un manifest che definisca un
VirtualMachineDiske unVirtualMachine, ad esempio my-vm.yaml, nell'editor che preferisci:nano my-vm.yamlCopia 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-dvSostituisci i seguenti valori:
VM_NAME- il nome della VM.IMAGE_URL- l'URL dell'immagine del disco Cloud Storage, ad esempiogs://my-images-bucket/disk.qcow2.SECRET_NAME- il nome del secret.
Salva e chiudi il manifest nell'editor.
Crea la VM e il disco utilizzando
kubectl:kubectl apply -f my-vm.yaml