Neste documento, mostramos como criar e usar credenciais para acessar o Cloud Storage usando o ambiente de execução da VM no Google Distributed Cloud. Um plug-in do Cloud Storage permite usar o Importador de dados conteinerizado (CDI, na sigla em inglês) para importar imagens de VM de buckets do Cloud Storage. Em seguida, é possível criar discos virtuais dessas imagens no Cloud Storage e anexá-los a VMs em execução no cluster. O CDI é ativado automaticamente em um cluster que executa o ambiente de execução da VM no Google Distributed Cloud.
Antes de começar
Para concluir este documento, você precisa de acesso aos seguintes recursos:
- Acesso ao GKE em um cluster Bare Metal versão 1.12.0 (
anthosBareMetalVersion: 1.12.0
) ou superior. Use qualquer tipo de cluster capaz de executar cargas de trabalho. Se necessário, teste o GKE em Bare Metal no Compute Engine ou consulte as informações gerais sobre a criação de clusters. - Uma conta de serviço e uma chave de conta de serviço que você quer usar para acessar o Cloud Storage. Se necessário, configure uma conta de serviço que possa acessar um bucket do Cloud Storage.
Visão geral das credenciais
Para acessar o Cloud Storage, use uma conta de serviço que fornece credenciais para o bucket de armazenamento. A conta de serviço requer privilégios diferentes para acessar um bucket de armazenamento:
- Bucket de armazenamento público: você usa uma conta de serviço para autoidentificação, mas não são necessárias permissões específicas.
- Bucket de armazenamento particular: a conta de armazenamento exige o privilégio Leitor ou Administrador no bucket de armazenamento.
Há duas maneiras de fornecer as credenciais da conta de serviço ao CDI:
- Configure o Application Default Credentials (ADC) do Google nos nós no cluster. Para mais informações, consulte Autenticação como uma conta de serviço.
- Informe um secret que contenha a chave da conta de serviço para acessar o Cloud Storage. O restante deste documento mostra como criar uma chave e um secret da conta de serviço.
Criar um secret
Transmita a chave da conta de serviço ao Kubernetes usando um secret criado no
namespace do volume de dados. A seção data
do secret contém uma entrada
para creds-gcp.json
. O valor é o dado codificado em base64 do arquivo de chave da conta de serviço. A CLI cria esses dados codificados em base64 para você. Se você usar um
manifesto YAML para criar o secret, primeiro crie um hash Base64 do conteúdo do arquivo
de chave da sua conta de serviço.
CLI
Crie o Secret usando
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 secret.SERVICE_ACCOUNT_KEY_PATH
: o caminho para o arquivo de chave da sua conta de serviço.NAMESPACE_NAME
: o namespace do Secret.- Crie seu secret no cluster em que o CDI é executado e no mesmo namespace que o volume de dados. O CDI é ativado automaticamente em um cluster que executa o ambiente de execução da VM no Google Distributed Cloud.
Manifesto
Crie um manifesto
Secret
, como my-secret.yaml, no editor de sua escolha:nano my-secret.yaml
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 em base64 do conteúdo do arquivo de chave da sua conta de serviço.SECRET_NAME
: o nome do secret.NAMESPACE_NAME
: o namespace do Secret.- Crie seu secret no cluster em que o CDI é executado e no mesmo namespace que o volume de dados. O CDI é ativado automaticamente em um cluster que executa o ambiente de execução da VM no Google Distributed Cloud.
Salve e feche o manifesto do secret no editor.
Aplique o manifesto do secret usando
kubectl
:kubectl apply -f my-secret.yaml
Encaminhar um secret atual
Em vez de criar um secret, é possível criar um SecretForwarder
para encaminhar
um secret atual para uso. O SecretForwarder
oferece suporte ao encaminhamento de secrets
no mesmo cluster ou entre clusters, como do cluster de administrador para um
cluster de usuário.
Se quiser usar o secret de destino para acessar o Cloud Storage, ele precisará ter
uma chave creds-gcp.json
na seção data
.
Mesmo cluster
O exemplo
de manifesto SecretForwarder
a seguir encaminha uma chave secreta 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
chamadocdi-gcs
no namespacedefault
. - Encaminha o secret chamado
gke-connect
no namespaceanthos-creds
para um novo secret chamadogcs-sa
no namespacedefault
. - Cria o novo secret no mesmo cluster.
Para encaminhar um secret no mesmo cluster, siga estas etapas:
Crie um manifesto
SecretForwarder
, como my-forwarded-secret.yaml, no editor de sua escolha:nano my-forwarded-secret.yaml
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 SecretForwarder.NAMESPACE_NAME
: o namespace do SecretForwarder.TARGET_SECRET_NAME
: o nome do novo Secret.TARGET_NAMESPACE_NAME
: os namespaces do novo Secret.- Crie seu secret no cluster em que o CDI é executado e no mesmo namespace que o volume de dados. O CDI é ativado automaticamente em um cluster que executa o ambiente de execução da VM no Google Distributed Cloud.
SOURCE_SECRET_NAME
: o nome do secret de origem a ser encaminhado.SOURCE_NAMESPACE_NAME
: o namespace do secret de origem a ser encaminhado.
Salve e feche o manifesto
SecretForwarder
no seu editor.Aplique o manifesto
SecretForwarder
usandokubectl
:kubectl apply -f my-forwarded-secret.yaml
Em clusters
O exemplo de manifesto SecretForwarder
a seguir encaminha um secret entre os
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
chamadocdi-gcs
no namespacecluster-user1
. - Encaminha o secret chamado
gke-connect
no namespaceanthos-creds
para um novo secret chamadogcs-sa
no namespacedefault
. - Cria o novo secret no cluster chamado
user1
.
Para encaminhar um secret no mesmo cluster, siga estas etapas:
Crie um manifesto
SecretForwarder
, como my-forwarded-secret.yaml, no editor de sua escolha:nano my-forwarded-secret.yaml
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 SecretForwarder no cluster remoto.NAMESPACE_NAME
: o namespace do SecretForwarder no cluster remoto.TARGET_SECRET_NAME
: o nome do novo Secret no cluster remoto.TARGET_NAMESPACE_NAME
: os namespaces do novo Secret no cluster remoto.- Crie seu secret no cluster em que o CDI é executado e no mesmo namespace que o volume de dados. O CDI é ativado automaticamente em um cluster que executa o ambiente de execução da VM no Google Distributed Cloud.
SOURCE_SECRET_NAME
: o nome do secret de origem a ser encaminhado.SOURCE_NAMESPACE_NAME
: o namespace do secret de origem a ser encaminhado.
Salve e feche o manifesto
SecretForwarder
no seu editor.Aplique o manifesto
SecretForwarder
no cluster de administrador usandokubectl
com oKUBECONFIG
do cluster de administrador:kubectl apply -f my-forwarded-secret.yaml
Usar um secret para importar uma imagem
Para usar o secret para importar uma imagem do Cloud Storage ao criar um disco virtual e uma VM, siga estas etapas:
Crie um manifesto que defina um
VirtualMachineDisk
e umaVirtualMachine
, como my-vm.yaml, no editor que você escolher:nano my-vm.yaml
Copie e cole a seguinte definição 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
Substitua os seguintes valores:
VM_NAME
: o nome da VM.IMAGE_URL
: o URL da imagem do disco do Cloud Storage, comogs://my-images-bucket/disk.qcow2
.SECRET_NAME
: o nome do secret.
Salve e feche o manifesto no editor.
Crie a VM e o disco usando
kubectl
:kubectl apply -f my-vm.yaml