Por predefinição, a sua instalação do GKE no AWS pode aceder a imagens de contentores públicos. Este tópico explica como usar o GKE na AWS com um repositório de imagens de contentores privado, como o Artifact Registry.
A partir da versão 1.28, o GKE on AWS oferece uma forma de extrair imagens privadas do Artifact Registry ou do Container Registry sem ter de usar um segredo do Kubernetes. Para ver detalhes, consulte o artigo Use um registo de imagens privado sem segredos.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 .
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 ferramenta de linha de comandos
gcloud
regista um assistente de credenciais para todos os registos do Docker suportados pela Google.Confirme que 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 abaixo mostra uma imagem de contentor denominada
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 uma conta de serviço
Os seus clusters são autenticados através de uma conta de serviço da gestão de identidade e de acesso (IAM).
Para criar uma nova conta de serviço, siga estes passos:
Crie uma conta de serviço da IAM com a CLI Google Cloud.
gcloud iam service-accounts create ACCOUNT_NAME
Substitua ACCOUNT_NAME pelo nome da nova Google Cloud conta de serviço.
Conceda à conta de serviço autorizações do Artifact Registry.
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.reader
Substitua o seguinte:
PROJECT_NAME
com o seu Google Cloud projetoACCOUNT_NAME
com o nome da sua Google Cloud conta de serviço
Transfira a chave da conta de serviço da conta.
gcloud iam service-accounts keys create registry-access-key.json \ --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
Substitua o seguinte:
PROJECT_NAME
ACCOUNT_NAME
Tem tudo pronto para configurar o cluster de utilizadores para se ligar ao Artifact Registry.
Guarde a chave no cluster
Para fornecer a chave para autenticação no Artifact Registry, guarde a chave da conta de serviço como um segredo do Kubernetes com estes passos:
Use o
kubectl
para criar o Secret.kubectl create secret docker-registry registry-secret \ --docker-server=LOCATION-docker.pkg.dev \ --docker-username=_json_key \ --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --docker-password="$(cat registry-access-key.json)"
Substitua o seguinte:
LOCATION
: a localização regional ou multirregional do repositório.PROJECT_NAME
ACCOUNT_NAME
Elimine a cópia local da chave da conta de serviço.
rm registry-access-key.json
Agora, pode fazer referência a este segredo nas suas cargas de trabalho.
Crie uma carga de trabalho com uma imagem privada
Para usar uma imagem de um repositório de contentores privado com uma carga de trabalho, defina o campo spec.imagePullSecrets
para o nome do seu segredo. Este campo encontra-se em localizações diferentes para Pods e Implementações.
Criar um Pod
Para criar um Pod que possa aceder ao registo de contentores, defina o campo spec.imagePullSecrets
para o nome do seu segredo.
Crie um pod que especifique
spec.imagePullSecrets
.apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
Substitua o seguinte:
POD_NAME
: o nome do seu PodCONTAINER_NAME
: o nome do contentor no agrupamentoLOCATION
PROJECT_NAME
Por exemplo, 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 imagePullSecrets: - name: registry-secret
Aplique a configuração ao cluster com
kubectl
.kubectl apply -f hello-pod.yaml
Confirme que 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
Criar uma implementação
Para usar um repositório privado numa implementação, especifica o
imagePullSecret
no modelo.Por exemplo, para configurar uma Implementação que usa a imagem
hello-app
, crie um ficheiro denominadohello-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" imagePullSecrets: - name: registry-secret
Substitua o seguinte:
LOCATION
PROJECT_NAME
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 três contentores
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
Limpar
Para remover os recursos que criou nesta página, execute estes comandos:
kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml
O que se segue?
- Leia a vista geral do Artifact Registry.