Estabeleça ligação do Google Kubernetes Engine (GKE) ao AlloyDB para PostgreSQL

Este tutorial descreve como configurar uma ligação de uma aplicação em execução num cluster do modo automático do Google Kubernetes Engine a uma instância do AlloyDB.

O AlloyDB é um serviço de base de dados totalmente gerido e compatível com o PostgreSQL no Google Cloud.

O Google Kubernetes Engine ajuda a implementar, dimensionar e gerir automaticamente o Kubernetes.

Objetivos

  • Crie uma imagem do Docker para o AlloyDB.
  • Execute uma aplicação no Google Kubernetes Engine.
  • Ligue-se a uma instância do AlloyDB através do proxy Auth do AlloyDB e do IP interno.

Custos

Este tutorial usa 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 com base na sua utilização prevista.

Antes de começar

Consola

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Ative as APIs Cloud necessárias para criar e estabelecer ligação ao AlloyDB para PostgreSQL.

    Ative as APIs

    1. No passo Confirmar projeto, clique em Seguinte para confirmar o nome do projeto ao qual vai fazer alterações.

    2. No passo Ativar APIs, clique em Ativar para ativar o seguinte:

      • API AlloyDB
      • API Artifact Registry
      • API Compute Engine
      • Cloud Resource Manager API
      • API Cloud Build
      • API Container Registry
      • API Kubernetes Engine
      • API de rede de serviços

Para efeitos deste tutorial, use a aplicação Web de recolha de votos de exemplo denominada gke-alloydb-app.

Inicie o Cloud Shell

O Cloud Shell é um ambiente de shell para gerir recursos alojados no Google Cloud.

O Cloud Shell vem pré-instalado com as ferramentas de linha de comandos CLI Google Cloud e kubectl. A CLI gcloud fornece a interface de linhas de comando principal para Google Cloud. kubectl fornece a interface de linha de comandos principal para executar comandos em clusters do Kubernetes.

Consola

Para iniciar o Cloud Shell, conclua os seguintes passos.

  1. Aceda à Google Cloud consola.

    Google Cloud consola

  2. Clique em Botão Ativar Cloud Shell Ativar Cloud Shell na parte superior da Google Cloud consola.

  3. Na caixa de diálogo Autorizar Cloud Shell, clique em Autorizar.

    É aberta uma sessão do Cloud Shell num frame na parte inferior da consola. Use esta shell para executar comandos gcloud e kubectl.

    1. Antes de executar comandos, defina o seu projeto predefinido na CLI Google Cloud com o seguinte comando:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo seu ID do projeto.

Crie um cluster do AlloyDB e a respetiva instância principal

O cluster do AlloyDB compreende vários nós numa nuvem virtual privada (VPC) da Google. Quando cria um cluster, também configura o acesso a serviços privados entre uma das suas VPCs e a VPC gerida pela Google que contém o novo cluster. Recomendamos que use um acesso IP interno para evitar a exposição da base de dados à Internet pública.

Para estabelecer ligação a um cluster do AlloyDB for PostgreSQL a partir do exterior da respetiva VPC configurada, configure a configuração de acesso a serviços privados na VPC do AlloyDB e use a rede VPC predefinida para executar consultas a partir de uma aplicação implementada num cluster do GKE.

gcloud

  1. No Cloud Shell, verifique se o intervalo de endereços IP (IPv4) não usados já está atribuído à interligação de serviços:

    gcloud services vpc-peerings list --network=default

    Ignore o passo seguinte se o resultado for semelhante ao seguinte:

    network: projects/493573376485/global/networks/default
    peering: servicenetworking-googleapis-com
    reservedPeeringRanges:
    - default-ip-range
    service: services/servicenetworking.googleapis.com
    

    Neste resultado, o valor de reservedPeeringRanges é default-ip-range, que pode usar como IP_RANGE_NAME para criar uma ligação privada no passo 3.

  2. (Ignore quando usar o valor predefinido de reservedPeeringRanges) Para atribuir endereços IP não usados 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=default

    Substitua IP_RANGE_NAME pelo seu nome para os endereços IP internos disponíveis numa sub-rede do AlloyDB, como alloydb-gke-psa-01.

  3. Para configurar o acesso ao serviço através do intervalo de IPs atribuído, execute o seguinte comando:

    gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=IP_RANGE_NAME \
        --network=default
  4. Para implementar 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_ID

    Substitua o seguinte:

    • CLUSTER_ID: o ID do cluster que está a criar. Tem de começar com uma letra minúscula e pode conter letras minúsculas, números e hífenes, como alloydb-cluster.
    • VERSION: a versão principal do PostgreSQL com a qual quer que os servidores de base de dados do cluster sejam compatíveis. Selecione uma das seguintes opções:

      • 14: para compatibilidade com o PostgreSQL 14

      • 15: para compatibilidade com o PostgreSQL 15

      • 16: para compatibilidade com o PostgreSQL 16, que é a versão predefinida do PostgreSQL suportada

        Para mais informações sobre as restrições aplicáveis à utilização do PostgreSQL 16 na pré-visualização, consulte o artigo Compatibilidade da pré-visualização do PostgreSQL 16.

    • CLUSTER_PASSWORD: a palavra-passe a usar para o utilizador postgres predefinido.

    • PROJECT_ID: o ID do seu projeto Google Cloud onde quer colocar o cluster.

    • REGION: o nome da região onde o cluster do AlloyDB é criado, como us-central1.

  5. Para implementar a instância principal do AlloyDB, execute o seguinte:

    gcloud alloydb instances create INSTANCE_ID \
        --instance-type=PRIMARY \
        --cpu-count=NUM_CPU \
        --region=REGION \
        --cluster=CLUSTER_ID \
        --project=PROJECT_ID

    Substitua o seguinte:

    • INSTANCE_ID com o nome da instância do AlloyDB à sua escolha, como alloydb-primary.
    • CLUSTER_ID com o nome do cluster do AlloyDB, como alloydb-cluster.
    • NUM_CPU com o número de unidades de processamento virtuais, como 2.
    • PROJECT_ID com o ID do seu Google Cloud projeto.
    • REGION com o nome da região onde o cluster do AlloyDB é criado, como us-central1.

    Aguarde a criação da instância do AlloyDB. Esta ação pode demorar vários minutos.

Ligue-se à instância principal e crie uma base de dados e um utilizador do AlloyDB

Consola

  1. Se não estiver na página Vista geral do cluster recém-criado, na consola Google Cloud , aceda à página Clusters.

    Aceda a Clusters

  2. Para apresentar a página Vista geral do cluster, clique no nome do cluster CLUSTER_ID.

  3. No menu de navegação, clique em AlloyDB Studio.

  4. Na página Inicie sessão no AlloyDB Studio, faça o seguinte:

    1. Na lista Base de dados, selecione postgres.

    2. Na lista Utilizador, selecione postgres.

    3. No campo Palavra-passe, introduza a palavra-passe que criou em Crie um cluster do AlloyDB e a respetiva instância principal.CLUSTER_PASSWORD

    4. Clique em Autenticar. O painel Explorador apresenta uma lista dos objetos na sua base de dados.

  5. No separador Editor 1, conclua o seguinte:

    1. Crie uma base de dados do AlloyDB:

      CREATE DATABASE DATABASE_NAME;
      

      Substitua DATABASE_NAME pelo nome à sua escolha, como tutorial_db.

    2. Clique em Executar. Aguarde até que a mensagem Statement executed successfully seja apresentada no painel Resultados.

    3. Clique em Limpar.

    4. Crie um utilizador e uma palavra-passe da base de dados do AlloyDB:

      CREATE USER USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
      

      Substitua o seguinte:

      • USERNAME: o nome do utilizador do AlloyDB, como tutorial_user.

      • DATABASE_PASSWORD: a palavra-passe da sua base de dados do AlloyDB, como tutorial.

    5. Clique em Executar. Aguarde até que a mensagem Statement executed successfully seja apresentada no painel Resultados.

  6. No painel Explorador do AlloyDB Studio, clique em Mudar de utilizador/base de dados.

  7. Na página Inicie sessão no AlloyDB Studio, faça o seguinte:

    1. Na lista Base de dados, selecione DATABASE_NAME, como tutorial_db.

    2. Na lista Utilizador, selecione postgres.

    3. No campo Palavra-passe, introduza a palavra-passe que criou em Crie um cluster do AlloyDB e a respetiva instância principal.CLUSTER_PASSWORD

    4. Clique em Autenticar. O painel Explorador apresenta uma lista dos objetos na sua base de dados.

  8. No separador Editor 1, conclua o seguinte:

    1. Conceda todas as autorizações ao utilizador da base de dados do AlloyDB:

      GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";
      
    2. Clique em Executar. Aguarde até que a mensagem Statement executed successfully seja apresentada no painel Resultados.

    3. Clique em Limpar.

    4. Conceda autorizações ao utilizador da base de dados do AlloyDB no esquema público:

      GRANT CREATE ON SCHEMA public TO "USERNAME";
      
    5. Clique em Executar. Aguarde até que a mensagem Statement executed successfully seja apresentada no painel Resultados.

  9. Tome nota do nome da base de dados, do nome de utilizador e da palavra-passe. Use estas informações em Crie um segredo do Kubernetes.

Crie um cluster do GKE Autopilot

Um cluster contém, pelo menos, uma máquina do painel de controlo do cluster e várias máquinas de trabalho denominadas nós. Os nós são instâncias de máquinas virtuais (VMs) do Compute Engine que executam os processos do Kubernetes necessários para os tornar parte do cluster. Implementa aplicações em clusters e as aplicações são executadas nos nós.

Consola

  1. Na Google Cloud consola, aceda à página Clusters do Kubernetes.

    Aceda a Clusters do Kubernetes

  2. Clique em Criar.

  3. Especifique GKE_CLUSTER_ID para o cluster do Autopilot no campo Nome da página Noções básicas do cluster, como ap-cluster.

  4. No campo Região, selecione REGION, como us-central1.

  5. Clique em Criar.

    Aguarde a criação do cluster do GKE. Esta ação pode demorar vários minutos.

gcloud

Crie um cluster do Autopilot:

gcloud container clusters create-auto GKE_CLUSTER_ID \
    --location=REGION

Substitua o seguinte:

  • GKE_CLUSTER_ID: o nome do cluster do Autopilot, como ap-cluster.
  • REGION: o nome da região onde o cluster do GKE está implementado, como us-central1.

Aguarde a criação do cluster do GKE. Esta ação pode demorar vários minutos.

Ligue-se ao AlloyDB através do proxy Auth do AlloyDB

Recomendamos que use o proxy Auth do AlloyDB para se ligar ao AlloyDB. O proxy Auth do AlloyDB oferece uma encriptação forte e autenticação através da gestão de identidade e de acesso (IAM), o que pode ajudar a manter a sua base de dados segura.

Quando se liga através do proxy Auth do AlloyDB, este é adicionado ao seu pod através do padrão de contentor sidecar. O contentor do proxy Auth do AlloyDB está no mesmo pod que a sua aplicação, o que permite à aplicação ligar-se ao proxy Auth do AlloyDB através de localhost, aumentando a segurança e o desempenho.

Crie e conceda funções a contas de serviço Google

No Google Cloud, as aplicações usam contas de serviço para fazer chamadas API autorizadas através da autenticação como a própria conta de serviço. Quando uma aplicação se autentica como uma conta de serviço, tem acesso a todos os recursos aos quais a conta de serviço tem autorização de acesso.

Para executar o AlloyDB Auth Proxy no Google Kubernetes Engine, cria uma conta de serviço Google para representar a sua aplicação. Recomendamos que crie uma conta de serviço exclusiva para cada aplicação, em vez de usar a mesma conta de serviço em todas as aplicações. Este modelo é mais seguro porque permite limitar as autorizações por aplicação.

Consola

  1. Na Google Cloud consola, aceda à página IAM.

    Aceda ao IAM

  2. Na página Autorizações para o projeto "PROJECT_ID", localize a linha que contém a conta de serviço de computação predefinida PROJECT_NUMBER-compute@developer.gserviceaccount.com e clique em Editar principal nessa linha.

    Para obter o PROJECT_NUMBER, que é um identificador exclusivo gerado automaticamente para o seu projeto, faça o seguinte:

    1. Aceda à página Painel de controlo na Google Cloud consola.

      Aceder ao painel de controlo

    2. Clique na lista pendente Selecionar a partir de na parte superior da página. Na janela Selecionar de apresentada, selecione o seu projeto.

    O ícone PROJECT_NUMBER é apresentado no cartão Informações do projeto do painel de controlo do projeto.

  3. Clique em Adicionar outra função.

  4. Para conceder a função roles/artifactregistry.reader, clique em Selecionar uma função, escolha Artifact Registry em Por produto ou serviço e escolha Artifact Registry Reader em Funções.

  5. Clique em Guardar. A função é concedida ao principal.

  6. Para criar uma conta de serviço para a aplicação de exemplo do GKE, aceda à página Contas de serviço. Aceda a Contas de serviço

  7. Selecione o seu projeto.

  8. Na página Contas de serviço para o projeto "PROJECT_ID", clique em Criar conta de serviço.

  9. Na secção Detalhes da conta de serviço da página Criar conta de serviço, introduza GSA_NAME no campo Nome da conta de serviço, como gke-alloydb-gsa.

  10. Clique em Criar e continuar.

    Aparece a secção Conceda a esta conta de serviço acesso ao projeto (opcional) da página Criar conta de serviço.

  11. Para conceder a função roles/alloydb.client, faça o seguinte:

    1. Clique em Selecionar uma função.
    2. Escolha Cloud AlloyDB em Por produto ou serviço.
    3. Escolha Cloud AlloyDB Client em Funções.
  12. Clique em Adicionar outra função.

  13. Para conceder a função roles/serviceusage.serviceUsageConsumer, clique em Selecionar uma função, escolha Service Usage em Por produto ou serviço e escolha Service Usage Consumer em Funções.

  14. Clique em Concluído. São concedidas funções à conta de serviço Google.

gcloud

  1. Para conceder as autorizações necessárias à conta de serviço Google predefinida para que o Compute Engine possa ler a partir 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"
  2. Para criar uma conta de serviço Google para a sua aplicação, crie uma conta de serviço da IAM:

    gcloud iam service-accounts create GSA_NAME \
    --display-name="gke-tutorial-service-account"

    Substitua GSA_NAME pelo nome da sua nova conta de serviço do IAM, como gke-alloydb-gsa.

  3. Para conceder as funções alloydb.client e serviceusage.serviceUsageConsumer à sua aplicação GSA, 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"

Configure a federação de identidade da carga de trabalho para o GKE para a aplicação de exemplo

Tem de configurar o GKE para fornecer a conta de serviço ao AlloyDB Auth Proxy através da funcionalidade Workload Identity Federation para o GKE. Este método permite-lhe associar uma conta de serviço do Kubernetes a uma conta de serviço Google. A conta de serviço Google torna-se, então, acessível às aplicações que usam a conta de serviço Kubernetes correspondente.

Uma conta de serviço Google é uma identidade da IAM que representa a sua aplicação no Google Cloud. Google CloudUma conta de serviço do Kubernetes é uma identidade que representa a sua aplicação num cluster do Google Kubernetes Engine.

A federação de identidades da carga de trabalho para o GKE associa uma conta de serviço do Kubernetes a uma conta de serviço Google. Esta associação faz com que todas as implementações com essa conta de serviço do Kubernetes sejam autenticadas como a conta de serviço Google nas respetivas interações com Google Cloud.

gcloud

  1. Na Google Cloud consola, abra o Cloud Shell.

    Abra o Cloud Shell

  2. No Cloud Shell, obtenha as credenciais do cluster:

    gcloud container clusters get-credentials GKE_CLUSTER_ID --region REGION --project PROJECT_ID

    Este comando configura o kubectl para usar o cluster do GKE que criou.

  3. No editor à sua escolha, conclua os seguintes passos:

    1. Abra service-account.yaml com o nano, por exemplo:

      nano service-account.yaml
    2. No editor, cole o seguinte conteúdo:

        apiVersion: v1
        kind: ServiceAccount
        metadata:
          name: KSA_NAME
      

      Substitua KSA_NAME pelo nome da conta de serviço, como ksa-alloydb.

    3. Prima Control+O, prima ENTER para guardar as alterações e prima Control+X para sair do editor.

  4. Crie uma conta de serviço do Kubernetes para a sua aplicação de exemplo:

    kubectl apply -f service-account.yaml
  5. Conceda autorizações à sua conta de serviço do Kubernetes para se fazer passar pela conta de serviço Google criando uma associação de políticas da 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.com
  6. Adicione a anotação iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID à conta de serviço do Kubernetes, usando o endereço de email da conta de serviço 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 da aplicação de exemplo

gcloud

  1. No Cloud Shell, use o seguinte comando para clonar o repositório com o código da aplicação gke-alloydb-app de exemplo do GitHub:

     git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/go
  2. Crie um repositório no Artifact Registry para imagens Docker:

    gcloud artifacts repositories create REPOSITORY_ID --location REGION --repository-format=docker --project PROJECT_ID

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto.
    • REPOSITORY_ID: o nome do seu repositório, como gke-alloydb-sample-app.
  3. Na caixa de diálogo Autorizar Cloud Shell, clique em Autorizar. Este pedido não é apresentado se tiver concluído este passo anteriormente.

  4. Para criar um contentor 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_ID

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto.
    • REPOSITORY_ID: o nome do seu repositório, como gke-alloydb-sample-app.
    • SAMPLE_APPLICATION: o nome da sua aplicação Web de exemplo, como gke-alloydb-app.

Crie um Secret do Kubernetes

Cria segredos do Kubernetes para a base de dados, o utilizador e a palavra-passe do utilizador a serem usados pela aplicação de exemplo. Os valores de cada segredo baseiam-se nos valores especificados no passo Estabeleça ligação à sua instância principal e crie uma base de dados e um utilizador do AlloyDB deste tutorial. Para mais informações, consulte o artigo Segredos.

gcloud

Use um Kubernetes SECRET, como o gke-alloydb-secret, para armazenar as informações de ligação:

kubectl create secret generic SECRET \
  --from-literal=database=DATABASE_NAME \
  --from-literal=username=USERNAME \
  --from-literal=password=DATABASE_PASSWORD

Implemente e execute o AlloyDB Proxy num padrão sidecar

Recomendamos que execute o AlloyDB Proxy num padrão sidecar como um contentor adicional que partilha um pod com a sua aplicação pelos seguintes motivos:

  • Impede que o seu tráfego SQL seja exposto localmente. O AlloyDB Proxy oferece encriptação nas ligações de saída, mas tem de limitar a exposição das ligações de entrada.
  • Evita um ponto único de falha. O acesso de cada aplicação à sua base de dados é independente das outras, o que a torna mais resiliente.
  • Limita o acesso ao AlloyDB Proxy, o que lhe permite usar autorizações de IAM por aplicação, em vez de expor a base de dados a todo o cluster.
  • Permite-lhe definir o âmbito dos pedidos de recursos com maior precisão. Uma vez que o AlloyDB Proxy consome recursos linearmente à utilização, este padrão permite-lhe definir e pedir recursos com maior precisão para corresponder às suas aplicações à medida que são dimensionadas.
  • Permite-lhe configurar a sua aplicação para estabelecer ligação através do 127.0.0.1 no DB_PORT que especificou na secção de comandos.

Depois de criar um cluster do GKE e criar uma imagem de contentor para a sua aplicação, implemente a aplicação em contentor no cluster do GKE.

gcloud

Neste tutorial, implementa a aplicação Web de recolha de votos de exemplo, gke-alloydb-app, que usa o AlloyDB como o arquivo de dados.

  1. Obtenha a ligação da instância INSTANCE_URI para a instância principal do AlloyDB à qual quer que o proxy do AlloyDB se ligue:

       gcloud alloydb instances describe INSTANCE_ID \
       --cluster=CLUSTER_ID \
       --region=REGION \
       --format="value(name)"

    Substitua o seguinte:

    • INSTANCE_ID: nome da instância, como alloydb-primary.
    • CLUSTER_ID: nome do cluster, como alloydb-cluster.

    A saída contém o INSTANCE_URI especificado no ficheiro de definição proxy_sidecar_deployment.yaml no passo 2.b desta secção.

  2. No editor da sua escolha, por exemplo, o nano, conclua os seguintes passos:

    1. Abra proxy_sidecar_deployment.yaml com o editor à sua escolha, por exemplo, nano:

      nano proxy_sidecar_deployment.yaml
    2. No 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_URI pelo caminho para a sua instância principal do AlloyDB do passo 1, como projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances/INSTANCE_ID.

    3. Prima Control+O, prima ENTER para guardar as alterações e prima Control+X para sair do editor.

  3. Para implementar a aplicação gke-alloydb-app, aplique o ficheiro de definição proxy_sidecar_deployment.yaml que criou no passo anterior:

    kubectl apply -f proxy_sidecar_deployment.yaml
  4. Verifique se o estado de ambos os contentores no pod é running:

    kubectl get pods

    Exemplo de saída:

     NAME                          READY   STATUS    RESTARTS   AGE
     gke-alloydb-8d59bb4cc-62xgh   2/2     Running   0          2m53s
    
  5. Para estabelecer ligação à aplicação gke-alloydb-app de exemplo, use um serviço, por exemplo, um balanceador de carga HTTP externo. No editor à sua escolha, siga estes passos:

    1. Abra service.yaml com o nano, por exemplo:

      nano service.yaml
    2. No 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: 8080
      

      Substitua SAMPLE_APPLICATION pelo nome da sua aplicação Web de exemplo, como gke-alloydb-app.

    3. Prima Control+O, prima ENTER para guardar as alterações e prima Control+X para sair do editor.

  6. Para implementar a aplicação gke-alloydb-app do serviço, aplique o ficheiro service.yaml:

     kubectl apply -f service.yaml
  7. Para obter os detalhes do serviço, incluindo o endereço IP externo do serviço, use o seguinte comando:

    kubectl get service

    Exemplo de saída:

    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        85m
    
  8. Use o valor do IP externo do passo anterior para aceder à aplicação de exemplo no seguinte URL:

    http://EXTERNAL-IP
    

Ficheiros de configuração de exemplo

proxy_sidecar_deployment.yaml

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <YOUR-DEPLOYMENT-NAME>
spec:
  selector:
    matchLabels:
      app: <YOUR-APPLICATION-NAME>
  template:
    metadata:
      labels:
        app: <YOUR-APPLICATION-NAME>
    spec:
      serviceAccountName: <YOUR-KSA-NAME>
      containers:
      # Your application container goes here.
      - name: <YOUR-APPLICATION-NAME>
        image: <YOUR-APPLICATION-IMAGE-URL>
        env:
        - name: DB_HOST
          # The port value here (5432) should match the --port flag below.
          value: "localhost:5342"
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: <YOUR-DB-SECRET>
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: <YOUR-DB-SECRET>
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: <YOUR-DB-SECRET>
              key: database
      # The Auth Proxy sidecar goes here.
      - name: alloydb-auth-proxy
        # Make sure you have automation that upgrades this version regularly.
        # A new version of the Proxy is released monthly with bug fixes,
        # security updates, and new features.
        image: gcr.io/alloydb-connectors/alloydb-auth-proxy:1.10.1
        args:
          # If you're connecting over public IP, enable this flag.
          # - "--public-ip"

          # If you're connecting with PSC, enable this flag:
          # - "--psc"

          # If you're using auto IAM authentication, enable this flag:
          # - "--auto-iam-authn"

          # Enable structured logging with Google's LogEntry format:
          - "--structured-logs"

          # Listen on localhost:5432 by default.
          - "--port=5432"
          # Specify your instance URI, e.g.,
          # "projects/myproject/locations/us-central1/clusters/mycluster/instances/myinstance"
          - "<INSTANCE-URI>"

        securityContext:
          # The default AlloyDB Auth Proxy image runs as the "nonroot" user and
          # group (uid: 65532) by default.
          runAsNonRoot: true
        # You should use resource requests/limits as a best practice to prevent
        # pods from consuming too many resources and affecting the execution of
        # other pods. You should adjust the following values based on what your
        # application needs. For details, see
        # https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
        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"

service.yaml

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: Service
metadata:
  name: <YOUR-SERVICE-NAME>
spec:
  type: LoadBalancer
  selector:
    app: <YOUR-APPLICATION-NAME>
  ports:
  - port: 80
    targetPort: 8080

service-account.yaml

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: <YOUR-KSA-NAME> # TODO(developer): replace this value

Limpar

Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Elimine o projeto

A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.

Para eliminar o projeto:

  1. Na Google Cloud consola, aceda à página Gerir recursos.

    Faça a gestão dos recursos

  2. Na lista de projetos, selecione o projeto que quer eliminar e, de seguida, clique em Eliminar.

  3. Na caixa de diálogo, introduza o nome do projeto PROJECT_ID e, de seguida, clique em Encerrar para eliminar o projeto.

O que se segue?