O GKE na AWS oferece uma forma de extrair imagens privadas do Artifact Registry ou do Container Registry sem ter de usar um segredo do Kubernetes. Anteriormente, tinha de realizar os seguintes passos:
- Crie uma conta de serviço da gestão de identidade e de acesso (IAM) da Google.
- Conceda autorizações à conta de serviço para aceder ao registo privado.
- Transfira a chave da conta de serviço e guarde-a como um segredo do Kubernetes no seu cluster.
- Faça referência a este segredo no manifesto YAML para pods ou implementações para que possam aceder a imagens do repositório de contentores privado.
- Alterne e faça a gestão regularmente das chaves associadas à conta de serviço do Google IAM.
O GKE on AWS elimina todos estes passos manuais e processa automaticamente a autenticação e a autorização necessárias para obter imagens privadas.
Antes de começar
Para realizar os passos nesta página, conclua primeiro o seguinte:
- Crie um cluster.
- Crie um node pool.
Crie uma imagem do Docker e envie-a para o Artifact Registry. Os exemplos nesta página usam o contentor
hello-app
. Para criar este contentor, siga os passos para criar uma imagem de contentor e enviar a imagem do Docker para o Artifact Registry, que fazem parte da documentação do GKE on Google Cloud .Atualize para a versão 1.28 do GKE no AWS para poder extrair imagens privadas do Artifact Registry ou do Container Registry sem ter de usar um segredo do Kubernetes.
Verifique se existem imagens no Artifact Registry
Para concluir os restantes passos, precisa de uma imagem de contentor. Obtenha o nome das suas imagens de contentores seguindo os passos abaixo:
Configure a ferramenta de linha de comandos do Docker para autenticar no Artifact Registry com o SDK Cloud da Google:
gcloud auth configure-docker
A CLI do Google Cloud regista um auxiliar de credenciais para todos os registos do Docker suportados pela Google.
Confirme se o Artifact Registry inclui uma imagem com o comando:
docker images
docker images
O Docker liga-se ao Artifact Registry e devolve as imagens disponíveis no seu repositório. Por exemplo, a resposta seguinte mostra uma imagem de contentor com o nome
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 não tiver uma imagem de contentor pronta, crie uma seguindo os passos em Implementar uma aplicação em contentores.
Crie pods com imagens privadas sem segredos de obtenção de imagens
Para criar um Pod que possa aceder a uma imagem de contentor privada a partir de um registo, já não tem de fornecer o campo spec.imagePullSecrets
na especificação do Pod. Para configurar o Pod, siga estes passos:
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 agrupamento.CONTAINER_NAME
: o nome do contentor no interior do agrupamento.LOCATION
: a região Google Cloud que contém o seu registo. Por exemplo,us-west1
.PROJECT_NAME
: o nome do projeto Google que aloja o seu repositório do Artifact Registry, que pode ser o mesmo que o projeto do seu cluster. Se o repositório estiver num projeto diferente, consulte o artigo Use o Artifact Registry quando não estiver no mesmo projeto que o cluster para ver passos 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 cluster com
kubectl
:kubectl apply -f YAML_FILE_NAME
Substitua
YAML_FILE_NAME
pelo nome do seu ficheiro YAML.
Exemplo de criação de pods sem segredos de obtenção de imagens
Segue-se um exemplo de criação de um pod do Kubernetes sem a necessidade de segredos de obtenção de imagens. O pod extrai a imagem hello-app
do Artifact Registry.
Para extrair a imagem
hello-app
, copie o seguinte YAML para um ficheiro com o nomehello-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á em execução com
kubectl get
:kubectl get pod/hello-pod
A resposta inclui um Pod com o estado
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Crie implementações com imagens privadas sem segredos de obtenção de imagens
Para criar uma implementação que possa aceder a uma imagem de contentor privada a partir de um registo, já não tem de fornecer o campo spec.imagePullSecrets
na especificação de implementação.
Para configurar a implementação, siga estes passos:
Crie uma definição de implementaçã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 implementação.NUMBER_OF_REPLICAS
: quantas instâncias do Pod definido na implementação devem estar em execução em qualquer altura.CONTAINER_NAME
: o nome do contentor no interior do agrupamento.LOCATION
: a região Google Cloud que contém o seu registo. Por exemplo,us-west1
.PROJECT_NAME
: o nome do projeto Google que aloja o seu repositório do Artifact Registry, que pode não ser o mesmo que o projeto do seu cluster. Se o repositório estiver num projeto diferente, consulte o artigo Use o Artifact Registry quando não estiver no mesmo projeto que o cluster para ver passos 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 cluster com
kubectl
.kubectl apply -f name-of-your-yaml-file.yaml
Exemplo de criação de uma implementação sem segredos de obtenção de imagens
Segue-se um exemplo de criação de uma implementação sem segredos de obtenção de imagens. A implementação extrai uma imagem hello-app
do Artifact Registry.
Crie um ficheiro denominado
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 região Google Cloud que contém o seu registo. Por exemplo,us-west1
.PROJECT_NAME
: o nome do projeto Google que aloja o seu repositório do Artifact Registry, que pode não ser o mesmo que o projeto do seu cluster. Se o repositório estiver num projeto diferente, consulte o artigo Use o Artifact Registry quando não estiver no mesmo projeto que o cluster para ver passos adicionais.
Aplique a configuração ao cluster com
kubectl
.kubectl apply -f hello-deployment.yaml
Confirme que a implementação está a ser executada com o
kubectl pods
.kubectl get pods --selector=app=products
O resultado apresenta 3
Running
pods.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 não estiver no mesmo projeto que o cluster
Para usar um repositório do Artifact Registry que esteja num projeto Google diferente do que contém o cluster, siga estes passos:
Conceda à conta de serviço das instâncias de máquinas virtuais do conjunto de nós do cluster, conhecida como o agente do serviço da máquina do conjunto de nós, as autorizações necessárias para aceder a este registo.
gcloud projects add-iam-policy-binding AR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Este passo garante que o cluster pode obter artefactos do registo nesse projeto separado.
Substitua o seguinte:
AR_PROJECT_ID
: o ID do projeto Google que aloja o Artifact Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: a conta de serviço do conjunto de nós do 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 autorizações suficientes para aceder a imagens no repositório do Artifact Registry.
Use o Google Container Registry privado
Para integrar um registo de contentores Google privado com o seu cluster do GKE no AWS, independentemente da respetiva localização do projeto Google, siga estes passos:
Permita que o agente de serviço da máquina do conjunto de nós, a conta de serviço das instâncias de máquinas virtuais do conjunto de nós do cluster, aceda ao Container Registry:
gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Este passo permite o acesso da conta de serviço do cluster às imagens de contentores privados.
Substitua o seguinte:
GCR_PROJECT_ID
: o ID do projeto que aloja o Container Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: a conta de serviço do conjunto de nós, no formatoservice-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
.ROLE
: escolhastorage.objectViewer
ou uma função personalizada para ter acesso suficiente ao Container Registry. Tenha cuidado com o acesso amplo com ostorage.objectViewer
.
Limpar
Para remover os recursos que 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 ficheiro YAML no qual definiu o pod.DEPLOYMENT_YAML_FILE
: o nome do ficheiro YAML no qual definiu a implementação.
O que se segue?
- Leia a vista geral do Artifact Registry.