Como usar o Container Registry com o Google Cloud

Para simplificar os fluxos de trabalho de criação e implantação, algumas contas de serviço e ambientes de execução do Google Cloud são pré-configurados com permissões para acessar contêineres armazenados no mesmo projeto.

Esta página resume as integrações comuns com os produtos do Google Cloud e os requisitos associados para acessar contêineres.

Requisitos gerais de acesso

Por padrão, as contas de serviço de algumas integrações comuns são configuradas com as permissões do Cloud Storage para acessar o Container Registry no mesmo projeto.

Para a conta de serviço usada pelas VMs do Compute Engine, incluindo VMs nos clusters do Google Kubernetes Engine, o acesso é baseado nas permissões do IAM e nos escopos de acesso do armazenamento.

Você mesmo precisa configurar ou modificar permissões se:

  • Você está usando uma conta de serviço em um projeto para acessar o Container Registry em um projeto diferente
  • Você está usando uma conta de serviço padrão com acesso somente leitura ao armazenamento, mas quer extrair e enviar imagens
  • Você está usando uma conta de serviço personalizada para interagir com o Container Registry

Consulte as seções específicas do produto para obter informações adicionais.

Cloud Build

Por padrão, a conta de serviço do Cloud Build tem permissões para enviar e extrair imagens quando o Container Registry está no mesmo projeto.

Você precisa configurar as permissões apropriadas nos seguintes casos:

  • O Cloud Build está em um projeto diferente dos repositórios que você quer que as versões acessem.
  • Suas versões estão usando uma conta de serviço diferente da conta de serviço padrão do Cloud Build. Nesse caso, você precisa conceder à conta de serviço permissões para acessar o Container Registry.

Compute Engine

Se a instância de VM e o Container Registry estiverem no mesmo projeto do Google Cloud, a conta de serviço padrão do Compute Engine será configurada com permissões para extrair imagens.

Se a instância de VM estiver em um projeto diferente ou se ela usar uma conta de serviço diferente, será necessário conceder as permissões apropriadas para acessar o intervalo de armazenamento usado pelo Container Registry.

Por padrão, uma VM do Compute Engine tem o escopo de acesso read-only configurado para os buckets de armazenamento. Para enviar imagens particulares do Docker, a instância de VM precisa ter o read-write armazenamento escopo 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 ver mais informações, acesse 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.

Permissões exigidas

Se o cluster do Google Kubernetes Engine e do Container Registry estiverem no mesmo projeto do Google Cloud, a conta de serviço padrão do Compute Engine será configurada com as permissões apropriadas para enviar ou extrair imagens.

Se o cluster estiver em um projeto diferente ou se as VMs no cluster usarem uma conta de serviço diferente, você precisará conceder as permissões apropriadas para acessar o intervalo de armazenamento usado pelo Container Registry.

Por padrão, uma VM do Compute Engine tem o escopo de acesso read-only configurado para os buckets de armazenamento. Para enviar imagens particulares do Docker, a instância de VM precisa ter o read-write armazenamento escopo 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. É uma das quatro opções: gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io.
  • [PROJECT-ID] é o ID do projeto do seu Console do Google Cloud. Caso o ID do projeto 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).

Ambiente flexível do App Engine

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

Com o Cloud Build, é possível automatizar a criação dos seus contêineres, enviá-los para o Container Registry e implantá-los no App Engine.

Permissões necessárias

Por padrão, a conta de serviço padrão do App Engine tem permissões para extrair e enviar para repositórios no mesmo projeto.

Se o App Engine estiver em um projeto diferente, será preciso conceder à conta de serviço do App Engine permissões para acessar o repositório do Container Registry.

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.

  1. Crie o arquivo de configuração do App Engine para seu aplicativo.
  2. Crie uma imagem do Docker e envie-a por push para o repositório. Use o Cloud Build para criar e enviar seu contêiner para o repositório.
  3. Para implantar a imagem no App Engine, execute o seguinte comando:

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

onde:

  • [HOSTNAME] está listado em Location no console. É uma das quatro opções: gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io.
  • [PROJECT-ID] é o ID do projeto do seu Console do Google Cloud. Caso o ID do projeto 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.