arrow_back

Como trabalhar com Secrets e ConfigMaps do Google Kubernetes Engine

Acesse mais de 700 laboratórios e cursos

Como trabalhar com Secrets e ConfigMaps do Google Kubernetes Engine

Laboratório 1 hora universal_currency_alt 5 créditos show_chart Introdutório
info Este laboratório pode incorporar ferramentas de IA para ajudar no seu aprendizado.
Acesse mais de 700 laboratórios e cursos

Visão geral

Neste laboratório, você vai definir informações de configuração criptografadas e não criptografadas. As criptografadas são armazenadas como Secrets, e as não criptografadas como ConfigMaps.

Essa abordagem evita que informações sensíveis fiquem expostas em bases de código. As credenciais (como chaves de API) que pertencem a Secrets não devem ser movidas para repositórios de código, como o GitHub, a menos que sejam criptografadas antes. Ainda assim, é melhor armazená-las separadamente.

Objetivos

O que você fará neste laboratório:

  • Criar secrets usando o comando kubectl e arquivos de manifesto.
  • Criar ConfigMaps usando o comando kubectl e arquivos de manifesto.
  • Usar secrets em contêineres usando variáveis de ambiente ou volumes montados.
  • Usar ConfigMaps em contêineres usando variáveis de ambiente ou volumes montados.

Configuração do laboratório

Acesse o Qwiklabs

Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.

  1. Faça login no Qwiklabs em uma janela anônima.

  2. Confira o tempo de acesso do laboratório (por exemplo, 1:15:00) e finalize todas as atividades nesse prazo.
    Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.

  3. Quando tudo estiver pronto, clique em Começar o laboratório.

  4. Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.

  5. Clique em Abrir Console do Google.

  6. Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
    Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.

  7. Aceite os termos e pule a página de recursos de recuperação.

Depois que você concluir as etapas iniciais de login, o painel do projeto será exibido.

Ative o Google Cloud Shell

O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.

O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.

  1. No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

    Ícone do Cloud Shell em destaque

  2. Clique em Continuar.

O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:

ID do projeto em destaque no terminal do Cloud Shell

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.

  • Para listar o nome da conta ativa, use este comando:
gcloud auth list

Saída:

Credentialed accounts: - @.com (active)

Exemplo de saída:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • Para listar o ID do projeto, use este comando:
gcloud config list project

Saída:

[core] project =

Exemplo de saída:

[core] project = qwiklabs-gcp-44776a13dea667a6 Observação: a documentação completa da gcloud está disponível no guia com informações gerais sobre a gcloud CLI .

Tarefa 1: trabalhar com secrets

Nesta tarefa, você vai autenticar contêineres para acessar os serviços do Google Cloud. Depois de configurar um tópico e uma assinatura do Cloud Pub/Sub, você tentará acessar o tópico do Cloud Pub/Sub em um contêiner em execução no GKE, mas a solicitação de acesso vai falhar.

Para acessar corretamente o tópico do Pub/Sub, você vai criar uma conta de serviço com credenciais e transmitir essas credenciais pelo Secrets do Kubernetes.

Preparar uma conta de serviço sem permissões

  1. No console do Google Cloud, abra o Menu de navegação (Ícone do menu de navegação) e selecione IAM e administrador > Contas de serviço.
  2. Clique em + Criar conta de serviço.
  3. Na caixa de texto Nome da conta de serviço, digite no-permissions.
  4. Clique em Criar e continuar.
  5. Clique em Continuar e depois em Concluído.
  6. Encontre a conta de serviço no-permissions na lista e copie o endereço de e-mail associado a ela em um arquivo de texto para usar depois.

Crie um cluster do GKE

Quando criar o cluster, especifique a conta de serviço que você acabou de criar. Para demonstrar que as contas de serviço precisam das permissões corretas, a nova conta não tem permissões para outros serviços do Google Cloud. Portanto, ela não conseguirá acessar o aplicativo de teste do Cloud Pub/Sub que você vai implantar depois. Você vai corrigir esse problema ainda neste laboratório.

  1. No Cloud Shell, digite o comando abaixo para criar variáveis de ambiente da zona do Google Cloud e o nome do cluster que será usado para criar o cluster do laboratório:
export my_zone={{{ project_0.default_zone | ZONE }}} export my_cluster=standard-cluster-1
  1. Configure o preenchimento com tabulação da ferramenta de linha de comando kubectl:
source <(kubectl completion bash)
  1. No Cloud Shell, digite o seguinte comando para definir a variável de ambiente do nome da conta de serviço, em que [MY-SERVICE-ACCOUNT-EMAIL] é o endereço de e-mail da conta de serviço que você criou anteriormente:
export my_service_account=[MY-SERVICE-ACCOUNT-EMAIL]

Exemplo:

export my_service_account=no-permissions@qwiklabs-gcp-4ee5983fdd675469.iam.gserviceaccount.com
  1. No Cloud Shell, digite o seguinte comando para criar um cluster do Kubernetes:
gcloud container clusters create $my_cluster \ --num-nodes 2 --zone $my_zone \ --service-account=$my_service_account Observação: aguarde alguns minutos até que a implantação do cluster seja concluída.
  1. Configure acesso ao cluster para a kubectl:
gcloud container clusters get-credentials $my_cluster --zone $my_zone

Configurar o Cloud Pub/Sub e implantar um aplicativo para ler o tópico

  1. No Cloud Shell, digite o seguinte comando para definir as variáveis de ambiente dos componentes do Pub/Sub:
export my_pubsub_topic=echo export my_pubsub_subscription=echo-read
  1. Para criar um tópico do Cloud Pub/Sub chamado echo e uma assinatura denominada echo-read associada a ele, execute os seguintes comandos da gcloud:
gcloud pubsub topics create $my_pubsub_topic gcloud pubsub subscriptions create $my_pubsub_subscription \ --topic=$my_pubsub_topic

Implante um aplicativo para ler os tópicos do Cloud Pub/Sub

Você vai criar uma implantação com um contêiner que pode ler os tópicos do Cloud Pub/Sub. Já que é necessário ter permissões específicas para se inscrever no Cloud Pub/Sub e ler os tópicos, esse contêiner precisa ter credenciais para se conectar ao Cloud Pub/Sub.

O arquivo do manifesto de implantação chamado pubsub.yaml é fornecido.

apiVersion: apps/v1 kind: Deployment metadata: name: pubsub spec: selector: matchLabels: app: pubsub template: metadata: labels: app: pubsub spec: containers: - name: subscriber image: gcr.io/google-samples/pubsub-sample:v1
  1. No Cloud Shell, digite o comando a seguir para clonar o repositório no Cloud Shell do laboratório:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Crie um link flexível como atalho para o diretório de trabalho:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
  1. Mude para o diretório que contém os arquivos de exemplo deste laboratório:
cd ~/ak8s/Secrets/
  1. Implante o aplicativo:
kubectl apply -f pubsub.yaml
  1. Depois que o aplicativo for implantado, consulte os pods executando o seguinte comando:
kubectl get pods -l app=pubsub

Esse comando filtra a lista de pods e mostra somente aqueles que têm um rótulo correspondente a app: pubsub.

Saída:

NAME READY STATUS RESTARTS AGE pubsub-74d4d96ddb-lqkt8 0/1 CrashLoopBackOff 0 6s Observação: aguarde aproximadamente um minuto. O aplicativo está sendo iniciado, mas não vai funcionar.
  1. Liste os pods novamente:
kubectl get pods -l app=pubsub

Saída:

NAME READY STATUS RESTARTS AGE pubsub-74d4d96ddb-lqkt8 0/1 Error 4 2m

Observe o status do pod. Ele tem um erro e foi reiniciado várias vezes.

  1. Para inspecionar os registros do pod, execute o seguinte comando:
kubectl logs -l app=pubsub

A mensagem de erro exibida no final do registro indica que o aplicativo não tem as permissões para consultar o serviço do Cloud Pub/Sub.

StatusCode.PERMISSION_DENIED, User not authorized to perform this action.

Criar credenciais de conta de serviço

Agora você vai criar uma nova conta de serviço com acesso à assinatura do Pub/Sub que o aplicativo de teste está tentando usar. Em vez de alterar a conta de serviço dos nós do cluster do GKE, gere uma chave JSON e envie com segurança para o pod usando Secrets do Kubernetes.

  1. No Console do Google Cloud, abra o Menu de navegação e selecione IAM e administrador > Contas de serviço.
  2. Clique em + Criar conta de serviço.
  3. Na caixa de texto Nome da conta de serviço, insira pubsub-app e depois selecione Criar e continuar.
  4. Na lista suspensa Selecionar papel, clique em Pub/Sub > Assinante do Pub/Sub.
  5. Confirme se o papel está listado, selecione Continuar e depois Concluído.
  6. Na tela de visão geral da conta de serviço, clique nos três pontos no lado direito da conta de serviço pubsub-app e selecione Gerenciar chaves.
  7. Na lista suspensa, clique em Adicionar chave e selecione Criar nova chave.
  8. Escolha JSON como o tipo de chave e clique em Criar.
  9. Isso fará o download para seu computador de um arquivo de chave JSON contendo as credenciais da conta de serviço. Ele aparece na barra de download na parte inferior da tela. Você vai usar esse arquivo de chave na configuração do aplicativo de amostra para autenticação na API Cloud Pub/Sub.
  10. Clique em Fechar.
  11. No seu disco rígido, localize a chave JSON que você acabou de salvar e renomeie o arquivo para credentials.json.

Importar as credenciais como um secret

  1. No Cloud Shell, clique nos três pontos (ícone de &quot;mais&quot;) na barra de ferramentas para exibir mais opções.

Ícone &quot;Mais&quot; destacado na barra de ferramentas do Cloud Shell

  1. Clique em Fazer upload, envie o arquivo credentials.json da máquina local para a VM do Cloud Shell e depois selecione Fazer upload.
  2. No Cloud Shell, digite o seguinte comando para confirmar se o upload foi concluído:
ls ~/

Você verá o arquivo de credenciais que foi enviado junto do diretório de arquivos do laboratório clonado anteriormente.

  1. Para salvar o arquivo de chave credentials.json em um secret do Kubernetes chamado pubsub-key, execute o comando abaixo:
kubectl create secret generic pubsub-key \ --from-file=key.json=$HOME/credentials.json

O comando cria o secret pubsub-key com um valor key.json que contém a chave privada do console do Google Cloud que você salvou.

  1. Remova o arquivo credentials.json do seu computador:
rm -rf ~/credentials.json

Configure o aplicativo com o secret

Agora você vai atualizar a implantação para incluir as seguintes alterações:

  • Adicione um volume à especificação do pod. Este volume contém o Secret.
  • O volume do Secret é montado no contêiner do aplicativo.
  • A variável de ambiente GOOGLE_APPLICATION_CREDENTIALS está definida para apontar para o arquivo de chave na montagem do volume do secret.

A variável de ambiente GOOGLE_APPLICATION_CREDENTIALS é reconhecida automaticamente pelas bibliotecas de cliente do Cloud, que, nesse caso, é o cliente do Cloud Pub/Sub para Python.

O arquivo de implantação atualizado, chamado pubsub-secret.yaml, foi fornecido.

apiVersion: apps/v1 kind: Deployment metadata: name: pubsub spec: selector: matchLabels: app: pubsub template: metadata: labels: app: pubsub spec: volumes: - name: google-cloud-key secret: secretName: pubsub-key containers: - name: subscriber image: gcr.io/google-samples/pubsub-sample:v1 volumeMounts: - name: google-cloud-key mountPath: /var/secrets/google env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/secrets/google/key.json
  1. Implante o arquivo de configuração pubsub-secret.yaml:
kubectl apply -f pubsub-secret.yaml
  1. Depois que a configuração for implantada, execute o comando abaixo para exibir o status do pod:
kubectl get pods -l app=pubsub

O status do pod deve ser Running. O status vai demorar alguns segundos para ser atualizado.

Saída:

NAME READY STATUS RESTARTS AGE pubsub-c4f48b868-xk27w 1/1 Running 0 35s

Testar o recebimento de mensagens do Cloud Pub/Sub

  1. Agora que você configurou o aplicativo, publique uma mensagem no tópico do Cloud Pub/Sub criado anteriormente no laboratório:
gcloud pubsub topics publish $my_pubsub_topic --message="Hello, world!"

Saída (o ID da sua mensagem será diferente):

messageIds: - '328977244395410'

Em alguns segundos, a mensagem será recebida pelo aplicativo e exibida no stream de saída.

  1. Para inspecionar os registros do pod implantado, execute o seguinte comando:
kubectl logs -l app=pubsub

A saída será semelhante ao exemplo.

Saída:

Pulling messages from Pub/Sub subscription... [2018-12-17 22:01:06.860378] Received message: ID=328977244395410 Data=b'Hello, world!' [2018-12-17 22:01:06.860736] Processing: 328977244395410 [2018-12-17 22:01:09.863973] Processed: 328977244395410

Clique em "Verificar meu progresso" para conferir o objetivo.

Trabalhar com Secrets

Tarefa 2: trabalhe com o ConfigMaps

Os ConfigMaps vinculam arquivos de configuração, argumentos de linha de comando, variáveis de ambiente, números de porta e outros artefatos de configuração aos contêineres e componentes do sistema dos pods no ambiente de execução.

Com os ConfigMaps, é possível separar configurações de pods e componentes. Contudo, os ConfigMaps não são criptografados, o que os torna inadequados para credenciais. Essa é a diferença entre os secrets e os ConfigMaps: os secrets são criptografados e, portanto, mais adequados para informações confidenciais ou sensíveis, como credenciais.

Já os ConfigMaps são mais adequados para informações gerais, como números de porta.

Use o comando kubectl para criar ConfigMaps

Use o kubectl para criar ConfigMaps seguindo o padrão kubectl create configmap [NAME] [DATA] e adicionando uma sinalização para o arquivo (--from-file) ou pelo literal (--from-literal).

  1. Comece com um literal simples no comando kubectl abaixo:
kubectl create configmap sample --from-literal=message=hello
  1. Para ver como o Kubernetes ingeriu o ConfigMap, execute o comando abaixo:
kubectl describe configmaps sample

A saída será semelhante ao exemplo.

Saída:

Name: sample Namespace: default Labels: <none> Annotations: <none> Data ==== message: ---- hello Events: <none>

Depois você vai criar um ConfigMap de um arquivo. O arquivo sample2.properties fornecido contém alguns dados de amostra:

message2=world foo=bar meaningOfLife=42
  1. Para criar o ConfigMap do sample2.properties, execute o comando abaixo:
kubectl create configmap sample2 --from-file=sample2.properties
  1. Para ver como o Kubernetes ingeriu o ConfigMap, execute o comando abaixo:
kubectl describe configmaps sample2

A saída será semelhante ao exemplo.

Saída:

Name: sample2 Namespace: default Labels: <none> Annotations: <none> Data ==== sample2.properties: ---- message2=world foo=bar meaningOfLife=42 Events: <none>

Usar arquivos de manifesto para criar ConfigMaps

Você também pode usar um arquivo de configuração YAML para criar um ConfigMap. O arquivo config-map-3.yaml contém uma definição do ConfigMap chamada sample3. Você usará este ConfigMap depois para demonstrar duas maneiras diferentes de expor os dados dentro de um contêiner.

apiVersion: v1 data: airspeed: africanOrEuropean meme: testAllTheThings kind: ConfigMap metadata: name: sample3 namespace: default selfLink: /api/v1/namespaces/default/configmaps/sample3
  1. Crie o ConfigMap usando o arquivo YAML:
kubectl apply -f config-map-3.yaml
  1. Para ver como o Kubernetes ingeriu o ConfigMap, execute o comando abaixo:
kubectl describe configmaps sample3

A saída será semelhante ao exemplo.

Saída:

Name: sample3 Namespace: default Labels: <none> Annotations: <none> Data ==== airspeed: ---- africanOrEuropean meme: ---- testAllTheThings Events: <none>

Agora você tem algumas informações de configuração não secretas e não criptografadas, separadas do seu aplicativo e disponíveis ao cluster. Você executou essa tarefa usando o ConfigMaps de três maneiras diferentes para demonstrar as várias opções, mas, na prática, você normalmente escolhe apenas um método, sendo a abordagem mais usada a do arquivo de configuração YAML. Os arquivos de configuração fornecem um registro dos valores armazenados para que você possa repetir facilmente o processo no futuro.

Em seguida, você aprenderá como acessar essas informações pelo aplicativo.

Use variáveis de ambiente para consumir ConfigMaps em contêineres

Para acessar os ConfigMaps de dentro de contêineres usando variáveis de ambiente, a definição do pod deve ser atualizada para incluir um ou mais configMapKeyRefs.

O arquivo pubsub-configmap.yaml é uma versão atualizada da implantação de demonstração do Cloud Pub/Sub que tem a seguinte configuração env: no final do arquivo para importar variáveis de ambiente do ConfigMap para o contêiner.

- name: INSIGHTS valueFrom: configMapKeyRef: name: sample3 key: meme
  1. Para reaplicar o arquivo de configuração atualizado, execute o comando abaixo:
kubectl apply -f pubsub-configmap.yaml

Agora seu aplicativo tem acesso a uma variável de ambiente chamada INSIGHTS com o valor testAllTheThings.

  1. Para verificar se a variável de ambiente tem o valor correto, você deve obter acesso ao pod, o que significa que você precisa do nome do pod. Para ver o nome do pod, execute o comando abaixo:
kubectl get pods

A saída será semelhante ao exemplo.

Saída:

NAME READY STATUS RESTARTS AGE pubsub-77df8f8c6-krfl2 1/1 Running 0 4m
  1. Para iniciar a sessão do shell, execute o seguinte comando, substituindo o nome do pod por [MY-POD-NAME]:
kubectl exec -it [MY-POD-NAME] -- sh

Exemplo:

kubectl exec -it pubsub-77df8f8c6-krfl2 -- sh
  1. Para exibir uma lista das variáveis de ambiente, execute o comando abaixo:
printenv

INSIGHTS=testAllTheThings deve aparecer na lista.

  1. Para sair da sessão do shell do contêiner, execute o comando abaixo:
exit

Usar volumes montados para consumir ConfigMaps em contêineres

É possível preencher um volume com os dados do ConfigMap em vez de (ou além de) armazená-los em uma variável de ambiente.

Nesta implantação, o ConfigMap sample-3 criado nesta tarefa também é adicionado como um volume config-3 ao pod específico. O volume config-3 depois será montado dentro do contêiner no caminho /etc/config. O método original que usa variáveis de ambiente para importar o ConfigMaps também é configurado.

O arquivo de implantação atualizado, chamado pubsub-configmap2.yaml, foi fornecido.

apiVersion: apps/v1 kind: Deployment metadata: name: pubsub spec: selector: matchLabels: app: pubsub template: metadata: labels: app: pubsub spec: volumes: - name: google-cloud-key secret: secretName: pubsub-key - name: config-3 configMap: name: sample3 containers: - name: subscriber image: gcr.io/google-samples/pubsub-sample:v1 volumeMounts: - name: google-cloud-key mountPath: /var/secrets/google - name: config-3 mountPath: /etc/config env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/secrets/google/key.json - name: INSIGHTS valueFrom: configMapKeyRef: name: sample3 key: meme
  1. Aplique novamente o arquivo de configuração atualizado:
kubectl apply -f pubsub-configmap2.yaml
  1. Reconecte-se à sessão do shell do contêiner para ver se o valor no ConfigMap está acessível. Os nomes dos pods terão mudado. Para ver o nome do pod, execute o comando abaixo:
kubectl get pods

A saída será semelhante ao exemplo.

Saída:

NAME READY STATUS RESTARTS AGE pubsub-747cf8c545-ngsrf 1/1 Running 0 30s pubsub-df6bc7b87-vb8cz 1/1 Terminating 0 4m
  1. Para iniciar a sessão do shell, execute o seguinte comando, substituindo o nome do pod por [MY-POD-NAME]:
kubectl exec -it [MY-POD-NAME] -- sh

Exemplo:

kubectl exec -it pubsub-747cf8c545-ngsrf -- sh
  1. Navegue até a pasta apropriada:
cd /etc/config
  1. Liste os arquivos na pasta:

Os nomes dos arquivos como chaves do sample3 precisam ser listados.

ls

Saída:

airspeed meme
  1. Para ver o conteúdo de um dos arquivos, execute o comando abaixo:
cat airspeed

Saída:

africanOrEuropean# Observação: o valor de airspeed não incluiu um retorno de carro, portanto, o prompt de comando (o sinal \#) está no final do valor retornado.
  1. Para sair do shell do contêiner, execute o comando abaixo:
exit

Clique em "Verificar meu progresso" para conferir o objetivo.

Trabalhar com ConfigMaps

Finalize o laboratório

Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.

Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.

O número de estrelas indica o seguinte:

  • 1 estrela = muito insatisfeito
  • 2 estrelas = insatisfeito
  • 3 estrelas = neutro
  • 4 estrelas = satisfeito
  • 5 estrelas = muito satisfeito

Feche a caixa de diálogo se não quiser enviar feedback.

Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.

Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.

Antes de começar

  1. Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
  2. Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
  3. No canto superior esquerdo da tela, clique em Começar o laboratório

Usar a navegação anônima

  1. Copie o nome de usuário e a senha fornecidos para o laboratório
  2. Clique em Abrir console no modo anônimo

Fazer login no console

  1. Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
  2. Aceite os termos e pule a página de recursos de recuperação
  3. Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto

Este conteúdo não está disponível no momento

Você vai receber uma notificação por e-mail quando ele estiver disponível

Ótimo!

Vamos entrar em contato por e-mail se ele ficar disponível

Um laboratório por vez

Confirme para encerrar todos os laboratórios atuais e iniciar este

Use a navegação anônima para executar o laboratório

Para executar este laboratório, use o modo de navegação anônima ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.