Como usar o Container Registry com o Google Cloud Platform

Os recursos de computação no Google Cloud Platform são integrados ao Container Registry para facilitar o acesso. Neste documento, descrevemos as configurações de acesso necessárias para enviar e extrair imagens no Google Cloud Platform.

Requisitos

É necessário configurar as permissões e escopos corretos para VMs usadas para extrair ou enviar imagens.

Permissões do IAM

As permissões do IAM precisam ser configuradas para a conta de serviço que acessa o intervalo de armazenamento do Container Registry.

  • Para transferir imagens particulares do Docker, a conta de serviço usada pelas instâncias da VM precisa ter permissão de read para o intervalo de armazenamento da imagem.
  • Para enviar imagens particulares do Docker por push, a conta de serviço usada pelas instâncias da VM precisa ter permissão de read-write ou full-control para o intervalo de armazenamento da imagem.

Consulte Como configurar o controle de acesso para saber detalhes sobre as permissões necessárias.

Escopos de acesso

Os escopos de acesso definem os escopos do OAuth padrão usados nas solicitações da ferramenta gcloud. As instâncias de VM que enviam ou extraem imagens por push ou pull precisam ter o escopo de acesso de armazenamento correto para funcionar com o Container Registry.

Para extrair somente imagens, defina a permissão read-only para seus intervalos de armazenamento. Para enviar e extrair imagens por push ou pull, defina a permissão read-write nos intervalos de armazenamento.

Como definir escopos em uma instância de VM

Para criar uma nova instância de VM e especificar o escopo, use a opção --scope.

  • Para uma instância com permissões "somente leitura", execute o comando:

    gcloud compute instances create INSTANCE \
    --scopes https://www.googleapis.com/auth/devstorage.read_only
    
  • Para uma instância com permissões de "leitura e gravação", execute o comando:

    gcloud compute instances create INSTANCE \
    --scopes https://www.googleapis.com/auth/devstorage.read_write
    

Para alterar a conta de serviço e os escopos de acesso de uma instância, ela precisa ser parada temporariamente. Para parar a instância, leia a documentação sobre Parar uma instância. Depois de alterar a conta de serviço ou os escopos de acesso, lembre-se de reiniciar a instância. Use um dos comandos a seguir para a conta de serviço da alteração ou acesse os escopos da instância interrompida.

  • Para definir permissões "somente leitura", execute o comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
    
  • Para definir permissões de "leitura e gravação", execute o comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
    

Como definir escopos em um cluster do Google Kubernetes Engine

Por padrão, novos clusters do Google Kubernetes Engine são criados com permissões somente leitura para intervalos de armazenamento. Para definir o escopo de armazenamento read-write ao criar um cluster do Google Kubernetes Engine, use a opção --scopes. Por exemplo, o comando a seguir cria um cluster com os escopos bigquery,

`storage-rw`, and `compute-ro`:

    gcloud container clusters create example-cluster \
  --scopes=bigquery,storage-rw,compute-ro

Para mais informações sobre escopos que podem ser definidos ao criar um novo cluster, consulte a documentação do comando gcloud container clusters create.

Compute Engine

Se a instância de VM usada para enviar ou extrair imagens por push ou pull e o intervalo de armazenamento do Container Registry estiverem no mesmo projeto do Google Cloud Platform, a conta de serviço padrão do Compute Engine será configurada com as permissões apropriadas para enviar ou receber imagens. Se a instância de VM estiver em um projeto diferente ou se a instância usar uma conta de serviço diferente, configure o acesso ao intervalo de armazenamento usado pelo repositório.

Por padrão, uma VM do Compute Engine tem o escopo de acesso read-only configurado para os intervalos de armazenamento. Para enviar imagens particulares do Docker por push, sua instância precisa ter o escopo de acesso de armazenamento de read-write configurado conforme descrito em Escopos de acesso.

Instâncias do Compute Engine otimizadas para contêineres

Para mais informações sobre como iniciar uma instância do Compute Engine otimizada para contêineres usando uma imagem no registro, consulte Como iniciar um contêiner do Docker via cloud-config.

Para mais informações, consulte Como criar e configurar instâncias.

Google Kubernetes Engine

O Google Kubernetes Engine usa a conta de serviço configurada nas instâncias de VM dos nós do cluster para enviar e extrair imagens por push e pull.

Se o cluster do Google Kubernetes Engine e o intervalo de armazenamento do Container Registry estiverem no mesmo projeto do Google Cloud Platform, a conta de serviço padrão do Compute Engine será configurada com as permissões apropriadas para enviar ou extrair imagens por push ou pull. Se o cluster estiver em um projeto diferente ou se as VMs do cluster usarem uma conta de serviço diferente, configure o acesso ao intervalo de armazenamento usado pelo repositório.

Por padrão, uma VM do Compute Engine tem o escopo de acesso read-only configurado para os intervalos de armazenamento. Para enviar imagens particulares do Docker por push, sua instância precisa ter o escopo de acesso de armazenamento de read-write configurado conforme descrito em Escopos de acesso.

Como executar uma imagem

É possível executar uma imagem do Container Registry em um cluster do Google Kubernetes Engine usando o comando a seguir:

kubectl run [NAME] --image=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

em que:

  • [NAME] é o nome do recurso;
  • [HOSTNAME] está listado em Location no console como uma destas quatro opções: gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io;
  • [PROJECT-ID] é o ID do projeto do Console do Google Cloud Platform. Caso o ID contenha dois pontos (:), consulte Projetos com escopo de domínio;
  • [IMAGE] é o nome da imagem no Container Registry;
  • [TAG] é a tag que identifica a versão da imagem no Container Registry. Se você não especificar uma tag, o Container Registry procurará a tag padrão latest.

Para mais informações sobre os comandos do Kubernetes, consulte Visão geral do kubectl (em inglês). Se suas imagens estiverem em outro projeto, você precisará explicitamente conceder acesso de leitura à conta de serviço usada pelo cluster do Google Kubernetes Engine no intervalo de armazenamento em que estão as imagens.

Ambiente flexível do App Engine

É possível usar o Ambiente flexível do App Engine para personalizar um ambiente de execução existente, como Java 8, ou fornecer o próprio ambiente de execução fornecendo uma imagem personalizada do Docker ou Dockerfile.

O ambiente flexível compila automaticamente as imagens de contêiner usando o Cloud Build e as armazena no Container Registry.

Se a instância de VM usada para enviar ou extrair imagens por push ou pull e o intervalo de armazenamento do Container Registry estiverem no mesmo projeto do Google Cloud Platform, a conta de serviço padrão do Compute Engine será configurada com as permissões apropriadas para enviar ou receber imagens por push ou pull. Se as VMs estiverem em um projeto diferente ou se as VMs do cluster usarem uma conta de serviço diferente, configure o acesso ao intervalo de armazenamento usado pelo repositório.

Por padrão, uma VM do Compute Engine tem o escopo de acesso read-only configurado para os intervalos de armazenamento. Para enviar imagens particulares do Docker por push, sua instância precisa ter o escopo de acesso de armazenamento de read-write configurado conforme descrito em Escopos de acesso.

Como implantar no App Engine

É possível implantar uma imagem hospedada pelo Container Registry no App Engine usando a ferramenta de linha de comando gcloud.

É possível usar o comando gcloud beta app gen-config no diretório raiz de sua imagem para criar automaticamente o arquivo app.yaml, necessário para implantar no App Engine. Se preferir, você mesmo pode gravar o arquivo.

Depois de criar o arquivo de configuração do App Engine, gerar a imagem do Docker e enviá-la ao Container Registry, implante essa imagem no App Engine. Basta executar o comando a seguir:

gcloud app deploy --image-url=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

em que:

  • [HOSTNAME] está listado em Local no console como uma destas quatro opções: gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io;
  • [PROJECT-ID] é o ID do projeto do Console do Google Cloud Platform. Caso o ID contenha dois pontos (:), consulte Projetos com escopo de domínio;
  • [IMAGE] é o nome da imagem no Container Registry;
  • [TAG] é a tag que identifica a versão da imagem no Container Registry. Se você não especificar uma tag, o Container Registry procurará a tag padrão latest.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…