En este documento se explica cómo crear y usar credenciales para acceder a Cloud Storage mediante VM Runtime en GDC. Un complemento de Cloud Storage te permite usar Containerized Data Importer (CDI) para importar imágenes de VM desde segmentos de Cloud Storage. Después, puedes crear discos virtuales a partir de estas imágenes en Cloud Storage y adjuntarlos a las VMs que se ejecutan en tu clúster. CDI se habilita automáticamente en un clúster que ejecuta VM Runtime en GDC.
Antes de empezar
Para completar este documento, necesitas tener acceso a los siguientes recursos:
- Acceso a un clúster de Google Distributed Cloud versión 1.12.0 (
anthosBareMetalVersion: 1.12.0
) o posterior. Puedes usar cualquier tipo de clúster que pueda ejecutar cargas de trabajo. Si es necesario, prueba Google Distributed Cloud en Compute Engine o consulta la descripción general de la creación de clústeres. - Una cuenta de servicio y una clave de cuenta de servicio que quieras usar para acceder a Cloud Storage. Si es necesario, configura una cuenta de servicio que pueda acceder a un segmento de Cloud Storage.
Descripción general de las credenciales
Para acceder a Cloud Storage, debes usar una cuenta de servicio que proporcione credenciales al segmento de almacenamiento. La cuenta de servicio requiere diferentes privilegios para acceder correctamente a un segmento de almacenamiento:
- Segmento de almacenamiento público: usas una cuenta de servicio para identificarte, pero no se necesitan permisos específicos.
- Segmento de almacenamiento privado: la cuenta de almacenamiento requiere el privilegio de lector o administrador en el segmento de almacenamiento.
Hay dos formas de proporcionar las credenciales de la cuenta de servicio a CDI:
- Configura las credenciales predeterminadas de la aplicación de Google (ADC) en los nodos de tu clúster. Para obtener más información, consulta el artículo Configurar ADC para un entorno local u otro proveedor de servicios en la nube.
- Proporciona un secreto que contenga la clave de la cuenta de servicio para acceder a Cloud Storage. En el resto de este documento se explica cómo crear una clave de cuenta de servicio y un secreto.
Crear secreto
Para pasar la clave de la cuenta de servicio a Kubernetes, debes usar un secreto creado en el espacio de nombres del volumen de datos. La sección data
del secreto contiene una entrada para creds-gcp.json
. El valor son los datos codificados en base64 del archivo de clave de la cuenta de servicio. La CLI crea estos datos codificados en base64 automáticamente. Si usas un manifiesto YAML para crear el secreto, primero crea un hash base64 del contenido del archivo de claves de tu cuenta de servicio.
CLI
Crea el secreto con
kubectl
:kubectl create secret generic SECRET_NAME \ --from-file=creds-gcp.json=SERVICE_ACCOUNT_KEY_PATH \ --namespace NAMESPACE_NAME
Sustituye los siguientes valores:
SECRET_NAME
: el nombre del secreto.SERVICE_ACCOUNT_KEY_PATH
: la ruta al archivo de clave de tu cuenta de servicio.NAMESPACE_NAME
: el espacio de nombres de tu Secret.- Crea tu secreto en el clúster en el que se ejecuta CDI y en el mismo espacio de nombres que el volumen de datos. CDI se habilita automáticamente en un clúster que ejecuta el entorno de ejecución de máquinas virtuales en GDC.
Archivo de manifiesto
Crea un manifiesto
Secret
, como my-secret.yaml, en el editor que prefieras:nano my-secret.yaml
Copia y pega el siguiente manifiesto YAML:
apiVersion: v1 data: creds-gcp.json: BASE64_SERVICE_ACCOUNT_FILE kind: Secret metadata: name: SECRET_NAME namespace: NAMESPACE_NAME type: Opaque
Sustituye los siguientes valores:
BASE64_SERVICE_ACCOUNT_FILE
: el hash base64 del contenido del archivo de clave de tu cuenta de servicio.SECRET_NAME
: el nombre del secreto.NAMESPACE_NAME
: el espacio de nombres de tu Secret.- Crea tu secreto en el clúster en el que se ejecuta CDI y en el mismo espacio de nombres que el volumen de datos. CDI se habilita automáticamente en un clúster que ejecuta el entorno de ejecución de máquinas virtuales en GDC.
Guarda y cierra el manifiesto de Secret en tu editor.
Aplica el manifiesto de Secret con
kubectl
:kubectl apply -f my-secret.yaml
Reenviar un secreto
En lugar de crear un secreto, puedes crear un SecretForwarder
para reenviar un secreto que ya tengas y usarlo. SecretForwarder
admite el reenvío de secretos
dentro del mismo clúster o entre clústeres, como del clúster de administrador a un
clúster de usuario.
Para usar el secreto de destino para acceder a Cloud Storage, el secreto de origen debe tener una clave creds-gcp.json
en su sección data
.
Mismo clúster
En el siguiente ejemplo de manifiesto de SecretForwarder
se reenvía un secreto en el mismo clúster:
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
Este ejemplo hace lo siguiente:
- Crea un
SecretForwarder
llamadocdi-gcs
en el espacio de nombresdefault
. - Reenvía el secreto llamado
gke-connect
en el espacio de nombresanthos-creds
a un nuevo secreto llamadogcs-sa
en el espacio de nombresdefault
. - Crea el nuevo secreto en el mismo clúster.
Para reenviar un secreto en el mismo clúster, sigue estos pasos:
Crea un archivo de manifiesto
SecretForwarder
, como my-forwarded-secret.yaml, en el editor que prefieras:nano my-forwarded-secret.yaml
Copia y pega el siguiente manifiesto 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
Sustituye los siguientes valores:
SECRET_FORWARDER_NAME
: el nombre de tu SecretForwarder.NAMESPACE_NAME
: el espacio de nombres de tu SecretForwarder.TARGET_SECRET_NAME
: el nombre del nuevo secreto.TARGET_NAMESPACE_NAME
: los espacios de nombres de tu nuevo secreto.- Crea tu secreto en el clúster en el que se ejecuta CDI y en el mismo espacio de nombres que el volumen de datos. CDI se habilita automáticamente en un clúster que ejecuta el entorno de ejecución de máquinas virtuales en GDC.
SOURCE_SECRET_NAME
: el nombre del secreto de origen que quieres reenviar.SOURCE_NAMESPACE_NAME
: el espacio de nombres de tu Secret de origen que quieres reenviar.
Guarda y cierra el manifiesto de
SecretForwarder
en tu editor.Aplica el manifiesto
SecretForwarder
conkubectl
:kubectl apply -f my-forwarded-secret.yaml
Entre clústeres
En el siguiente ejemplo de manifiesto de SecretForwarder
se reenvía un secreto entre clústeres:
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
Este ejemplo hace lo siguiente:
- Crea un
SecretForwarder
llamadocdi-gcs
en el espacio de nombrescluster-user1
. - Reenvía el secreto llamado
gke-connect
en el espacio de nombresanthos-creds
a un nuevo secreto llamadogcs-sa
en el espacio de nombresdefault
. - Crea el nuevo secreto en el clúster llamado
user1
.
Para reenviar un secreto en el mismo clúster, sigue estos pasos:
Crea un archivo de manifiesto
SecretForwarder
, como my-forwarded-secret.yaml, en el editor que prefieras:nano my-forwarded-secret.yaml
Copia y pega el siguiente manifiesto 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
Sustituye los siguientes valores:
SECRET_FORWARDER_NAME
: el nombre de tu SecretForwarder en el clúster remoto.NAMESPACE_NAME
: el espacio de nombres de tu SecretForwarder en el clúster remoto.TARGET_SECRET_NAME
: el nombre del nuevo secreto en el clúster remoto.TARGET_NAMESPACE_NAME
: los espacios de nombres del nuevo secreto en el clúster remoto.- Crea tu secreto en el clúster en el que se ejecuta CDI y en el mismo espacio de nombres que el volumen de datos. CDI se habilita automáticamente en un clúster que ejecuta el entorno de ejecución de máquinas virtuales en GDC.
SOURCE_SECRET_NAME
: el nombre del secreto de origen que quieres reenviar.SOURCE_NAMESPACE_NAME
: el espacio de nombres de tu Secret de origen que quieres reenviar.
Guarda y cierra el manifiesto de
SecretForwarder
en tu editor.Aplica el manifiesto
SecretForwarder
en el clúster de administración mediantekubectl
con elKUBECONFIG
del clúster de administración:kubectl apply -f my-forwarded-secret.yaml
Usar un secreto para importar una imagen
Para usar el secreto e importar una imagen de Cloud Storage al crear un disco virtual y una VM, sigue estos pasos:
Crea un manifiesto que defina un
VirtualMachineDisk
y unVirtualMachine
, como my-vm.yaml,en el editor que prefieras:nano my-vm.yaml
Copia y pega la siguiente definición de 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
Sustituye los siguientes valores:
VM_NAME
: el nombre de tu VM.IMAGE_URL
: la URL de la imagen de disco de Cloud Storage, comogs://my-images-bucket/disk.qcow2
.SECRET_NAME
: el nombre de tu secreto.
Guarda y cierra el archivo de manifiesto en tu editor.
Crea la VM y el disco con
kubectl
:kubectl apply -f my-vm.yaml