Conéctate desde Google Kubernetes Engine (GKE) a AlloyDB para PostgreSQL

Para conectar de forma segura una aplicación alojada en contenedores en un clúster de Autopilot de Google Kubernetes Engine a una instancia de AlloyDB para PostgreSQL, puedes implementar el proxy de autenticación de AlloyDB como un contenedor sidecar a través de una conexión de red de IP privada.

AlloyDB es un servicio de base de datos completamente administrado y compatible con PostgreSQL en Google Cloud, y Google Kubernetes Engine te ayuda a implementar, escalar y administrar automáticamente las cargas de trabajo de Kubernetes.

Objetivos

  • Compilar una imagen de Docker para AlloyDB
  • Ejecutar una aplicación en Google Kubernetes Engine
  • Conectarse a una instancia de AlloyDB con el proxy de autenticación de AlloyDB y una IP interna

Costos

En este instructivo, se usan componentes facturables de Google Cloud, incluidos los siguientes:

  • AlloyDB
  • Google Kubernetes Engine
  • Artifact Registry

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

Antes de comenzar

Console

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  3. Verifica que tengas los permisos necesarios para completar este instructivo.
  4. Habilita las API de Cloud necesarias para crear AlloyDB y conectarse a él.

    Habilitar las API

    1. En el paso Confirmar proyecto, haz clic en Siguiente para confirmar el nombre del proyecto en el que realizarás cambios.

    2. En el paso Habilitar APIs, haz clic en Habilitar para habilitar lo siguiente:

      • API de AlloyDB
      • API de Artifact Registry
      • API de Compute Engine
      • API de Cloud Resource Manager
      • API de Cloud Build
      • API de Kubernetes Engine
      • API de Service Networking

gcloud

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  3. Verifica que tengas los permisos necesarios para completar este instructivo.

Para los fines de este instructivo, usa la aplicación web de muestra para recopilar votos llamada gke-alloydb-app.

Roles obligatorios

Para obtener los permisos que necesitas para completar las tareas de este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Inicia Cloud Shell

Cloud Shell es un entorno de shell que se usa para administrar recursos alojados en Google Cloud.

Cloud Shell ya viene instalado en las herramientas de línea de comandos de Google Cloud CLI y kubectl. gcloud CLI proporciona la interfaz de línea de comandos principal para Google Cloud. kubectl proporciona la interfaz de línea de comandos principal para ejecutar comandos en clústeres de Kubernetes.

Console

Para iniciar Cloud Shell, completa los siguientes pasos.

  1. Accede a la consola de Google Cloud .

    Google Cloud console

  2. Haz clic en Botón Activar Cloud Shell Activar Cloud Shell en la parte superior de la consola de Google Cloud .

  3. En el diálogo Autorizar Cloud Shell, haz clic en Autorizar.

    Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior en la consola. Usa este shell para ejecutar los comandos de gcloud y kubectl.

    1. Antes de ejecutar comandos, configura tu proyecto predeterminado en Google Cloud CLI con el siguiente comando:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID con el ID del proyecto.

gcloud

  1. Para iniciar Cloud Shell, completa los siguientes pasos.

  2. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  3. Para inicializar el entorno, configura tu proyecto predeterminado en Google Cloud CLI con el siguiente comando:

    gcloud config set project PROJECT_ID

    Reemplaza PROJECT_ID con el ID del proyecto.

  4. Habilita las API de Cloud necesarias para crear AlloyDB para PostgreSQL y conectarte a él.

    gcloud services enable alloydb.googleapis.com \
        compute.googleapis.com \
        cloudresourcemanager.googleapis.com \
        cloudbuild.googleapis.com \
        servicenetworking.googleapis.com \
        artifactregistry.googleapis.com \
        container.googleapis.com

Crea un clúster de AlloyDB y su instancia principal

Tu clúster de AlloyDB consta de una cantidad de nodos dentro de una nube privada virtual (VPC) de Google. Cuando creas un clúster, también configuras el acceso privado a servicios entre una de tus redes de VPC y la red de VPC administrada por Google que contiene tu clúster nuevo. Usa el acceso de IP interna para evitar la exposición de la base de datos a la Internet pública.

Para conectarte a un clúster de AlloyDB para PostgreSQL desde fuera de su red de VPC configurada, establece el acceso privado a servicios en la VPC para AlloyDB y usa la red de VPC predeterminada para ejecutar consultas desde una aplicación implementada en un clúster de GKE.

Console

  1. Ve a la página Clústeres.

    Ir a los clústeres

  2. En la sección Configura tu clúster, en el campo ID del clúster, ingresa un ID para tu clúster. Debe comenzar con una letra minúscula y puede contener letras minúsculas, números y guiones, como alloydb-cluster.

  3. En el campo Contraseña, ingresa la CLUSTER_PASSWORD que se usará para el usuario de base de datos postgres predeterminado mientras se crea el clúster.

  4. En el campo Versión de la base de datos, selecciona la versión principal de POSTGRES_VERSION para tu nuevo clúster de AlloyDB.

  5. Selecciona una REGION para tu clúster, como us-central1.

  6. En la sección Configura tu instancia principal, haz lo siguiente:

    1. En el campo ID de instancia, ingresa el INSTANCE_ID de tu instancia principal, como alloydb-primary.

    2. Selecciona una serie de máquinas, por ejemplo, N2.

    3. Selecciona un tipo de máquina y especifica la cantidad de unidades de procesamiento virtual NUM_CPU, como 2.

    4. Para asignar un rango de IP al intercambio de tráfico entre servicios, configura la conexión de acceso privado a servicios:

      1. En la lista Red, selecciona default.

      2. Si ya se reservó un rango de IP como default-ip-range, selecciónalo de la lista Rango de IP asignado.

      3. Si no se asigna ningún rango de IP, haz clic en Asignar rango de IP personalizado para asignar un nuevo IP_RANGE_NAME interno y configurar la conexión.

  7. Haga clic en Crear clúster.

Espera a que se cree la instancia de AlloyDB. Esto puede tomar varios minutos.

gcloud

  1. En Cloud Shell, verifica si el rango de direcciones IP (IPv4) sin usar ya está asignado al intercambio de tráfico entre servicios:

    gcloud services vpc-peerings list --network=default

    Omite el siguiente paso si el resultado es similar al siguiente:

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

    En este resultado, el valor de reservedPeeringRanges es default-ip-range, que puedes usar como IP_RANGE_NAME para crear una conexión privada en el paso 3.

  2. (Omite este paso cuando uses el valor predeterminado de reservedPeeringRanges) Para asignar direcciones IP sin usar en la VPC, usa el siguiente comando:

    gcloud compute addresses create IP_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --prefix-length=16 \
        --description="VPC private service access" \
        --network=default

    Reemplaza IP_RANGE_NAME por el nombre de las direcciones IP internas disponibles dentro de una subred de AlloyDB, como alloydb-gke-psa-01.

  3. Para configurar el acceso al servicio con el rango de IP asignado, ejecuta el siguiente comando:

    gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=IP_RANGE_NAME \
        --network=default
  4. Para implementar el clúster de AlloyDB, ejecuta el siguiente comando:

    gcloud alloydb clusters create CLUSTER_ID \
        --database-version=POSTGRES_VERSION \
        --password=CLUSTER_PASSWORD \
        --network=default \
        --region=REGION \
        --project=PROJECT_ID

    Reemplaza lo siguiente:

    • CLUSTER_ID: Es el ID del clúster que estás creando. Debe comenzar con una letra minúscula y puede contener letras minúsculas, números y guiones, como alloydb-cluster.
    • VERSION: Es la versión principal de PostgreSQL con la que deseas que sean compatibles los servidores de bases de datos del clúster. Elige una de estas opciones:

      • 14: para compatibilidad con PostgreSQL 14

      • 15: para compatibilidad con PostgreSQL 15

      • 16: para compatibilidad con PostgreSQL 16

      • 17: para compatibilidad con PostgreSQL 17

      • 18: para la compatibilidad con PostgreSQL 18, que es la versión predeterminada admitida de PostgreSQL

    • CLUSTER_PASSWORD: Es la contraseña que se usará para el usuario postgres predeterminado.

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud en el que deseas colocar el clúster.

    • REGION: Es el nombre de la región en la que se crea el clúster de AlloyDB, como us-central1.

  5. Para implementar la instancia principal de AlloyDB, ejecuta lo siguiente:

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

    Reemplaza lo siguiente:

    • INSTANCE_ID por el nombre de la instancia de AlloyDB que elijas, como alloydb-primary.
    • CLUSTER_ID por el nombre del clúster de AlloyDB, como alloydb-cluster.
    • NUM_CPU por la cantidad de unidades de procesamiento virtuales, como 2.
    • PROJECT_ID por el ID de tu proyecto de Google Cloud .
    • REGION por el nombre de la región en la que se crea el clúster de AlloyDB, como us-central1.

    Espera a que se cree la instancia de AlloyDB. Esto puede tomar varios minutos.

Conéctate a tu instancia principal y crea una base de datos y un usuario de AlloyDB

Para crear una base de datos y un usuario de base de datos en tu instancia principal, completa los siguientes pasos:

Console

  1. Si no estás en la página de descripción general del clúster que acabas de crear, ve a la página Clústeres en la consola de Google Cloud .

    Ir a los clústeres

  2. Para mostrar la página Descripción general del clúster, haz clic en el nombre del clúster CLUSTER_ID.

  3. En el menú de navegación, haz clic en AlloyDB Studio.

  4. En la página Accede a AlloyDB Studio, haz lo siguiente:

    1. En la lista Base de datos, selecciona postgres.

    2. En la lista Usuario, selecciona postgres.

    3. En el campo Contraseña, ingresa la CLUSTER_PASSWORD que creaste en Crea un clúster de AlloyDB y su instancia principal.

    4. Haz clic en Autenticar. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.

  5. En la pestaña Editor 1, completa lo siguiente:

    1. Crea una base de datos de AlloyDB:

      CREATE DATABASE DATABASE_NAME;
      

      Reemplaza DATABASE_NAME por el nombre que elijas, como tutorial_db.

    2. Haz clic en Ejecutar. Espera a que aparezca el mensaje Statement executed successfully en el panel Resultados.

    3. Haz clic en Borrar.

    4. Crea un usuario y una contraseña para la base de datos de AlloyDB:

      CREATE USER USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
      

      Reemplaza lo siguiente:

      • USERNAME: Es el nombre del usuario de AlloyDB, como tutorial_user.

      • DATABASE_PASSWORD: Es la contraseña de tu base de datos de AlloyDB, como tutorial.

    5. Haz clic en Ejecutar. Espera a que aparezca el mensaje Statement executed successfully en el panel Resultados.

  6. En el panel Explorador de AlloyDB Studio, haz clic en Cambiar de usuario o base de datos.

  7. En la página Accede a AlloyDB Studio, haz lo siguiente:

    1. En la lista Base de datos, selecciona DATABASE_NAME, como tutorial_db.

    2. En la lista Usuario, selecciona postgres.

    3. En el campo Contraseña, ingresa la CLUSTER_PASSWORD que creaste en Crea un clúster de AlloyDB y su instancia principal.

    4. Haz clic en Autenticar. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.

  8. En la pestaña Editor 1, completa lo siguiente:

    1. Otorga todos los permisos al usuario de la base de datos de AlloyDB:

      GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";
      
    2. Haz clic en Ejecutar. Espera a que aparezca el mensaje Statement executed successfully en el panel Resultados.

    3. Haz clic en Borrar.

    4. Otorga permisos al usuario de la base de datos de AlloyDB en el esquema público:

      GRANT CREATE ON SCHEMA public TO "USERNAME";
      
    5. Haz clic en Ejecutar. Espera a que aparezca el mensaje Statement executed successfully en el panel Resultados.

  9. Toma nota del nombre de la base de datos, el nombre de usuario y la contraseña. Usarás esta información en Crea un Secret de Kubernetes.

gcloud

  1. Para crear un usuario de la base de datos de AlloyDB, ejecuta el siguiente comando en Cloud Shell:

    gcloud alloydb users create USERNAME \
        --cluster=CLUSTER_ID \
        --region=REGION \
        --password=DATABASE_PASSWORD

    Reemplaza lo siguiente:

    • USERNAME: Es el nombre del usuario de AlloyDB, como tutorial_user.
    • CLUSTER_ID: Es el ID del clúster, como alloydb-cluster.
    • REGION: Es la región en la que se encuentra el clúster, como us-central1.
    • DATABASE_PASSWORD: Es la contraseña de tu base de datos de AlloyDB, como tutorial.
  2. Para crear una base de datos y otorgar permisos, debes conectarte al clúster y ejecutar comandos de SQL. En Cloud Shell, usa el cliente psql para conectarte a tu instancia.

  3. Una vez que te conectes a tu instancia como el usuario postgres, crea la base de datos:

    CREATE DATABASE DATABASE_NAME;
    

    Reemplaza DATABASE_NAME por el nombre que elijas, como tutorial_db.

  4. Otorga todos los permisos al usuario de la base de datos de AlloyDB en la base de datos nueva:

    GRANT ALL PRIVILEGES ON DATABASE "DATABASE_NAME" to "USERNAME";
    
  5. Conéctate a la base de datos nueva y otorga permisos en el esquema public:

    \c DATABASE_NAME
    GRANT CREATE ON SCHEMA public TO "USERNAME";
    
  6. Toma nota del nombre de la base de datos, el nombre de usuario y la contraseña. Usarás esta información en Crea un Secret de Kubernetes.

Crea un clúster de GKE Autopilot

Un clúster contiene al menos una máquina de plano de control del clúster y varias máquinas trabajadoras llamadas nodos. Los nodos son instancias de máquina virtual (VM) de Compute Engine que ejecutan los procesos de Kubernetes necesarios para que sean parte del clúster. Las aplicaciones se implementan en los clústeres y, luego, se ejecutan en los nodos.

Console

  1. En la consola de Google Cloud , accede a la página de clústeres de Kubernetes.

    Acceder a los clústeres de Kubernetes

  2. Haz clic en Crear.

  3. Especifica GKE_CLUSTER_ID para tu clúster de Autopilot en el campo Nombre de la página Conceptos básicos del clúster, como ap-cluster.

  4. En el campo Región, selecciona REGION, como us-central1.

  5. Haz clic en Crear.

    Espera a que se cree el clúster de GKE. Esto puede tomar varios minutos.

gcloud

Crea un clúster de Autopilot:

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

Reemplaza lo siguiente:

  • GKE_CLUSTER_ID: Es el nombre del clúster de Autopilot, como ap-cluster.
  • REGION: Es el nombre de la región en la que se implementa el clúster de GKE, como us-central1.

Espera a que se cree el clúster de GKE. Esto puede tomar varios minutos.

Conéctate a AlloyDB con el proxy de autenticación de AlloyDB

Usa el proxy de autenticación de AlloyDB para conectarte a AlloyDB. El proxy de autenticación de AlloyDB proporciona una encriptación sólida y autenticación con Identity and Access Management (IAM), lo que puede ayudar a mantener tu base de datos segura.

Cuando te conectas con el proxy de autenticación de AlloyDB, se agrega a tu Pod con el patrón de contenedor sidecar. El contenedor del proxy de autenticación de AlloyDB está en el mismo Pod que tu aplicación, lo que permite que la aplicación se conecte al proxy de autenticación de AlloyDB con localhost, lo que aumenta la seguridad y el rendimiento.

Otorga acceso a Artifact Registry a la cuenta de servicio predeterminada de Compute Engine

Otorga el rol de lector de Artifact Registry (roles/artifactregistry.reader) a la cuenta de servicio predeterminada de Compute Engine para que tus nodos de Google Kubernetes Engine puedan extraer imágenes de contenedor de Artifact Registry.

Console

  1. En la consola de Google Cloud , dirígete a la página IAM.

    Ir a IAM

  2. En la página Permisos del proyecto "PROJECT_ID", busca la fila que contiene la cuenta de servicio de procesamiento predeterminada PROJECT_NUMBER-compute@ y haz clic en Editar principal en esa fila.

    Para obtener el PROJECT_NUMBER, que es un identificador único generado automáticamente para tu proyecto, haz lo siguiente:

    1. Ve a la página Panel en la consola de Google Cloud .

      Ir al panel

    2. Haz clic en la lista desplegable Seleccionar desde en la parte superior de la página. En la ventana Seleccionar una opción que aparece, elige tu proyecto.

    El PROJECT_NUMBER se muestra en la tarjeta de Información del proyecto del panel del proyecto.

  3. Haz clic en Agregar otro rol.

  4. Para otorgar el rol roles/artifactregistry.reader, haz clic en Selecciona un rol, elige Artifact Registry en Por producto o servicio y, luego, Artifact Registry Reader en Roles.

  5. Haz clic en Guardar. Se otorga el rol a la principal.

gcloud

Otorga el rol de lector de Artifact Registry (roles/artifactregistry.reader) en el proyecto a la cuenta de servicio predeterminada de Compute Engine:

PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:$PROJECT_NUMBER-compute@" \
    --role="roles/artifactregistry.reader" \
    --condition=None

Reemplaza PROJECT_ID con el ID del proyecto.

Configura la federación de identidades para cargas de trabajo para GKE en la aplicación de ejemplo

Configura Google Kubernetes Engine para autenticar el proxy de autenticación de AlloyDB con la Workload Identity Federation for GKE. Con Workload Identity Federation for GKE, creas una ServiceAccount de Kubernetes para tu aplicación en el clúster de Google Kubernetes Engine y otorgas roles de IAM a esa ServiceAccount de Kubernetes. Crea una ServiceAccount de Kubernetes que sea única para cada aplicación, de modo que puedas limitar los permisos de forma individual.

Console

  1. Para iniciar Cloud Shell, completa los siguientes pasos.

  2. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  3. En Cloud Shell, obtén las credenciales para tu clúster:

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

    Este comando configura kubectl para usar el clúster de GKE que creaste.

  4. En el editor que prefieras, completa los siguientes pasos:

    1. Abre service-account.yaml con nano, por ejemplo:

      nano service-account.yaml
    2. En el editor, pega el siguiente contenido:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: KUBERNETES_SERVICEACCOUNT
      

      Reemplaza KUBERNETES_SERVICEACCOUNT por el nombre de la ServiceAccount de Kubernetes, como alloydb-sa.

    3. Presiona Control + O, luego INTRO para guardar los cambios y, por último, Control + X para salir del editor.

  5. Crea una ServiceAccount de Kubernetes para tu aplicación de ejemplo:

    kubectl apply -f service-account.yaml
  6. Para otorgar roles de IAM a la ServiceAccount de Kubernetes, completa los siguientes pasos en la consola de Google Cloud :

    1. En la consola de Google Cloud , dirígete a la página IAM.

      Ir a IAM

    2. Elige tu proyecto.

    3. Haz clic en Otorgar acceso.

    4. En el campo Principales nuevas, ingresa lo siguiente:

      principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID./subject/ns/default/sa/KUBERNETES_SERVICEACCOUNT

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: Es el número de tu proyecto.
      • PROJECT_ID: Es el ID del proyecto.
      • KUBERNETES_SERVICEACCOUNT: Es el nombre de la ServiceAccount de Kubernetes, como alloydb-sa.
    5. Para otorgar el rol roles/alloydb.client, en la lista Selecciona un rol, elige AlloyDB para PostgreSQL > Cliente de AlloyDB.

    6. Haz clic en Agregar otro rol.

    7. Para otorgar el rol roles/serviceusage.serviceUsageConsumer, en la lista Selecciona un rol, elige Service Usage > Consumidor de Service Usage.

    8. Haz clic en Guardar.

gcloud

  1. En la consola de Google Cloud , abre Cloud Shell.

    Abra Cloud Shell

  2. En Cloud Shell, obtén las credenciales para tu clúster:

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

    Este comando configura kubectl para usar el clúster de GKE que creaste.

  3. En el editor que prefieras, completa los siguientes pasos:

    1. Abre service-account.yaml con nano, por ejemplo:

      nano service-account.yaml
    2. En el editor, pega el siguiente contenido:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: KUBERNETES_SERVICEACCOUNT
      

      Reemplaza KUBERNETES_SERVICEACCOUNT por el nombre de la ServiceAccount de Kubernetes, como alloydb-sa.

    3. Presiona Control + O, luego INTRO para guardar los cambios y, por último, Control + X para salir del editor.

  4. Crea una ServiceAccount de Kubernetes para tu aplicación de ejemplo:

    kubectl apply -f service-account.yaml
  5. Otorga los roles de cliente de AlloyDB (roles/alloydb.client) y consumidor de Service Usage (roles/serviceusage.serviceUsageConsumer) en el proyecto a la ServiceAccount de Kubernetes:

    PROJECT_ID="PROJECT_ID"
    KUBERNETES_SERVICEACCOUNT="KUBERNETES_SERVICEACCOUNT"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID./subject/ns/default/sa/$KUBERNETES_SERVICEACCOUNT" \
        --role="roles/alloydb.client" \
        --condition=None
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID./subject/ns/default/sa/$KUBERNETES_SERVICEACCOUNT" \
        --role="roles/serviceusage.serviceUsageConsumer" \
        --condition=None

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto.
    • KUBERNETES_SERVICEACCOUNT: Es el nombre de la ServiceAccount de Kubernetes, como alloydb-sa.

Propaga Artifact Registry con una imagen de la aplicación de ejemplo

Para compilar una imagen de contenedor de la aplicación de ejemplo y enviarla a un repositorio, completa los siguientes pasos.

Console

  1. En la consola de Google Cloud , ve a la página Artifact Registry.

    Ir a Artifact Registry

  2. Para crear un repositorio, haz clic en .

  3. En el campo Nombre, ingresa REPOSITORY_ID, como gke-alloydb-sample-app.

  4. En la sección Formato, selecciona Docker.

  5. En la sección Tipo de ubicación, selecciona Región y elige REGION, como us-central1.

  6. Haz clic en Crear.

  7. Para compilar la imagen de la aplicación de ejemplo, inicia Cloud Shell y completa los siguientes pasos.

  8. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

    1. En Cloud Shell, clona el repositorio con el código de la aplicación de gke-alloydb-app de ejemplo de GitHub:

        git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/go
    2. En el diálogo Autorizar Cloud Shell, haz clic en Autorizar. Este mensaje no aparece si ya realizaste este paso.

    3. Para compilar el contenedor de Docker y publicarlo en Artifact Registry, ejecuta el siguiente comando:

        gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_ID

      Reemplaza lo siguiente:

      • PROJECT_ID: el ID de tu proyecto.
      • REPOSITORY_ID: Es el nombre de tu repositorio, como gke-alloydb-sample-app.
      • SAMPLE_APPLICATION: Es el nombre de tu aplicación web de ejemplo, como gke-alloydb-app.

gcloud

  1. En Cloud Shell, usa el siguiente comando para clonar el repositorio con el código de la aplicación de gke-alloydb-app de ejemplo de GitHub:

     git clone https://github.com/GoogleCloudPlatform/alloydb-auth-proxy && cd alloydb-auth-proxy/examples/go
  2. Crea un repositorio en Artifact Registry para las imágenes de Docker:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • REPOSITORY_ID: Es el nombre de tu repositorio, como gke-alloydb-sample-app.
  3. En el diálogo Autorizar Cloud Shell, haz clic en Autorizar. Este mensaje no aparece si ya realizaste este paso.

  4. Para compilar un contenedor de Docker y publicarlo en Artifact Registry, usa el siguiente comando:

     gcloud builds submit --tag  REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/SAMPLE_APPLICATION --project PROJECT_ID

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto.
    • REPOSITORY_ID: Es el nombre de tu repositorio, como gke-alloydb-sample-app.
    • SAMPLE_APPLICATION: Es el nombre de tu aplicación web de ejemplo, como gke-alloydb-app.

Crea un Secret de Kubernetes

Crea Secrets de Kubernetes para la base de datos, el usuario y la contraseña de usuario que usará la aplicación de ejemplo. Los valores de cada secreto se basan en los valores especificados en el paso Conéctate a tu instancia principal y crea una base de datos y un usuario de AlloyDB de este instructivo. Para obtener más información, consulta Secretos.

Console

En la sesión de Cloud Shell abierta, usa un SECRET de Kubernetes, como gke-alloydb-secret, para almacenar la información de conexión:

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

gcloud

Usa un SECRET de Kubernetes, como gke-alloydb-secret, para almacenar la información de conexión:

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

Implementa y ejecuta el proxy de autenticación de AlloyDB en un patrón de archivo adicional

Ejecuta el proxy de autenticación en un patrón sidecar como un contenedor adicional que comparte un Pod con tu aplicación por los siguientes motivos:

  • Evita que el tráfico de SQL se exponga de manera local. El proxy de autenticación proporciona encriptación en conexiones salientes, pero necesitas limitar la exposición para las conexiones entrantes.
  • Evita un punto único de fallo. El acceso de cada aplicación a la base de datos es independiente de las demás, por lo que es más resistente.
  • Limita el acceso al proxy de autenticación, lo que te permite usar permisos de IAM por aplicación, en lugar de exponer la base de datos a todo el clúster.
  • Te permite definir el alcance de las solicitudes de recursos con mayor precisión. Debido a que el proxy de autenticación consume recursos de forma lineal según el uso, este patrón te permite definir el alcance y solicitar recursos con mayor precisión para que se ajusten a las aplicaciones a medida que se realiza el escalamiento.
  • Te permite configurar la aplicación para que se conecte con 127.0.0.1 en el DB_PORT que especificaste en la sección de comandos.

Después de crear un clúster de GKE y una imagen de contenedor para tu aplicación, implementa la aplicación alojada en contenedores en el clúster de GKE.

Console

En este instructivo, implementarás la aplicación web de muestra para recopilar votos, gke-alloydb-app, que usa AlloyDB como almacén de datos.

  1. Obtén el URI de conexión (INSTANCE_URI) para la instancia principal de AlloyDB:

    1. En la consola de Google Cloud , ve a la página Clústeres.

      Ir a los clústeres

    2. Para mostrar la página Descripción general del clúster, haz clic en su nombre en la columna Nombre del recurso.

    3. En la sección Instancias en tu clúster, busca tu instancia principal y ve a la sección Conectividad (o haz clic en Ver configuración de conectividad).

    4. En el campo URI de conexión, haz clic en el botón Copiar al portapapeles .

    Especifica este INSTANCE_URI en el archivo de definición proxy_sidecar_deployment.yaml en el paso 2.b de esta sección.

  2. En Cloud Shell, completa los siguientes pasos:

    1. Abre proxy_sidecar_deployment.yaml con el editor que prefieras, por ejemplo, nano:

      nano proxy_sidecar_deployment.yaml
    2. En el editor, pega el siguiente contenido:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: gke-alloydb
      spec:
        selector:
          matchLabels:
            app: SAMPLE_APPLICATION
        template:
          metadata:
            labels:
              app: SAMPLE_APPLICATION
          spec:
            serviceAccountName: KUBERNETES_SERVICEACCOUNT
            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.17.2
              command:
                - "/alloydb-auth-proxy"
                #AlloyDB instance name as parameter for the AlloyDB proxy
                - "INSTANCE_URI"
              securityContext:
                runAsNonRoot: true
              resources:
                requests:
                  memory: "2Gi"
                  cpu:    "1"
      

      Reemplaza KUBERNETES_SERVICEACCOUNT por el nombre de tu ServiceAccount de Kubernetes y reemplaza INSTANCE_URI por la ruta que copiaste en el paso 1.

    3. Presiona Control + O, luego INTRO para guardar los cambios y, por último, Control + X para salir del editor.

  3. Para implementar la aplicación gke-alloydb-app, aplica el archivo de definición:

    kubectl apply -f proxy_sidecar_deployment.yaml
  4. Para verificar que la aplicación se esté ejecutando, ve a la página Cargas de trabajo en la consola de Google Cloud :

    Ir a Cargas de trabajo

    Verifica que el estado de la implementación de gke-alloydb sea OK.

  5. Para conectarte a la aplicación de ejemplo con un balanceador de cargas externo, completa los siguientes pasos en tu Cloud Shell abierta:

    1. Abre service.yaml:

      nano service.yaml
    2. Pega el siguiente contenido:

      apiVersion: v1
      kind: Service
      metadata:
        name: SAMPLE_APPLICATION
      spec:
        type: LoadBalancer
        selector:
          app: SAMPLE_APPLICATION
        ports:
        - port: 80
          targetPort: 8080
      

      Reemplaza SAMPLE_APPLICATION por el nombre de tu aplicación, como gke-alloydb-app.

    3. Guarda y sal del editor y, luego, aplica el servicio:

      kubectl apply -f service.yaml
  6. Para obtener la dirección IP externa de tu aplicación, ve a la página Ingress y Service en la consola de Google Cloud :

    Ir a Ingress y Service

  7. Usa el valor de la columna Extremos externos para acceder a la aplicación en la siguiente URL:

    http://EXTERNAL_IP

gcloud

En este instructivo, implementarás la aplicación web de muestra para recopilar votos, gke-alloydb-app, que usa AlloyDB como almacén de datos.

  1. Obtén la conexión de la instancia INSTANCE_URI para la instancia principal de AlloyDB a la que deseas que se conecte el proxy de autenticación:

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

    Reemplaza lo siguiente:

    • INSTANCE_ID: Es el nombre de la instancia, como alloydb-primary.
    • CLUSTER_ID: Es el nombre del clúster, como alloydb-cluster.

    El resultado contiene el INSTANCE_URI que especificas en el archivo de definición proxy_sidecar_deployment.yaml en el paso 2.b de esta sección.

  2. En el editor que prefieras, por ejemplo, nano, completa los siguientes pasos:

    1. Abre proxy_sidecar_deployment.yaml con el editor que prefieras, por ejemplo, nano:

      nano proxy_sidecar_deployment.yaml
    2. En el editor, pega el siguiente contenido:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: gke-alloydb
      spec:
        selector:
          matchLabels:
            app: SAMPLE_APPLICATION
        template:
          metadata:
            labels:
              app: SAMPLE_APPLICATION
          spec:
            serviceAccountName: KUBERNETES_SERVICEACCOUNT
            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.17.2
              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"
      

      Reemplaza KUBERNETES_SERVICEACCOUNT por el nombre de tu ServiceAccount de Kubernetes y reemplaza INSTANCE_URI por la ruta de acceso a tu instancia principal de AlloyDB del paso 1, como projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID/instances/INSTANCE_ID.

    3. Presiona Control + O, luego INTRO para guardar los cambios y, por último, Control + X para salir del editor.

  3. Para implementar la aplicación gke-alloydb-app, aplica el archivo de definición proxy_sidecar_deployment.yaml que creaste en el paso anterior:

    kubectl apply -f proxy_sidecar_deployment.yaml
  4. Verifica que el estado de ambos contenedores en el Pod sea running:

    kubectl get pods

    Resultado de muestra:

     NAME                          READY   STATUS    RESTARTS   AGE
     gke-alloydb-8d59bb4cc-62xgh   2/2     Running   0          2m53s
    
  5. Para conectarte a la aplicación de muestra de gke-alloydb-app, usa un servicio, por ejemplo, un balanceador de cargas de HTTP externo. En el editor que prefieras, sigue estos pasos:

    1. Abre service.yaml con nano, por ejemplo:

      nano service.yaml
    2. En el editor nano, pega el siguiente contenido:

      apiVersion: v1
      kind: Service
      metadata:
        name: SAMPLE_APPLICATION
      spec:
        type: LoadBalancer
        selector:
          app: SAMPLE_APPLICATION
        ports:
        - port: 80
          targetPort: 8080
      

      Reemplaza SAMPLE_APPLICATION por el nombre de tu aplicación web de ejemplo, como gke-alloydb-app.

    3. Presiona Control + O, luego INTRO para guardar los cambios y, por último, Control + X para salir del editor.

  6. Para implementar la aplicación del servicio gke-alloydb-app, aplica el archivo service.yaml:

     kubectl apply -f service.yaml
  7. Para obtener los detalles del Service, incluida su dirección IP externa, usa el siguiente comando:

    kubectl get service

    Resultado de muestra:

    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. Usa el valor de la IP externa del paso anterior para acceder a la aplicación de ejemplo en la siguiente URL:

    http://EXTERNAL-IP
    

Archivos de configuración de muestra

proxy_sidecar_deployment.yaml

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:5432"
        - 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

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

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

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Administrar recursos

  2. En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.

  3. En el diálogo, escribe tu PROJECT_ID y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?