Este tópico descreve como usar o GKE na AWS com um repositório de imagens de contentores privado, como o Container Registry (GCR).
Antes de começar
Antes de começar a usar o GKE on AWS, certifique-se de que realizou as seguintes tarefas:
- Cumpra os pré-requisitos.
- Instale um serviço de gestão.
- Crie um cluster de utilizadores.
- No diretório do
anthos-aws
, useanthos-gke
para mudar o contexto para o cluster de utilizadores. Substitua CLUSTER_NAME pelo nome do cluster de utilizadores.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- Ter uma imagem Docker criada e enviada para o Container Registry. Os exemplos neste tópico usam o contentor
hello-app
, criado com os passos de Implementar uma aplicação em contentores na documentação do GKE on Google Cloud .
Registos de contentores privados
Um registo de contentores armazena e distribui imagens de contentores. Por predefinição, a instalação do GKE no AWS pode aceder a imagens públicas.
Verifique a existência de imagens no Container 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 Container Registry com a CLI do Google Cloud:
gcloud auth configure-docker
A CLI do Google Cloud regista um auxiliar de credenciais para todos os registos do Docker suportados pela Google.
Confirme que o seu Container Registry inclui uma imagem com
docker images
.docker images
O Docker liga-se ao Container Registry e devolve as imagens disponíveis no seu repositório do Container Registry. Por exemplo, a resposta abaixo mostra uma imagem de contentor denominada
hello-app
no repositório project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 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 de utilizadores autenticam-se através de uma conta de serviço de 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 acesso ao Container Registry.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Substitua o seguinte:
- project-id com o seu Google Cloud projeto
- account-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 key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
Substitua o seguinte:
- project-id com o seu Google Cloud projeto
- account-name com o nome da sua Google Cloud conta de serviço
Tem tudo pronto para configurar o cluster de utilizadores para se ligar ao Container Registry.
Defina um segredo do Kubernetes
Para fornecer a chave para autenticação no Container Registry, guarde a chave da conta de serviço como um segredo do Kubernetes seguindo estes passos:
Use
kubectl
para criar o segredo.env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
Substitua o seguinte:
- project-id com o seu Google Cloud projeto
- account-name com o nome da sua Google Cloud conta de serviço
Elimine a cópia local da chave da conta de serviço.
rm 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: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
Substitua o seguinte:
- pod-name com o nome do seu Pod
- container-name com o nome do contentor no Pod
- project-id com o seu Google Cloud projeto
- secret-name com o nome do segredo do registo
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: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
Aplique a configuração ao cluster com
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
Confirme que o pod está em execução com
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ 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 criar uma Implementação, da 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: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
Aplique a configuração ao cluster com
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
Confirme se a implementação está a ser executada com o
kubectl pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
O resultado contém três recipientes
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