Crie e use credenciais para importar imagens do Cloud Storage para o VM Runtime no GDC

Este documento mostra-lhe como criar e usar credenciais para aceder ao Cloud Storage através do VM Runtime no GDC. Um plug-in do Cloud Storage permite-lhe usar o importador de dados contentorizados (CDI) para importar imagens de VMs de contentores do Cloud Storage. Em seguida, pode criar discos virtuais a partir destas imagens no Cloud Storage e anexá-los a VMs que são executadas no seu cluster. A CDI é ativada automaticamente num cluster que executa o VM Runtime no GDC.

Antes de começar

Para preencher este documento, precisa de ter acesso aos seguintes recursos:

Vista geral das credenciais

Para aceder ao Cloud Storage, usa uma conta de serviço que faculta credenciais ao contentor de armazenamento. A conta de serviço requer privilégios diferentes para aceder com êxito a um contentor de armazenamento:

  • Contentor de armazenamento público: usa uma conta de serviço para autoidentificação, mas não são necessárias autorizações específicas.
  • Contentor de armazenamento privado: a conta de armazenamento requer o privilégio de visualizador ou administrador para o contentor de armazenamento.

Existem duas formas de fornecer as credenciais da conta de serviço à CDI:

  • Configure as Credenciais padrão da aplicação (ADC) da Google nos nós no seu cluster. Para mais informações, consulte o artigo Configure o ADC para um ambiente no local ou outro fornecedor de nuvem.
  • Forneça um segredo que contenha a chave da conta de serviço para aceder ao Cloud Storage. O resto deste documento mostra-lhe como criar uma chave e um segredo da conta de serviço.

Crie um Secret

Transfere a chave da conta de serviço para o Kubernetes através de um segredo criado no espaço de nomes do volume de dados. A secção data do Secret contém uma entrada para creds-gcp.json. O valor são os dados codificados em base64 do ficheiro de chave da conta de serviço. A CLI cria estes dados codificados em base64 automaticamente. Se usar um manifesto YAML para criar o segredo, comece por criar um hash base64 do conteúdo do ficheiro de chave da conta de serviço.

CLI

  • Crie o Secret com kubectl:

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

    Substitua os seguintes valores:

    • SECRET_NAME: o nome do seu segredo.
    • SERVICE_ACCOUNT_KEY_PATH: o caminho para o ficheiro de chave da conta de serviço.
    • NAMESPACE_NAME: o espaço de nomes do seu segredo.
      • Crie o seu segredo no cluster onde o CDI é executado e no mesmo espaço de nomes que o volume de dados. A CDI é ativada automaticamente num cluster que executa o VM Runtime no GDC.

Manifesto

  1. Crie um Secretmanifesto, como my-secret.yaml, no editor da sua preferência:

    nano my-secret.yaml
    
  2. Copie e cole o seguinte manifesto YAML:

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

    Substitua os seguintes valores:

    • BASE64_SERVICE_ACCOUNT_FILE: o hash base64 do conteúdo do ficheiro de chave da conta de serviço.
    • SECRET_NAME: o nome do seu segredo.
    • NAMESPACE_NAME: o espaço de nomes do seu segredo.
      • Crie o seu segredo no cluster onde o CDI é executado e no mesmo espaço de nomes que o volume de dados. A CDI é ativada automaticamente num cluster que executa o VM Runtime no GDC.
  3. Guarde e feche o manifesto secreto no editor.

  4. Aplique o manifesto Secret com kubectl:

    kubectl apply -f my-secret.yaml
    

Encaminhe um segredo existente

Em vez de criar um Secret, pode criar um SecretForwarder para encaminhar um Secret existente para utilização. O SecretForwarder suporta o encaminhamento de segredos no mesmo cluster ou entre clusters, como do cluster de administrador para um cluster de utilizador.

Para usar o segredo de destino para aceder ao Cloud Storage, o segredo de origem tem de ter uma chave creds-gcp.json na respetiva secção data.

No mesmo cluster

O exemplo seguinte do manifesto SecretForwarder encaminha um segredo no mesmo 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

Este exemplo faz o seguinte:

  • Cria um SecretForwarder denominado cdi-gcs no espaço de nomes default.
  • Encaminha o segredo denominado gke-connect no espaço de nomes anthos-creds para um novo segredo denominado gcs-sa no espaço de nomes default.
  • Cria o novo segredo no mesmo cluster.

Para encaminhar um segredo no mesmo cluster, conclua os seguintes passos:

  1. Crie um SecretForwarder manifesto, como my-forwarded-secret.yaml, no editor à sua escolha:

    nano my-forwarded-secret.yaml
    
  2. Copie e cole o seguinte manifesto 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
    

    Substitua os seguintes valores:

    • SECRET_FORWARDER_NAME: o nome do seu SecretForwarder.
    • NAMESPACE_NAME: o espaço de nomes do seu SecretForwarder.
    • TARGET_SECRET_NAME: o nome do seu novo segredo.
    • TARGET_NAMESPACE_NAME: os namespaces do seu novo segredo.
      • Crie o seu segredo no cluster onde o CDI é executado e no mesmo espaço de nomes que o volume de dados. A CDI é ativada automaticamente num cluster que executa o VM Runtime no GDC.
    • SOURCE_SECRET_NAME: o nome do segredo de origem para encaminhar.
    • SOURCE_NAMESPACE_NAME: o espaço de nomes da sua origem Segredo a encaminhar.
  3. Guarde e feche o manifesto SecretForwarder no editor.

  4. Aplique o manifesto SecretForwarder através de kubectl:

    kubectl apply -f my-forwarded-secret.yaml
    

Em vários clusters

O exemplo seguinte SecretForwarder manifest encaminha um segredo entre 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

Este exemplo faz o seguinte:

  • Cria um SecretForwarder denominado cdi-gcs no espaço de nomes cluster-user1.
  • Encaminha o segredo denominado gke-connect no espaço de nomes anthos-creds para um novo segredo denominado gcs-sa no espaço de nomes default.
  • Cria o novo segredo no cluster denominado user1.

Para encaminhar um segredo no mesmo cluster, conclua os seguintes passos:

  1. Crie um SecretForwarder manifesto, como my-forwarded-secret.yaml, no editor à sua escolha:

    nano my-forwarded-secret.yaml
    
  2. Copie e cole o seguinte manifesto 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
    

    Substitua os seguintes valores:

    • SECRET_FORWARDER_NAME: o nome do seu SecretForwarder no cluster remoto.
    • NAMESPACE_NAME: o espaço de nomes do seu SecretForwarder no cluster remoto.
    • TARGET_SECRET_NAME: o nome do novo segredo no cluster remoto.
    • TARGET_NAMESPACE_NAME: os espaços de nomes do novo segredo no cluster remoto.
      • Crie o seu segredo no cluster onde o CDI é executado e no mesmo espaço de nomes que o volume de dados. A CDI é ativada automaticamente num cluster que executa o VM Runtime no GDC.
    • SOURCE_SECRET_NAME: o nome do segredo de origem para encaminhar.
    • SOURCE_NAMESPACE_NAME: o espaço de nomes da sua origem Segredo a encaminhar.
  3. Guarde e feche o manifesto SecretForwarder no editor.

  4. Aplique o manifesto no cluster de administrador com kubectl com o KUBECONFIG do cluster de administrador:SecretForwarder

    kubectl apply -f my-forwarded-secret.yaml
    

Use um segredo para importar uma imagem

Para usar o segredo para importar uma imagem do Cloud Storage quando cria um disco virtual e uma VM, conclua os seguintes passos:

  1. Crie um manifesto que defina um VirtualMachineDisk e VirtualMachine, como my-vm.yaml,no editor da sua preferência:

    nano my-vm.yaml
    
  2. Copie e cole a seguinte definição 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
    

    Substitua os seguintes valores:

    • VM_NAME – o nome da sua VM.
    • IMAGE_URL – o URL da imagem de disco Armazenamento na nuvem, como gs://my-images-bucket/disk.qcow2.
    • SECRET_NAME: o nome do seu segredo.
  3. Guarde e feche o manifesto no editor.

  4. Crie a VM e o disco com kubectl:

    kubectl apply -f my-vm.yaml
    

O que se segue?