arrow_back

Conecte-se ao Cloud SQL por um aplicativo do Kubernetes Engine

Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Conecte-se ao Cloud SQL por um aplicativo do Kubernetes Engine

Lab 1 hora 15 minutos universal_currency_alt 5 créditos show_chart Intermediário
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP449

Laboratórios autoguiados do Google Cloud

Informações gerais

Neste laboratório, você vai descobrir como é fácil conectar um aplicativo no Kubernetes Engine a uma instância do Cloud SQL usando o contêiner do Cloud SQL Proxy como um contêiner de arquivo secundário. Você vai implantar um cluster do Kubernetes Engine e uma instância Postgres do Cloud SQL e usar um contêiner de proxy do Cloud SQL para permitir a comunicação entre eles.

O tema do laboratório é como estabelecer uma conexão com uma instância do Cloud SQL usando um contêiner de proxy, mas os conceitos são iguais para qualquer serviço gerenciado do Google Cloud que precise de acesso à API.

O laboratório foi criado por engenheiros do GKE Helmsman para ajudar você a entender melhor o Cloud SQL por meio de um contêiner de proxy. Acesse a página gke-networking-demos para visualizar essa demonstração. Todas as contribuições são bem-vindas!

Conteúdo

Neste laboratório, você vai aprender a:

  • Proteger um banco de dados contra acesso não autorizado usando uma conta de serviço sem privilégios nos nós do Kubernetes Engine.
  • Colocar credenciais de conta de serviço privilegiada em um contêiner em execução no Kubernetes Engine.
  • Usar o proxy do Cloud SQL para diminuir o trabalho de conexão à instância do Cloud SQL e reduzir as informações que os aplicativos têm sobre sua estrutura.

Contas de serviço sem privilégios

Todos os nós do Kubernetes Engine recebem a conta de serviço padrão do Compute Engine. A conta de serviço tem um privilégio consideravelmente alto e acesso a muitos serviços do Google Cloud. Devido à configuração do SDK Cloud, o software que você escrever usará as credenciais atribuídas à instância do Compute Engine em que está sendo executado.

Para impedir que todos os contêineres tenham os privilégios da conta de serviço padrão do Compute Engine, é necessário criar uma conta de serviço com privilégios mínimos para os nós do Kubernetes Engine e criar outras contas mais específicas (mas com menos privilégios) para os contêineres.

Contas de serviço privilegiadas em contêineres

É possível receber credenciais de conta de serviço de duas formas:

  1. Pela instância do host (o que não é recomendado)
  2. Com um arquivo de credenciais

Este laboratório mostrará como inserir o arquivo de credenciais em um contêiner em execução no Kubernetes Engine para que o aplicativo tenha os privilégios necessários.

Proxy do Cloud SQL

Com o proxy do Cloud SQL, é possível delegar ao processo a tarefa de criar e manter a conexão com a instância do serviço. Assim, o aplicativo não terá informações sobre a conexão, e o gerenciamento dos secrets será mais simples. O Google inclui o proxy do Cloud SQL como um contêiner do Docker que pode ser executado com o contêiner do aplicativo, no mesmo pod do Kubernetes Engine.

Arquitetura

O aplicativo e o respectivo contêiner secundário são implantados em um pod do Kubernetes (k8s) em execução no único nó no cluster do Kubernetes Engine. O aplicativo se comunica com a instância do Cloud SQL por meio do processo do proxy do Cloud SQL, ouvindo no localhost.

O manifesto do k8s cria um objeto de implantação de réplica única com dois contêineres, pgAdmin e o proxy do Cloud SQL. Há dois secrets instalados no cluster do Kubernetes Engine: as informações de conexão da instância do Cloud SQL e um arquivo de credenciais de chave de conta de serviço, ambos usados pelas chamadas da API Cloud SQL dos contêineres do proxy do Cloud SQL.

O aplicativo não precisa saber nada sobre como se conectar ao Cloud SQL nem estar exposto à API. O processo do proxy do Cloud SQL faz isso para o aplicativo. O contêiner do proxy do Cloud SQL é executado como um contêiner de "arquivo secundário" no pod.

Fluxo do aplicativo em um cluster do Kubernetes

Configuração e requisitos

Antes de clicar no botão Start Lab

Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.

Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.

Confira os requisitos para concluir o laboratório:

  • Acesso a um navegador de Internet padrão (recomendamos o Chrome).
Observação: 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.
  • Tempo para concluir o laboratório---não se esqueça: depois de começar, não será possível pausar o laboratório.
Observação: não use seu projeto ou conta do Google Cloud neste laboratório para evitar cobranças extras na sua conta.

Como iniciar seu laboratório e fazer login no console do Google Cloud

  1. Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você verá o seguinte:

    • O botão Abrir Console do Cloud
    • Tempo restante
    • As credenciais temporárias que você vai usar neste laboratório
    • Outras informações se forem necessárias
  2. Clique em Abrir Console do Google. O laboratório ativa recursos e depois abre outra guia com a página Fazer login.

    Dica: coloque as guias em janelas separadas lado a lado.

    Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
  3. Caso seja preciso, copie o Nome de usuário no painel Detalhes do laboratório e cole esse nome na caixa de diálogo Fazer login. Clique em Avançar.

  4. Copie a Senha no painel Detalhes do laboratório e a cole na caixa de diálogo Olá. Clique em Avançar.

    Importante: você precisa usar as credenciais do painel à esquerda. Não use suas credenciais do Google Cloud Ensina. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
  5. Acesse as próximas páginas:

    • Aceite os Termos e Condições.
    • Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
    • Não se inscreva em testes gratuitos.

Depois de alguns instantes, o console do GCP vai ser aberto nesta guia.

Observação: para ver uma lista dos produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo. Ícone do menu de navegação

Ativar o Cloud Shell

O Cloud Shell é uma máquina virtual com várias 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. Clique em Ativar o Cloud Shell Ícone "Ativar o Cloud Shell" na parte de cima do console do Google Cloud.

Depois de se conectar, vai notar que sua conta já está autenticada, e que o projeto está configurado com seu PROJECT_ID. A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

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

  1. (Opcional) É possível listar o nome da conta ativa usando este comando:
gcloud auth list
  1. Clique em Autorizar.

  2. A saída será parecida com esta:

Saída:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (Opcional) É possível listar o ID do projeto usando este comando:
gcloud config list project

Saída:

[core] project = <project_ID>

Exemplo de saída:

[core] project = qwiklabs-gcp-44776a13dea667a6 Observação: para conferir a documentação completa da gcloud, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.

Configure sua região e zona

Alguns recursos do Compute Engine estão em regiões e zonas. As regiões são localizações geográficas específicas onde você executa seus recursos. Todas elas têm uma ou mais zonas.

Para saber mais sobre regiões e zonas, além de conferir uma lista completa com todas elas, acesse a página Regiões e zonas da documentação.

Execute o comando a seguir para configurar a região e a zona do seu laboratório (use a região/zona mais adequada para você):

gcloud config set compute/region {{{ project_0.default_region | REGION }}} gcloud config set compute/zone {{{ project_0.default_zone | ZONE }}}

Copiar a demonstração

  1. Execute o comando a seguir para copiar os arquivos deste laboratório:
gsutil cp gs://spls/gsp449/gke-cloud-sql-postgres-demo.tar.gz . tar -xzvf gke-cloud-sql-postgres-demo.tar.gz
  1. Mude para o diretório deste laboratório:
cd gke-cloud-sql-postgres-demo

Tarefa 1: implantação

A implantação é totalmente automatizada. O script que você implantará usa os seguintes parâmetros, em ordem:

  • Um nome de usuário da instância do Cloud SQL
  • Um nome de usuário do console do pgAdmin
  • USER_PASSWORD - a senha para fazer login na instância do Postgres
  • PG_ADMIN_CONSOLE_PASSWORD - a senha para fazer login na interface do pgAdmin
  1. É possível criar qualquer nome de usuário para a instância do Cloud SQL e use qualquer e-mail para o console pgAdmin. Este exemplo usa "dbadmin" e seu e-mail temporário de estudante.

  2. Salve sua conta de estudante em uma variável:

PG_EMAIL=$(gcloud config get-value account)
  1. Execute os comandos a seguir para implantar o script e criar os dois nomes de usuário. A resposta ao comando vai solicitar que você crie uma senha para dbadmin e $PG_EMAIL (sua conta student@qwiklabs.net):
./create.sh dbadmin $PG_EMAIL

As senhas serão usadas novamente mais tarde no laboratório, mas não precisam ser difíceis.

Durante a implantação, create.sh vai executar os seguintes scripts:

  • enable_apis.sh - ativa a API Kubernetes Engine e a API Cloud SQL Admin.
  • postgres_instance.sh - cria a instância do Cloud SQL e o usuário adicional do Postgres. O gcloud atingirá o tempo limite ao aguardar a criação de uma instância do Cloud SQL, por isso o script fará manualmente a conclusão.
  • service_account.sh - cria a conta de serviço para o contêiner do proxy do Cloud SQL e cria o arquivo de credenciais.
  • cluster.sh - cria o cluster do Kubernetes Engine.
  • configs_and_secrets.sh - cria os secrets e o configMap do Kubernetes Engine que contêm as credenciais e a string de conexão para a instância do Cloud SQL.
  • pgadmin_deployment.sh - cria o pod pgAdmin4.
Observação: a implantação da instância do Cloud SQL pode levar cerca de 10 minutos. Se ocorrer um erro no script de implantação automatizado, verifique se as variáveis de região e zona estão definidas e tente executar o script create.sh novamente.

Em seguida, exponha o pod usando o balanceador de carga para se conectar à instância e exclua os serviços quando o processo for concluído para evitar qualquer acesso não autorizado.

  1. Execute o comando a seguir para receber o ID do Pod:
POD_ID=$(kubectl --namespace default get pods -o name | cut -d '/' -f 2)
  1. Exponha o pod usando o balanceador de carga:
kubectl expose pod $POD_ID --port=80 --type=LoadBalancer
  1. Para receber o endereço IP do serviço, execute:
kubectl get svc

Saída:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 443/TCP 96m SVC_NAME LoadBalancer 80:31789/TCP 45m Observação: execute o comando anterior novamente até que você encontre um endereço IP externo do serviço pgAdmin.
  1. No console do Cloud, em Menu de navegação, selecione SQL e clique no ID da instância.

  2. No menu à esquerda, clique em Conexões e em Rede.

  3. Depois de marcar a caixa de seleção "IP público", clique em Adicionar uma rede.

  4. Nomeie a rede e ative o acesso público:

0.0.0.0/0
  1. Clique em Concluído.

  2. Clique em Salvar.

  3. Abra uma nova guia e conecte-se ao pod pgAdmin no seu navegador utilizando th pgAdmin <SVC_IP>:

http://<SVC_IP>
  1. Faça login na interface no pgAdmin com as seguintes informações:
  • <PGADMIN_USERNAME> (sua conta temporária student@qwiklabs.net) no campo "Endereço de e-mail"
  • <PG_ADMIN_CONSOLE_PASSWORD> definido anteriormente
Observação: se você não tiver certeza de qual é a sua conta de estudante completa, execute gcloud config get-value account no Cloud Shell e copie a resposta.
  1. Volte ao console do Cloud e à página SQL. Clique na guia Informações gerais.

  2. Copie o endereço IP público.

  3. No console do pgAdmin, clique em Servidores no painel esquerdo e clique em Adicionar novo servidor.

  4. Na guia Geral, dê um nome para o servidor e clique na guia Conexão.

  5. Use <DATABASE_USER_NAME>(dbadmin) e <USER_PASSWORD> criados anteriormente para se conectar a 127.0.0.1:5432:

  • Nome do host: cole o endereço IP público que você copiou
  • Nome de usuário: <DATABASE_USER_NAME> (dbadmin)
  • Senha: <USER_PASSWORD> que você criou

Guia &quot;Conexão&quot; com os campos de nome/endereço do host, nome de usuário e senha preenchidos

  1. Clique em Salvar.

Teste a tarefa concluída

Clique em Verificar meu progresso para conferir a tarefa realizada. Se você tiver criado os recursos necessários com a implantação totalmente automatizada, receberá uma pontuação de avaliação.

Crie os recursos necessários com a implantação totalmente automatizada

Tarefa 2: validação

A validação é totalmente automatizada. O script de validação verifica a existência da instância do Cloud SQL, do cluster do Kubernetes Engine e do pod em execução. Todos esses recursos existirão depois que o script de implantação for concluído.

  • No Cloud Shell, valide essas três implantações executando:
make validate

O script usa os parâmetros INSTANCE_NAME: o nome da instância do Cloud SQL.

A resposta esperada é semelhante a:

Cloud SQL instance exists GKE cluster exists pgAdmin4 Deployment object exists

Tarefa 3: eliminação

A eliminação é totalmente automatizada. O script de eliminação exclui todos os recursos criados no script de implantação.

  1. Para realizar a eliminação, execute:
make teardown

O script usa o parâmetro INSTANCE_NAME: o nome da instância do Cloud SQL.

teardown.sh executa o comando a seguir:

  • delete_resources.sh - exclui tudo, exceto a instância do Cloud SQL.
  • delete_instance.sh - exclui a instância do Cloud SQL.

Tarefa 4: solução de problemas no seu ambiente

Quando você cria uma instância do Cloud SQL, aparece esta mensagem de erro:

is the subject of a conflict: The instance or operation is not in an appropriate state to handle the request.

Resolução

O nome de uma instância excluída não poderá ser reutilizado por até uma semana após a exclusão. Para mais informações, consulte a seção Excluir instâncias.

Parabéns!

Você se conectou a um aplicativo do Kubernetes Engine a uma instância do Cloud SQL usando o contêiner de proxy do Cloud SQL como um contêiner de arquivo secundário. Em seguida, você implantou um cluster do Kubernetes Engine e uma instância do Cloud SQL Postgres e usou o contêiner do proxy do Cloud SQL para permitir a comunicação entre eles.

Termine a Quest

Este laboratório autoguiado faz parte da Quest Google Kubernetes Engine Best Practices. Uma Quest é uma série de laboratórios relacionados que formam um programa de aprendizado. Ao concluir uma Quest, você ganha um selo como reconhecimento da sua conquista. É possível publicar os selos e incluir um link para eles no seu currículo on-line ou nas redes sociais. Consulte o catálogo do Google Cloud Ensina para ver todas as Quests disponíveis.

Próximas etapas/Saiba mais

Instruções de instalação do Kubernetes para implantar um aplicativo em contêiner para várias plataformas.

Manual atualizado em 16 de outubro de 2023

Laboratório testado em 17 de outubro de 2023

Copyright 2024 Google LLC. Este software é fornecido no estado em que se encontra, sem declarações nem garantias para qualquer uso ou finalidade. O uso do software está sujeito ao seu contrato com o Google.