Neste tutorial, descrevemos como configurar uma conexão de um aplicativo em execução em um cluster do Autopilot do Google Kubernetes Engine com uma instância do AlloyDB.
O AlloyDB é um serviço de banco de dados totalmente gerenciado e compatível com PostgreSQL no Google Cloud.
O Google Kubernetes Engine ajuda você a implantar, escalonar e gerenciar o Kubernetes automaticamente.
Objetivos
- Crie uma imagem Docker para o AlloyDB.
- Executar um aplicativo no Google Kubernetes Engine.
- Conecte-se a uma instância do AlloyDB usando o proxy de autenticação do AlloyDB e o IP interno.
Custos
Neste tutorial, usamos componentes faturáveis do Google Cloud, incluindo:
- AlloyDB
- Google Kubernetes Engine
- Artifact Registry
Use a calculadora de preços para gerar uma estimativa de custos baseada na projeção de uso.
Antes de começar
Console
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Verifique se você tem as permissões necessárias para concluir este tutorial.
- Ative as APIs do Cloud necessárias para criar e se conectar ao AlloyDB.
Na etapa Confirmar projeto, clique em Próxima para confirmar o nome do projeto em que você vai fazer mudanças.
Na etapa Ativar APIs, clique em Ativar para ativar o seguinte:
- API AlloyDB
- API Artifact Registry
- API Compute Engine
- API Cloud Resource Manager
- API Cloud Build
- API Container Registry
- API Kubernetes Engine
- API Service Networking
gcloud
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Verifique se você tem as permissões necessárias para concluir este tutorial.
Para os fins deste tutorial, use o aplicativo da Web de coleta de votos de amostra chamado gke-alloydb-app.
Funções exigidas
Para conseguir as permissões necessárias a fim de concluir as tarefas neste tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Administrador de bancos de dados (
roles/iam.databasesAdmin) -
Administrador de cluster do Kubernetes Engine (
roles/container.clusterAdmin) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin) -
Administrador da conta de serviço(
roles/iam.serviceAccountAdmin) -
Administrador do Kubernetes Engine(
roles/container.admin) -
Administrador do Artifact Registry(
roles/artifactregistry.admin)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Iniciar o Cloud Shell
O Cloud Shell é um ambiente shell para gerenciar recursos hospedados no Google Cloud.
O Cloud Shell vem pré-instalado com as ferramentas de linha de comando Google Cloud CLI e kubectl. A CLI gcloud fornece a principal interface de linha de comando para Google Cloud. O kubectl fornece a principal interface de linha de comando para executar comandos em clusters do Kubernetes.
Console
Para iniciar o Cloud Shell, siga estas etapas:
Acesse o console do Google Cloud .
Clique em
Ativar o Cloud Shell na parte de cima do console Google Cloud .
Na caixa de diálogo Autorizar o Cloud Shell, clique em Autorizar.
Uma sessão do Cloud Shell é aberta dentro de um quadro inferior no console. Use este shell para executar os comandos
gcloudekubectl.Antes de executar comandos, defina o projeto padrão na Google Cloud CLI usando o seguinte comando:
gcloud config set project PROJECT_IDSubstitua
PROJECT_IDpelo ID do projeto.
gcloud
Para iniciar o Cloud Shell, siga estas etapas:
-
No console do Google Cloud , ative o Cloud Shell.
Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
Para inicializar o ambiente, defina o projeto padrão na Google Cloud CLI usando o seguinte comando:
gcloud config set project PROJECT_IDSubstitua
PROJECT_IDpelo ID do projeto.Ative as APIs do Cloud necessárias para criar e se conectar ao AlloyDB para PostgreSQL.
gcloud services enable alloydb.googleapis.com \ compute.googleapis.com \ cloudresourcemanager.googleapis.com \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ servicenetworking.googleapis.com \ artifactregistry.googleapis.com \ container.googleapis.com
Criar um cluster do AlloyDB e a instância principal dele
Seu cluster do AlloyDB é composto por vários nós em uma nuvem privada virtual (VPC) do Google. Ao criar um cluster, você também configura o acesso a serviços particulares entre uma das suas VPCs e a VPC gerenciada pelo Google que contém o novo cluster. Recomendamos usar um acesso de IP interno para evitar a exposição do banco de dados à Internet pública.
Para se conectar a um cluster do AlloyDB para PostgreSQL de fora da VPC configurada, configure o Acesso a serviços particulares na VPC para o AlloyDB e use a rede VPC padrão para executar consultas de um aplicativo implantado em um cluster do GKE.
Console
Acesse a página Clusters.
Na seção Configurar cluster, no campo ID do cluster, insira um ID para o cluster. Ele precisa começar com uma letra minúscula e pode conter letras minúsculas, números e hifens, como
alloydb-cluster.No campo Senha, insira o CLUSTER_PASSWORD a ser usado para o usuário padrão do banco de dados
postgresao criar o cluster.No campo Versão do banco de dados, selecione a
POSTGRES_VERSIONprincipal para seu novo cluster do AlloyDB.Selecione um REGION para o cluster, como
us-central1.Na seção Configurar a instância principal, faça o seguinte:
No campo ID da instância, insira o INSTANCE_ID da instância principal, como
alloydb-primary.Selecione uma série de máquinas, por exemplo,
N2.Selecione um tipo de máquina e especifique o número de unidades de processamento virtual NUM_CPU, como
2.Para garantir que um intervalo de IP seja atribuído ao peering de serviço, configure a conexão de acesso a serviços particulares (PSA):
Na lista Rede, selecione
default.Se um intervalo de IP como
default-ip-rangejá estiver reservado, selecione-o na lista Intervalo de IP alocado.Se nenhum intervalo de IP estiver atribuído, clique em Alocar intervalo de IP personalizado para alocar um novo IP_RANGE_NAME interno e configurar a conexão.
Clique em Criar cluster.
Aguarde a criação da instância do AlloyDB. Isso pode levar alguns minutos.
gcloud
No Cloud Shell, verifique se o intervalo de endereços IP não utilizados (IPv4) já está atribuído ao peering de serviço:
gcloud services vpc-peerings list --network=defaultPule a próxima etapa se a saída for semelhante a esta:
network: projects/493573376485/global/networks/default peering: servicenetworking-googleapis-com reservedPeeringRanges: - default-ip-range service: services/servicenetworking.googleapis.comNessa saída, o valor de
reservedPeeringRangesédefault-ip-range, que pode ser usado como IP_RANGE_NAME para criar uma conexão particular na etapa 3.(Pule ao usar o valor padrão de
reservedPeeringRanges) Para alocar endereços IP não utilizados na VPC, use o seguinte comando:gcloud compute addresses create IP_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --description="VPC private service access" \ --network=defaultSubstitua
IP_RANGE_NAMEpelo nome dos endereços IP internos disponíveis em uma sub-rede do AlloyDB, comoalloydb-gke-psa-01.Para configurar o acesso ao serviço usando o intervalo de IP alocado, execute o seguinte comando:
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=IP_RANGE_NAME \ --network=defaultPara implantar o cluster do AlloyDB, execute o seguinte comando:
gcloud alloydb clusters create CLUSTER_ID \ --database-version=POSTGRES_VERSION \ --password=CLUSTER_PASSWORD \ --network=default \ --region=REGION \ --project=PROJECT_IDSubstitua:
CLUSTER_ID: o ID do cluster que você está criando. Ele precisa começar com uma letra minúscula e pode conter letras minúsculas, números e hifens, comoalloydb-cluster.VERSION: a versão principal do PostgreSQL com que você quer que os servidores de banco de dados do cluster sejam compatíveis. Escolha uma destas opções:14: para compatibilidade com o PostgreSQL 1415: para compatibilidade com o PostgreSQL 1516: para compatibilidade com o PostgreSQL 1617: para compatibilidade com o PostgreSQL 17, que é a versão padrão compatível do PostgreSQL18, para compatibilidade com o PostgreSQL 18
CLUSTER_PASSWORD: a senha a ser usada para o usuário padrãopostgres.PROJECT_ID: o ID do seu Google Cloud projeto em que você quer colocar o cluster.REGION: o nome da região em que o cluster do AlloyDB é criado, comous-central1.
Para implantar a instância principal do AlloyDB, execute o seguinte comando:
gcloud alloydb instances create INSTANCE_ID \ --instance-type=PRIMARY \ --cpu-count=NUM_CPU \ --region=REGION \ --cluster=CLUSTER_ID \ --project=PROJECT_IDSubstitua:
INSTANCE_IDcom o nome da instância do AlloyDB de sua escolha, comoalloydb-primary.CLUSTER_IDcom o nome do cluster do AlloyDB, comoalloydb-cluster.NUM_CPUpelo número de unidades de processamento virtual, como2.PROJECT_IDcom o ID do seu projeto do Google Cloud .REGIONcom o nome da região em que o cluster do AlloyDB foi criado, comous-central1.
Aguarde a criação da instância do AlloyDB. Isso pode levar alguns minutos.
Conecte-se à instância principal e crie um banco de dados e um usuário do AlloyDB
Para criar um banco de dados e um usuário de banco de dados na sua instância principal, siga estas etapas:
Console
Se você não estiver na página Visão geral do cluster recém-criado, acesse a página Clusters no Google Cloud console.
Para mostrar a página Visão geral do cluster, clique no nome do cluster CLUSTER_ID.
No menu de navegação, clique em AlloyDB Studio.
Na página Fazer login no AlloyDB Studio, faça o seguinte:
Na lista Banco de dados, selecione
postgres.Na lista Usuário, selecione
postgres.No campo Senha, insira
CLUSTER_PASSWORDque você criou em Criar um cluster do AlloyDB e a instância principal dele.Clique em Autenticar. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
Na guia Editor 1, faça o seguinte:
Crie um banco de dados do AlloyDB:
CREATE DATABASE DATABASE_NAME;Substitua
DATABASE_NAMEpelo nome de sua escolha, comotutorial_db.Clique em Executar. Aguarde a mensagem
Statement executed successfullyaparecer no painel Resultados.Clique em Limpar.
Crie um usuário e uma senha do banco de dados do AlloyDB:
CREATE USER USERNAME WITH PASSWORD 'DATABASE_PASSWORD';Substitua:
USERNAME: o nome do usuário do AlloyDB, comotutorial_user.DATABASE_PASSWORD: a senha do banco de dados do AlloyDB, comotutorial.
Clique em Executar. Aguarde a mensagem
Statement executed successfullyaparecer no painel Resultados.
No painel Explorer do AlloyDB Studio, clique em manage_accounts Mudar usuário/banco de dados.
Na página Fazer login no AlloyDB Studio, faça o seguinte:
Na lista Banco de dados, selecione
DATABASE_NAME, comotutorial_db.Na lista Usuário, selecione
postgres.No campo Senha, insira
CLUSTER_PASSWORDque você criou em Criar um cluster do AlloyDB e a instância principal dele.Clique em Autenticar. O painel Explorer mostra uma lista dos objetos no seu banco de dados.
Na guia Editor 1, faça o seguinte:
Conceda todas as permissões ao usuário do banco de dados do AlloyDB:
GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";Clique em Executar. Aguarde a mensagem
Statement executed successfullyaparecer no painel Resultados.Clique em Limpar.
Conceda permissões ao usuário do banco de dados do AlloyDB no esquema público:
GRANT CREATE ON SCHEMA public TO "USERNAME";Clique em Executar. Aguarde a mensagem
Statement executed successfullyaparecer no painel Resultados.
Anote o nome, o nome de usuário e a senha do banco de dados. Você usa essas informações em Criar um secret do Kubernetes.
gcloud
Para criar um usuário do banco de dados do AlloyDB, execute o seguinte comando no Cloud Shell:
gcloud alloydb users create USERNAME \ --cluster=CLUSTER_ID \ --region=REGION \ --password=DATABASE_PASSWORDSubstitua:
USERNAME: o nome do usuário do AlloyDB, comotutorial_user.CLUSTER_ID: o ID do cluster, comoalloydb-cluster.REGION: a região em que o cluster está localizado, comous-central1.DATABASE_PASSWORD: a senha do banco de dados do AlloyDB, comotutorial.
Para criar um banco de dados e conceder permissões, conecte-se ao cluster e execute comandos SQL. No Cloud Shell, use o cliente
psqlpara se conectar à instância.Depois de se conectar à instância como usuário
postgres, crie o banco de dados:CREATE DATABASE DATABASE_NAME;Substitua
DATABASE_NAMEpelo nome de sua escolha, comotutorial_db.Conceda todas as permissões ao usuário do banco de dados do AlloyDB no novo banco de dados:
GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";Conecte-se ao novo banco de dados e conceda permissões no esquema
public:\c DATABASE_NAME GRANT CREATE ON SCHEMA public TO "USERNAME";Anote o nome, o nome de usuário e a senha do banco de dados. Você usa essas informações em Criar um secret do Kubernetes.
Criar um cluster do Autopilot do GKE
Um cluster contém pelo menos uma máquina de plano de controle de clusters e várias máquinas de worker chamadas de nós. Os nós são instâncias de máquina virtual (VM) do Compute Engine que executam os processos do Kubernetes necessários para integrá-los ao cluster. Você implanta os aplicativos nos clusters para que eles sejam executados nos nós.
Console
No console do Google Cloud , acesse a página Clusters do Kubernetes.
Clique em Criar.
Especifique
GKE_CLUSTER_IDpara seu cluster do Autopilot no campo Nome da página Noções básicas sobre clusters, comoap-cluster.No campo Região, selecione
REGION, comous-central1.Clique em Criar.
Aguarde a criação do cluster do GKE. Isso pode levar alguns minutos.
gcloud
Criar um cluster do Autopilot:
gcloud container clusters create-auto GKE_CLUSTER_ID \
--location=REGIONSubstitua:
GKE_CLUSTER_ID: o nome do cluster do Autopilot, comoap-cluster.REGION: o nome da região em que o cluster do GKE está implantado, comous-central1.
Aguarde a criação do cluster do GKE. Isso pode levar alguns minutos.
Conectar-se ao AlloyDB usando o proxy de autenticação do AlloyDB
Recomendamos usar o proxy de autenticação do AlloyDB para se conectar ao AlloyDB. O proxy de autenticação do AlloyDB oferece criptografia e autenticação fortes usando o Identity and Access Management (IAM), o que pode ajudar a proteger seu banco de dados.
Quando você se conecta usando o proxy de autenticação do AlloyDB, ele
é adicionado ao pod usando o padrão de contêiner sidecar. O
contêiner do proxy de autenticação do AlloyDB está no mesmo pod que o aplicativo, o que permite que o aplicativo se conecte ao proxy por meio de localhost,
aumentando a segurança e o desempenho.
Criar e conceder papéis a contas de serviço do Google
No Google Cloud, os aplicativos usam contas de serviço para fazer chamadas de API autorizadas, autenticando como a própria conta de serviço. Quando um aplicativo é autenticado como uma conta de serviço, ele tem acesso a todos os recursos que a conta tem permissão para acessar.
Para executar o proxy de autenticação do AlloyDB no Google Kubernetes Engine, crie uma conta de serviço do Google para representar seu aplicativo. Recomendamos que você crie uma conta de serviço exclusiva para cada aplicativo, em vez de usar a mesma conta de serviço em todos os lugares. Esse modelo é mais seguro porque permite limitar as permissões por aplicativo.
Console
No console do Google Cloud , acesse a página IAM.
Na página Permissões para o projeto "
PROJECT_ID", encontre a linha que contém a conta de serviço padrão do ComputePROJECT_NUMBER-compute@developer.gserviceaccount.come clique em edit Editar principal nessa linha.Para receber o
PROJECT_NUMBER, que é um identificador exclusivo gerado automaticamente para seu projeto, faça o seguinte:Acesse a página Painel no console Google Cloud .
Clique na lista suspensa Selecionar de na parte superior da página. Na janela Selecionar de, escolha seu projeto.
O
PROJECT_NUMBERé exibido no card Informações do projeto do painel.Clique em Adicionar outro papel.
Para conceder a função
roles/artifactregistry.reader, clique em Selecionar um papel, escolhaArtifact Registryem Por produto ou serviço e selecioneArtifact Registry Readerem Funções.Clique em Salvar. O principal recebe o papel.
Para criar uma conta de serviço para o aplicativo de exemplo do GKE, acesse a página Contas de serviço. Acessar Contas de serviço
Selecione o projeto.
Na página Contas de serviço para o projeto "
PROJECT_ID", clique em Criar conta de serviço.Na seção Detalhes da conta de serviço da página Criar conta de serviço, insira
GSA_NAMEno campo Nome da conta de serviço, comogke-alloydb-gsa.Clique em Criar e continuar.
A seção Conceda a essa conta de serviço acesso ao projeto (opcional) da página Criar conta de serviço aparece.
Para conceder o papel
roles/alloydb.client, faça o seguinte:- Clique em Selecionar papel.
- Escolha
Cloud AlloyDBem Por produto ou serviço. - Escolha
Cloud AlloyDB Clientem Funções.
Clique em Adicionar outro papel.
Para conceder a função
roles/serviceusage.serviceUsageConsumer, clique em Selecionar um papel, escolhaService Usageem Por produto ou serviço e selecioneService Usage Consumerem Funções.Clique em Concluído. A conta de serviço do Google recebe papéis.
gcloud
Para conceder as permissões necessárias à conta de serviço padrão do Google para que o Compute Engine possa ler do Artifact Registry, execute o seguinte:
PROGECT_NUM=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:$PROGECT_NUM-compute@developer.gserviceaccount.com" --role="roles/artifactregistry.reader"Para criar uma conta de serviço do Google para seu aplicativo, crie uma conta de serviço do IAM:
gcloud iam service-accounts create GSA_NAME \ --display-name="gke-tutorial-service-account"Substitua
GSA_NAMEpelo nome da nova conta de serviço do IAM, comogke-alloydb-gsa.Para conceder os papéis
alloydb.clienteserviceusage.serviceUsageConsumerà GSA do aplicativo, use os seguintes comandos:gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/alloydb.client" gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com --role="roles/serviceusage.serviceUsageConsumer"
Configurar a Federação de Identidade da Carga de Trabalho para GKE no aplicativo de exemplo
Você precisa configurar o GKE para fornecer a conta de serviço ao proxy de autenticação do AlloyDB usando o recurso Federação de identidade da carga de trabalho para GKE. Esse método permite vincular uma conta de serviço do Kubernetes a uma conta de serviço do Google. A conta de serviço do Google fica acessível aos aplicativos que usam a conta de serviço correspondente do Kubernetes.
Uma conta de serviço do Google é uma identidade do IAM que representa seu aplicativo no Google Cloud. Uma conta de serviço do Kubernetes é uma identidade que representa seu aplicativo em um cluster do Google Kubernetes Engine.
A federação de identidade da carga de trabalho para GKE vincula uma conta de serviço do Kubernetes a uma conta de serviço do Google. Essa vinculação faz com que todas as implantações com essa conta de serviço do Kubernetes sejam autenticadas como a conta de serviço do Google nas interações com Google Cloud.
Console
Para iniciar o Cloud Shell, siga estas etapas:
-
No console do Google Cloud , ative o Cloud Shell.
Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
No Cloud Shell, receba as credenciais do cluster:
gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_IDEsse comando configura
kubectlpara usar o cluster do GKE que você criou.No editor de sua preferência, siga estas etapas:
Abra
service-account.yamlusando o nano, por exemplo:nano service-account.yamlNo editor, cole o seguinte conteúdo:
apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAMESubstitua
KSA_NAMEpelo nome da conta de serviço, comoksa-alloydb.Pressione Control+O, ENTER para salvar as mudanças e Control+X para sair do editor.
Crie uma conta de serviço do Kubernetes para o aplicativo de amostra:
kubectl apply -f service-account.yamlPara vincular a conta de serviço do Kubernetes à conta de serviço do Google, siga estas etapas no console do Google Cloud :
No console Google Cloud , acesse a página Contas de serviço.
Selecione o projeto.
Clique no nome da conta de serviço do Google
GSA_NAME.Clique na guia Permissões.
Clique em Conceder acesso.
No campo Novos principais, insira o seguinte:
serviceAccount:PROJECT_ID.svc.id.goog[default/KSA_NAME]Na lista Selecionar um papel, selecione IAM > Usuário da Identidade da carga de trabalho.
Clique em Salvar.
No Cloud Shell, adicione a anotação
iam.gke.io/gcp-service-accountà conta de serviço do Kubernetes usando o endereço de e-mail da conta de serviço do Google:kubectl annotate serviceaccount \ KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
gcloud
No console do Google Cloud , abra o Cloud Shell.
No Cloud Shell, receba as credenciais do cluster:
gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_IDEsse comando configura
kubectlpara usar o cluster do GKE que você criou.No editor de sua preferência, siga estas etapas:
Abra
service-account.yamlusando o nano, por exemplo:nano service-account.yamlNo editor, cole o seguinte conteúdo:
apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAMESubstitua
KSA_NAMEpelo nome da conta de serviço, comoksa-alloydb.Pressione Control+O, ENTER para salvar as mudanças e Control+X para sair do editor.
Crie uma conta de serviço do Kubernetes para o aplicativo de amostra:
kubectl apply -f service-account.yamlConceda permissões à sua conta de serviço do Kubernetes para atuar como a conta de serviço do Google criando uma vinculação de política do IAM entre as duas contas de serviço:
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:PROJECT_ID.svc.id.goog[default/KSA_NAME]" \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.comAdicione a anotação
iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_IDà conta de serviço do Kubernetes usando o endereço de e-mail da conta de serviço do Google:kubectl annotate serviceaccount \ KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
Preencha o Artifact Registry com uma imagem do aplicativo de amostra
Para criar uma imagem de contêiner do aplicativo de exemplo e enviá-la para um repositório, siga estas etapas.
Console
No console do Google Cloud , acesse a página Artifact Registry.
Para criar um repositório, clique em .
No campo Nome, digite
REPOSITORY_ID, comogke-alloydb-sample-app.Na seção Formato, selecione Docker.
Na seção Tipo de local, selecione Região e escolha
REGION, comous-central1.Clique em Criar.
Para criar a imagem do aplicativo de exemplo, inicie o Cloud Shell e siga estas etapas.
-
No console do Google Cloud , ative o Cloud Shell.
Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
No Cloud Shell, clone o repositório com o código do aplicativo de amostra
gke-alloydb-appdo GitHub:git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/goNa caixa de diálogo Autorizar o Cloud Shell, clique em Autorizar. Essa solicitação não aparece se você já fez essa etapa.
Para criar o contêiner do Docker e publicá-lo no Artifact Registry, execute o seguinte comando:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_IDSubstitua:
PROJECT_ID: ID do projeto.REPOSITORY_ID: o nome do seu repositório, comogke-alloydb-sample-app.SAMPLE_APPLICATION: o nome do aplicativo da Web de exemplo, comogke-alloydb-app.
gcloud
No Cloud Shell, use o comando a seguir para clonar o repositório com o código do aplicativo de amostra
gke-alloydb-appdo GitHub:git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/goCrie um repositório no Artifact Registry para imagens do Docker:
gcloud artifacts repositories create REPOSITORY_ID --location REGION --repository-format=docker --project PROJECT_IDSubstitua:
PROJECT_ID: ID do projeto.REPOSITORY_ID: o nome do seu repositório, comogke-alloydb-sample-app.
Na caixa de diálogo Autorizar o Cloud Shell, clique em Autorizar. Essa solicitação não aparece se você já fez essa etapa.
Para criar um contêiner do Docker e publicá-lo no Artifact Registry, use o seguinte comando:
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_IDSubstitua:
PROJECT_ID: ID do projeto.REPOSITORY_ID: o nome do seu repositório, comogke-alloydb-sample-app.SAMPLE_APPLICATION: o nome do aplicativo da Web de exemplo, comogke-alloydb-app.
Criar um secret do Kubernetes
Você cria secrets do Kubernetes para o banco de dados, o usuário e a senha do usuário a serem usados pelo aplicativo de amostra. Os valores de cada secret são baseados nos valores especificados na etapa Conectar-se à instância principal e criar um banco de dados e um usuário do AlloyDB deste tutorial. Para mais informações, consulte Secrets.
Console
No Cloud Shell aberto, use um SECRET do Kubernetes, como gke-alloydb-secret, para armazenar as informações de conexão:
kubectl create secret generic SECRET \
--from-literal=database=DATABASE_NAME \
--from-literal=username=USERNAME \
--from-literal=password=DATABASE_PASSWORDgcloud
Use um SECRET do Kubernetes, como gke-alloydb-secret, para armazenar as informações de conexão:
kubectl create secret generic SECRET \
--from-literal=database=DATABASE_NAME \
--from-literal=username=USERNAME \
--from-literal=password=DATABASE_PASSWORDImplantar e executar o proxy do AlloyDB em um padrão de arquivo secundário
Recomendamos executar o proxy do AlloyDB em um padrão sidecar como um contêiner adicional que compartilha um pod com seu aplicativo pelos seguintes motivos:
- Impede que o tráfego SQL seja exposto localmente. O proxy do AlloyDB fornece criptografia nas conexões de saída, mas você precisa limitar a exposição das conexões de entrada.
- Evita um ponto único de falha. O acesso de cada aplicativo ao seu banco de dados é independente dos outros, tornando-o mais resiliente.
- Limita o acesso ao proxy do AlloyDB, permitindo usar permissões do IAM por aplicativo, em vez de expor o banco de dados a todo o cluster.
- Permite que você defina o escopo das solicitações de recursos com mais precisão. Como o proxy do AlloyDB consome recursos linearmente ao uso, esse padrão permite que você defina o escopo com mais precisão e solicite recursos para corresponder aos seus aplicativos à medida que eles são escalonados.
- Permite configurar seu aplicativo para se conectar usando
127.0.0.1no DB_PORT especificado na seção de comando.
Depois de criar um cluster do GKE e criar uma imagem de contêiner para seu aplicativo, implante o aplicativo conteinerizado no cluster do GKE.
Console
Neste tutorial, você vai implantar o aplicativo da Web de coleta de votos de amostra, gke-alloydb-app, que usa o AlloyDB como o Datastore.
Receba a string de conexão da instância
INSTANCE_URIpara a instância principal do AlloyDB:No Google Cloud console, acesse a página Clusters.
Para mostrar a página Visão geral do cluster, clique no nome dele.
Na tabela Instâncias, clique no nome da instância principal.
No campo URI da instância da página Visão geral, clique em Copiar para a área de transferência.
Você especifica esse
INSTANCE_URIno arquivo de definiçãoproxy_sidecar_deployment.yamlna etapa 2.b desta seção.No Cloud Shell aberto, conclua as seguintes etapas:
Abra
proxy_sidecar_deployment.yamlusando o editor de sua escolha, por exemplo, nano:nano proxy_sidecar_deployment.yamlNo editor, cole o seguinte conteúdo:
apiVersion: apps/v1 kind: Deployment metadata: name: gke-alloydb spec: selector: matchLabels: app: SAMPLE_APPLICATION template: metadata: labels: app: SAMPLE_APPLICATION spec: serviceAccountName: KSA_NAME containers: - name: SAMPLE_APPLICATION # Replace <PROJECT_ID> and <REGION> with your project ID and region. image: REGION -docker.pkg.dev/PROJECT_ID /REPOSITORY_ID /SAMPLE_APPLICATION:latest imagePullPolicy: Always # This app listens on port 8080 for web traffic by default. ports: - containerPort: 8080 env: - name: PORT value: "8080" - name: INSTANCE_HOST value: "127.0.0.1" - name: DB_PORT value: "5432" - name: DB_USER valueFrom: secretKeyRef: name: SECRET key: username - name: DB_PASS valueFrom: secretKeyRef: name: SECRET key: password - name: DB_NAME valueFrom: secretKeyRef: name: SECRET key: database - name: alloydb-proxy # This uses the latest version of the AlloyDB Auth proxy image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1 command: - "/alloydb-auth-proxy" #AlloyDB instance name as parameter for the AlloyDB proxy - "INSTANCE_URI " securityContext: runAsNonRoot: true resources: requests: memory: "2Gi" cpu: "1"Substitua
INSTANCE_URIpelo caminho que você copiou na etapa 1.Pressione Control+O, ENTER para salvar as mudanças e Control+X para sair do editor.
Para implantar o aplicativo
gke-alloydb-app, aplique o arquivo de definição:kubectl apply -f proxy_sidecar_deployment.yamlPara verificar se o aplicativo está em execução, acesse a página Cargas de trabalho no console Google Cloud :
Verifique se o status da implantação gke-alloydb é OK.
Para se conectar ao aplicativo de exemplo usando um balanceador de carga externo, conclua as seguintes etapas no Cloud Shell aberto:
Abra
service.yaml:nano service.yamlCole o seguinte conteúdo:
apiVersion: v1 kind: Service metadata: name: SAMPLE_APPLICATION spec: type: LoadBalancer selector: app: SAMPLE_APPLICATION ports: - port: 80 targetPort: 8080Substitua
SAMPLE_APPLICATIONpelo nome do aplicativo, comogke-alloydb-app.Salve e saia do editor. Em seguida, aplique o serviço:
kubectl apply -f service.yaml
Para acessar o endereço IP externo do seu aplicativo, acesse a página Serviços e entradas no console do Google Cloud :
Use o valor na coluna Endpoints externos para acessar o aplicativo no seguinte URL:
http://EXTERNAL_IP
gcloud
Neste tutorial, você vai implantar o aplicativo da Web de coleta de votos de amostra, gke-alloydb-app, que usa o AlloyDB como o Datastore.
Receba a conexão de instância INSTANCE_URI da instância principal do AlloyDB a que você quer que o proxy do AlloyDB se conecte:
gcloud alloydb instances describe INSTANCE_ID \ --cluster=CLUSTER_ID \ --region=REGION \ --format="value(name)"Substitua:
INSTANCE_ID: nome da instância, comoalloydb-primary.CLUSTER_ID: nome do cluster, comoalloydb-cluster.
A saída contém o INSTANCE_URI especificado no arquivo de definição
proxy_sidecar_deployment.yamlna etapa 2.b desta seção.No editor de sua preferência, por exemplo, nano, conclua as seguintes etapas:
Abra
proxy_sidecar_deployment.yamlusando o editor de sua escolha, por exemplo, nano:nano proxy_sidecar_deployment.yamlNo editor, cole o seguinte conteúdo:
apiVersion: apps/v1 kind: Deployment metadata: name: gke-alloydb spec: selector: matchLabels: app: SAMPLE_APPLICATION template: metadata: labels: app: SAMPLE_APPLICATION spec: serviceAccountName: KSA_NAME containers: - name: SAMPLE_APPLICATION # Replace <PROJECT_ID> and <REGION> with your project ID and region. image: REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION:latest imagePullPolicy: Always # This app listens on port 8080 for web traffic by default. ports: - containerPort: 8080 env: - name: PORT value: "8080" # This project uses environment variables to determine # how you would like to run your application # To use the Go connector (recommended) - use INSTANCE NAME # To use TCP - Setting INSTANCE_HOST will use TCP (e.g., 127.0.0.1) - name: INSTANCE_HOST value: "127.0.0.1" - name: DB_PORT value: "5432" # To use Automatic IAM Authentication (recommended) # use DB_IAM_USER instead of DB_USER # you may also remove the DB_PASS environment variable - name: DB_USER valueFrom: secretKeyRef: name: SECRET key: username - name: DB_PASS valueFrom: secretKeyRef: name: SECRET key: password - name: DB_NAME valueFrom: secretKeyRef: name: SECRET key: database # If you are using the Go connector (recommended), you can # remove alloydb-proxy (everything below this line) - name: alloydb-proxy # This uses the latest version of the AlloyDB Auth proxy # It is recommended to use a specific version for production environments. # See: https://github.com/GoogleCloudPlatform/alloydb-auth-proxy image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1 command: - "/alloydb-auth-proxy" #AlloyDB instance name as parameter for the AlloyDB proxy # Use <INSTANCE_URI> - "INSTANCE_URI" securityContext: # The default AlloyDB Auth proxy image runs as the # "nonroot" user and group (uid: 65532) by default. runAsNonRoot: true resources: requests: # The proxy's memory use scales linearly with the number of active # connections. Fewer open connections will use less memory. Adjust # this value based on your application's requirements. memory: "2Gi" # The proxy's CPU use scales linearly with the amount of IO between # the database and the application. Adjust this value based on your # application's requirements. cpu: "1"Substitua
INSTANCE_URIpelo caminho da sua instância principal do AlloyDB da etapa 1, comoprojects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances/INSTANCE_ID.Pressione Control+O, ENTER para salvar as mudanças e Control+X para sair do editor.
Para implantar o aplicativo
gke-alloydb-app, aplique o arquivo de definiçãoproxy_sidecar_deployment.yamlcriado na etapa anterior:kubectl apply -f proxy_sidecar_deployment.yamlVerifique se o status dos dois contêineres no pod é
running:kubectl get podsExemplo de resposta:
NAME READY STATUS RESTARTS AGE gke-alloydb-8d59bb4cc-62xgh 2/2 Running 0 2m53sPara se conectar ao aplicativo de amostra
gke-alloydb-app, use um serviço, por exemplo, um balanceador de carga HTTP externo. No editor de sua preferência, siga estas etapas:Abra
service.yamlusando o nano, por exemplo:nano service.yamlNo editor nano, cole o seguinte conteúdo:
apiVersion: v1 kind: Service metadata: name: SAMPLE_APPLICATION spec: type: LoadBalancer selector: app: SAMPLE_APPLICATION ports: - port: 80 targetPort: 8080Substitua
SAMPLE_APPLICATIONpelo nome do aplicativo da Web de exemplo, comogke-alloydb-app.Pressione Control+O, ENTER para salvar as mudanças e Control+X para sair do editor.
Para implantar o aplicativo de serviço
gke-alloydb-app, aplique o arquivoservice.yaml:kubectl apply -f service.yamlPara receber os detalhes do serviço, incluindo o endereço IP externo, use o seguinte comando:
kubectl get serviceExemplo de resposta:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gke-alloydb-app LoadBalancer 34.118.229.246 35.188.16.172 80:32712/TCP 45s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 85mUse o valor do IP externo da etapa anterior para acessar o aplicativo de exemplo no seguinte URL:
http://EXTERNAL-IP
Exemplos de arquivos de configuração
proxy_sidecar_deployment.yaml
service.yaml
service-account.yaml
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para este tutorial.
Para excluir o projeto:
No console Google Cloud , acesse a página Gerenciar recursos.
Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
Na caixa de diálogo, digite seu
PROJECT_IDe clique em Desligar para excluir o projeto.
A seguir
- Sobre o proxy de autenticação do AlloyDB
- Visão geral do IP interno
- Documentação do Google Kubernetes Engine