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.
Faça login no Qwiklabs em uma janela anônima.
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.
Quando tudo estiver pronto, clique em Começar o laboratório.
Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.
Clique em Abrir Console do Google.
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.
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.
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.
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:
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:
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
No console do Google Cloud, abra o Menu de navegação () e selecione IAM e administrador > Contas de serviço.
Clique em + Criar conta de serviço.
Na caixa de texto Nome da conta de serviço, digite no-permissions.
Clique em Criar e continuar.
Clique em Continuar e depois em Concluído.
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.
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
Configure o preenchimento com tabulação da ferramenta de linha de comando kubectl:
source <(kubectl completion bash)
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:
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.
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.
Mude para o diretório que contém os arquivos de exemplo deste laboratório:
cd ~/ak8s/Secrets/
Implante o aplicativo:
kubectl apply -f pubsub.yaml
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.
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.
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.
No Console do Google Cloud, abra o Menu de navegação e selecione IAM e administrador > Contas de serviço.
Clique em + Criar conta de serviço.
Na caixa de texto Nome da conta de serviço, insira pubsub-app e depois selecione Criar e continuar.
Na lista suspensa Selecionar papel, clique em Pub/Sub > Assinante do Pub/Sub.
Confirme se o papel está listado, selecione Continuar e depois Concluído.
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.
Na lista suspensa, clique em Adicionar chave e selecione Criar nova chave.
Escolha JSON como o tipo de chave e clique em Criar.
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.
Clique em Fechar.
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
No Cloud Shell, clique nos três pontos () na barra de ferramentas para exibir mais opções.
Clique em Fazer upload, envie o arquivo credentials.json da máquina local para a VM do Cloud Shell e depois selecione Fazer upload.
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.
Para salvar o arquivo de chave credentials.json em um secret do Kubernetes chamado pubsub-key, execute o comando abaixo:
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.
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.
Em alguns segundos, a mensagem será recebida pelo aplicativo e exibida no stream de saída.
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).
Comece com um literal simples no comando kubectl abaixo:
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.
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.
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.
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
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
Para exibir uma lista das variáveis de ambiente, execute o comando abaixo:
printenv
INSIGHTS=testAllTheThings deve aparecer na lista.
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.
Aplique novamente o arquivo de configuração atualizado:
kubectl apply -f pubsub-configmap2.yaml
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
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
Navegue até a pasta apropriada:
cd /etc/config
Liste os arquivos na pasta:
Os nomes dos arquivos como chaves do sample3 precisam ser listados.
ls
Saída:
airspeed meme
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.
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.
Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
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.
No canto superior esquerdo da tela, clique em Começar o laboratório
Usar a navegação anônima
Copie o nome de usuário e a senha fornecidos para o laboratório
Clique em Abrir console no modo anônimo
Fazer login no console
Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
Aceite os termos e pule a página de recursos de recuperação
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.
Architecting with Google Kubernetes Engine: Como trabalhar com Secrets e ConfigMaps do Kubernetes Engine
Duração:
Configuração: 0 minutos
·
Tempo de acesso: 60 minutos
·
Tempo para conclusão: 60 minutos