O GKE na AWS oferece uma maneira de extrair imagens privadas do Artifact Registry ou do Container Registry sem precisar usar um segredo do Kubernetes. Anteriormente, você precisava executar as seguintes etapas:
- Crie uma conta de serviço do Google Identity and Access Management (IAM).
- Conceda à conta de serviço permissões para acessar o registro privado.
- Baixe a chave da conta de serviço e salve-a como um segredo do Kubernetes no seu cluster.
- Faça referência a este segredo no seu manifesto YAML para pods ou implantações para que eles possam acessar imagens do repositório de contêineres privado.
- Gire e gerencie regularmente as chaves associadas à conta de serviço do Google IAM.
O GKE na AWS elimina todas essas etapas manuais e lida automaticamente com a autenticação e a autorização necessárias para extrair imagens privadas.
Antes de começar
Para executar as etapas desta página, primeiro conclua o seguinte:
- Crie um cluster .
- Crie um pool de nós .
Crie uma imagem do Docker e envie-a para o Artifact Registry. Os exemplos nesta página usam o contêiner
hello-app
. Para criar este contêiner, siga as etapas em Criar uma imagem de contêiner e Enviar a imagem do Docker para o Artifact Registry , parte do GKE em Google Cloud documentação.Atualize para a versão 1.28 do GKE na AWS para que você possa extrair imagens privadas do Artifact Registry ou do Container Registry sem precisar usar um segredo do Kubernetes.
Verifique as imagens no Registro de Artefatos
Para concluir o restante dessas etapas, você precisa de uma imagem de contêiner. Obtenha o nome das suas imagens de contêiner executando as seguintes etapas:
Configure a ferramenta de linha de comando do Docker para autenticar no Artifact Registry com o Google Cloud SDK:
gcloud auth configure-docker
O Google Cloud CLI registra um auxiliar de credencial para todos os registros do Docker compatíveis com o Google.
Confirme se o seu Artifact Registry inclui uma imagem com o comando
docker images
:docker images
O Docker se conecta ao Artifact Registry e retorna as imagens disponíveis no seu repositório. Por exemplo, a resposta a seguir mostra uma imagem de contêiner chamada
hello-app
no repositórioPROJECT_NAME
emus-west1-docker.pkg.dev
.REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app v1 f7cfe0d58569 21 minutes ago 11.5MB
Se você não tiver uma imagem de contêiner pronta, crie uma seguindo as etapas em Implantando um aplicativo em contêiner .
Crie Pods com imagens privadas sem segredos de extração de imagens
Para criar um Pod que possa acessar uma imagem de contêiner privada de um registro, você não precisa mais fornecer o campo spec.imagePullSecrets
na especificação do seu Pod. Para configurar seu Pod, siga estas etapas:
Crie uma definição de Pod sem o campo
spec.imagePullSecrets
:apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
Substitua o seguinte:
-
POD_NAME
: o nome do Pod. -
CONTAINER_NAME
: o nome do contêiner dentro do Pod. -
LOCATION
: a Google Cloud região que contém seu registro. Por exemplo,us-west1
. -
PROJECT_NAME
: o nome do projeto do Google que hospeda o repositório do Artifact Registry, que pode ser o mesmo do projeto do seu cluster. Se o repositório estiver em um projeto diferente, consulte Usar o Artifact Registry quando ele não estiver no mesmo projeto que o seu cluster para obter etapas adicionais. -
REPOSITORY_NAME
: o nome do seu repositório. -
IMAGE_NAME
: o nome da imagem. -
IMAGE_VERSION
: a versão da imagem.
-
Aplique a configuração ao seu cluster com
kubectl
:kubectl apply -f YAML_FILE_NAME
Substitua
YAML_FILE_NAME
pelo nome do seu arquivo YAML.
Exemplo de criação de Pods sem extração de imagem Secrets
Aqui está um exemplo de criação de um Pod do Kubernetes sem a necessidade de extrair a imagem Secrets. O Pod extrai a imagem hello-app
do Artifact Registry.
Para extrair a imagem
hello-app
, copie o seguinte YAML em um arquivo chamadohello-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1
Aplique a configuração ao seu cluster com
kubectl
:kubectl apply -f hello-pod.yaml
Confirme se o Pod está em execução com
kubectl get
:kubectl get pod/hello-pod
A resposta inclui um Pod com status
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Crie implantações com imagens privadas sem segredos de extração de imagens
Para criar uma implantação que possa acessar uma imagem de contêiner privada de um registro, você não precisa mais fornecer o campo spec.imagePullSecrets
na especificação da implantação. Para configurar sua implantação, siga estas etapas:
Crie uma definição de implantação sem o campo
spec.imagePullSecrets
:apiVersion: apps/v1 kind: Deployment metadata: name: DEPLOYMENT_NAME spec: replicas: NUMBER_OF_REPLICAS template: spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
Substitua o seguinte:
-
DEPLOYMENT_NAME
: o nome da sua implantação. -
NUMBER_OF_REPLICAS
: quantas instâncias do Pod definido na Implantação devem estar em execução a qualquer momento. -
CONTAINER_NAME
: o nome do contêiner dentro do Pod. -
LOCATION
: a Google Cloud região que contém seu registro. Por exemplo,us-west1
. -
PROJECT_NAME
: o nome do projeto do Google que hospeda o repositório do Artifact Registry, que pode não ser o mesmo do projeto do seu cluster. Se o repositório estiver em um projeto diferente, consulte Usar o Artifact Registry quando ele não estiver no mesmo projeto que o seu cluster para obter etapas adicionais. -
REPOSITORY_NAME
: o nome do seu repositório. -
IMAGE_NAME
: o nome da imagem. -
IMAGE_VERSION
: a versão da imagem.
-
Aplique a configuração ao seu cluster com
kubectl
.kubectl apply -f name-of-your-yaml-file.yaml
Exemplo de criação de uma implantação sem extração de imagem Secrets
Aqui está um exemplo de criação de uma implantação sem segredos de extração de imagem. A implantação extrai uma imagem hello-app
do Artifact Registry.
Crie um arquivo chamado
hello-deployment.yaml
com o seguinte conteúdo:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 env: - name: "PORT" value: "50001"
Substitua o seguinte:
-
LOCATION
: a Google Cloud região que contém seu registro. Por exemplo,us-west1
. -
PROJECT_NAME
: o nome do projeto do Google que hospeda o repositório do Artifact Registry, que pode não ser o mesmo do projeto do seu cluster. Se o repositório estiver em um projeto diferente, consulte Usar o Artifact Registry quando ele não estiver no mesmo projeto que o seu cluster para obter etapas adicionais.
-
Aplique a configuração ao seu cluster com
kubectl
.kubectl apply -f hello-deployment.yaml
Confirme se sua implantação está sendo executada com
kubectl pods
.kubectl get pods --selector=app=products
A saída exibe três Pods
Running
.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m
Use o Artifact Registry quando ele não estiver no mesmo projeto que seu cluster
Para usar um repositório do Artifact Registry que esteja em um Projeto Google diferente daquele que contém seu cluster, execute as seguintes etapas:
Conceda à conta de serviço para as instâncias de máquina virtual do pool de nós do seu cluster, conhecida como Agente de Serviço de Máquina do Pool de Nós , as permissões necessárias para acessar esse registro.
gcloud projects add-iam-policy-binding AR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Esta etapa garante que seu cluster possa recuperar artefatos do registro nesse projeto separado.
Substitua o seguinte:
-
AR_PROJECT_ID
: o ID do projeto do Google que hospeda o Artifact Registry. -
NODE_POOL_MACHINE_SERVICE_AGENT
: a conta de serviço para o pool de nós do seu cluster, que tem o seguinte formato:service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
-
ROLE
: a funçãoroles/artifactregistry.reader
ou uma função personalizada que concede permissões suficientes para acessar imagens no repositório do Artifact Registry.
Usar o Registro de Contêineres do Google privado
Para integrar um Google Container Registry privado ao seu cluster do GKE na AWS, independentemente da localização do projeto do Google, siga estas etapas:
Permita que o Node Pool Machine Service Agent, a conta de serviço para as instâncias de máquina virtual do pool de nós do seu cluster, acesse o Container Registry:
gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Esta etapa permite o acesso da conta de serviço do cluster às imagens de contêiner privadas.
Substitua o seguinte:
-
GCR_PROJECT_ID
: o ID do projeto que hospeda o Container Registry. -
NODE_POOL_MACHINE_SERVICE_AGENT
: a conta de serviço do pool de nós, no formatoservice-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
. -
ROLE
: escolhastorage.objectViewer
ou uma função personalizada para acesso suficiente ao Registro de Contêineres. Tenha cuidado com o acesso amplo comstorage.objectViewer
.
Limpar
Para remover os recursos que você criou nesta página, execute estes comandos:
kubectl apply -f POD_YAML_FILE
kubectl delete -f DEPLOYMENT_YAML_FILE
Substitua o seguinte:
-
POD_YAML_FILE
: o nome do arquivo YAML no qual você definiu o Pod. -
DEPLOYMENT_YAML_FILE
: o nome do arquivo YAML no qual você definiu a implantação.
O que vem a seguir
- Leia a visão geral do Registro de Artefatos .