O GKE na AWS oferece uma maneira de extrair imagens particulares do Artifact Registry ou do Container Registry sem precisar usar um secret do Kubernetes. Anteriormente, era preciso executar as seguintes etapas:
- Criar uma conta de serviço do Google Identity and Access Management (IAM).
- Conceda permissões à conta de serviço para acessar o registro particular.
- Faça o download da chave da conta de serviço e salve-a como um secret do Kubernetes no seu cluster.
- Referencie esse secret no manifesto YAML para pods ou implantações para que eles possam acessar imagens do repositório de contêineres privados.
- Alterne e gerencie regularmente as chaves associadas à conta de serviço do Google IAM.
O GKE na AWS elimina todas essas etapas manuais e processa automaticamente a autenticação e a autorização necessárias para extrair imagens particulares.
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 a envie para o Artifact Registry. Os exemplos nesta página usam o contêiner
hello-app
. Para criar esse contêiner, siga as etapas em Criar uma imagem de contêiner e Enviar a imagem do Docker ao Artifact Registry, parte da documentação do GKE no Google Cloud.Faça upgrade para a versão 1.28 do GKE na AWS para que seja possível extrair imagens particulares do Artifact Registry ou do Container Registry sem precisar usar um secret do Kubernetes.
Verificar se há imagens no Artifact Registry
Para concluir o restante destas etapas, você precisa de uma imagem de contêiner. Veja 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 SDK do Google Cloud:
gcloud auth configure-docker
A Google Cloud CLI registra um auxiliar de credenciais para todos os registros do Docker compatíveis com o Google.
Confirme se o 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 Como implantar um aplicativo em contêiner.
Criar pods com imagens privadas sem secrets de extração de imagens
Para criar um pod capaz de acessar uma imagem de contêiner particular de um registro, não é mais necessário fornecer o campo spec.imagePullSecrets
na especificação do pod. Para configurar o 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:
POD_NAME
: o nome do pod.CONTAINER_NAME
: o nome do contêiner dentro do podLOCATION
: a região do Google Cloud 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 projeto do 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 cluster para etapas adicionais.REPOSITORY_NAME
: o nome do seu repositórioIMAGE_NAME
: o nome da imagem.IMAGE_VERSION
: a versão da imagem.
Aplique a configuração ao cluster com
kubectl
:kubectl apply -f YAML_FILE_NAME
Substitua
YAML_FILE_NAME
pelo nome do arquivo YAML.
Exemplo de criação de pods sem Secrets pull de imagem
Confira um exemplo de como criar um pod do Kubernetes sem
precisar de secrets de extração de imagem. 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 cluster com
kubectl
:kubectl apply -f hello-pod.yaml
Confirme se o pod está sendo executado 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
Criar implantações com imagens privadas sem secrets de pull de imagens
Para criar uma implantação que possa acessar uma imagem de contêiner particular de um registro, não é mais necessário fornecer o campo spec.imagePullSecrets
na especificação da implantação.
Para configurar a 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:
DEPLOYMENT_NAME
: o nome da 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 podLOCATION
: a região do Google Cloud 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 igual ao projeto do 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 cluster para etapas adicionais.REPOSITORY_NAME
: o nome do seu repositórioIMAGE_NAME
: o nome da imagem.IMAGE_VERSION
: a versão da imagem.
Aplique a configuração ao cluster com
kubectl
.kubectl apply -f name-of-your-yaml-file.yaml
Exemplo de criação de uma implantação sem Secrets de pull de imagem
Este é um exemplo de como criar uma implantação sem Secrets de pull de imagens. 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:
LOCATION
: a região do Google Cloud 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 igual ao projeto do cluster. Se o repositório estiver em um projeto diferente, consulte Usar o Artifact Registry quando ele não estiver no mesmo projeto que seu cluster para etapas adicionais.
Aplique a configuração ao cluster com
kubectl
.kubectl apply -f hello-deployment.yaml
Confirme se a implantação está em execução 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 o cluster
Para usar um repositório do Artifact Registry que está em um projeto do Google diferente daquele que contém seu cluster, execute as seguintes etapas:
Conceda à conta de serviço das instâncias de máquina virtual do pool de nós do cluster, conhecida como Agente de serviço de máquinas 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
Essa etapa garante que o cluster possa recuperar artefatos do registro nesse projeto separado.
Substitua:
AR_PROJECT_ID
: o ID do projeto do Google que hospeda o Artifact Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: a conta de serviço do pool de nós do cluster, que tem o seguinte formato:service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
ROLE
: o papelroles/artifactregistry.reader
ou um papel personalizado que concede permissões suficientes para acessar imagens no repositório do Artifact Registry.
Usar o Google Container Registry particular
Para integrar um Google Container Registry particular ao seu cluster do GKE na AWS, independentemente do local do projeto do Google, siga estas etapas:
Permita que o Agente de serviço de máquinas do pool de nós, a conta de serviço das instâncias de máquina virtual do pool de nós do cluster, acesse o Container Registry:
gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Essa etapa permite o acesso da conta de serviço do cluster às imagens de contêiner particulares.
Substitua:
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 um papel personalizado para ter acesso suficiente ao Container Registry. Tenha cuidado com acesso amplo comstorage.objectViewer
.
Limpar
Para remover os recursos criados nesta página, execute estes comandos:
kubectl apply -f POD_YAML_FILE
kubectl delete -f DEPLOYMENT_YAML_FILE
Substitua:
POD_YAML_FILE
: o nome do arquivo YAML em que você definiu o pod.DEPLOYMENT_YAML_FILE
: o nome do arquivo YAML em que você definiu a implantação.
A seguir
- Leia a visão geral do Artifact Registry.