Conéctate a una instancia privada de AlloyDB desde una aplicación que se ejecuta en GKE Autopilot

1. Descripción general

En este lab, implementarás un microservicio de dos niveles con un Pod que se ejecuta en GKE Autopilot y lo conectarás a una instancia privada de la base de datos de AlloyDB. La aplicación de atención al cliente forma parte del sistema de Cymbal Eats y proporciona funciones para administrar a los usuarios registrados. La aplicación de atención al cliente es un microservicio basado en Java que usa el framework de Quarkus.

e8a5140b09521b7a.png

AlloyDB admite la conectividad de red a través de direcciones IP internas y privadas configuradas para el acceso privado a servicios.

El acceso a servicios privados se implementa como una conexión de intercambio de tráfico de VPC entre tu red de VPC y la red de VPC de Google Cloud subyacente en la que residen tus recursos de AlloyDB (clústeres e instancias). La conexión privada permite que los recursos de tu red de VPC se comuniquen con los recursos de AlloyDB a los que acceden exclusivamente a través de direcciones IP internas. Los recursos de tu red de VPC no necesitan acceso a Internet ni direcciones IP externas para llegar a los recursos de AlloyDB.

44662d7a086358de.png

¿Qué es GKE Autopilot?

GKE Autopilot es un modo de operación en GKE en el que Google administra la configuración de tu clúster, incluidos los nodos, el escalamiento, la seguridad y otros parámetros de configuración ya establecidos. Los clústeres de Autopilot están optimizados para ejecutar la mayoría de las cargas de trabajo de producción y aprovisionar recursos de procesamiento según tus manifiestos de Kubernetes. La configuración optimizada sigue las prácticas recomendadas y las recomendaciones de GKE para la configuración de clústeres, cargas de trabajo, escalabilidad y seguridad. Para obtener una lista de los parámetros de configuración integrados, consulta la tabla de comparación entre Autopilot y Standard.

¿Qué es AlloyDB?

Un servicio de base de datos completamente administrado y compatible con PostgreSQL para tus cargas de trabajo de bases de datos empresariales más exigentes. AlloyDB combina lo mejor de Google con uno de los motores de base de datos de código abierto más populares, PostgreSQL, para un rendimiento, escalamiento y disponibilidad superiores.

Qué aprenderás

En este lab, aprenderás a realizar las siguientes tareas:

  • Crea una instancia privada de la base de datos de AlloyDB
  • Implementa una aplicación en un clúster de GKE Autopilot que se conecta a una instancia de AlloyDB

Requisitos previos

  • Para este lab, se da por sentado que el usuario tiene conocimientos previos sobre los entornos de shell y la consola de Cloud.
  • Tener experiencia previa con GKE y AlloyDB es útil, pero no es un requisito.

2. Configuración y requisitos

Configuración del proyecto de Cloud

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (suele identificarse como PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usará el mismo durante todo el proyecto.
  • Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Configuración del entorno

Para activar Cloud Shell, haz clic en el ícono que se encuentra a la derecha de la barra de búsqueda.

eb0157a992f16fa3.png

Clona el repositorio y navega al directorio. Copia y pega el siguiente comando en la terminal y presiona Intro:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

Ejecuta gke-lab-setup.sh para implementar las dependencias necesarias.

Se crearán los siguientes recursos:

  • Clúster e instancia de AlloyDB
  • Artifact Registry para almacenar imágenes de contenedores para Cloud Run Job y Atención al cliente
  • Conector de acceso a VPC para que el trabajo de Cloud Run se comunique con la base de datos de AlloyDB
  • Trabajo de Cloud Run para crear una base de datos de AlloyDB
  • Clúster de GKE Autopilot
./gke-lab-setup.sh

Si se te solicita autorización, haz clic en "Autorizar" para continuar.

6356559df3eccdda.png

La configuración tardará alrededor de 10 minutos. Revisa la secuencia de comandos de configuración que se usa para crear las dependencias necesarias.

gke-lab-setup.sh

Espera a que finalice la secuencia de comandos y veas el siguiente resultado antes de ejecutar los próximos pasos.

Job [db-job] has successfully been created.

To execute this job, use:
gcloud beta run jobs execute db-job
OK Creating execution... Done.               
  OK Provisioning resources...
Done.
Execution [db-job-k94ps] has successfully started running.

3. Implementación de la aplicación

Revisa el clúster de AlloyDB

Ejecuta el siguiente comando para revisar la instancia de AlloyDB creada:

gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1

Resultado de muestra:

createTime: '2023-01-06T14:40:07.213288293Z'
instanceType: PRIMARY
ipAddress: 10.77.176.2
machineConfig:
  cpuCount: 2
name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance
nodes:
- zoneId: us-central1-f
queryInsightsConfig:
  queryPlansPerMinute: 5
  queryStringLength: 1024
  recordApplicationTags: true
  recordClientAddress: true
reconciling: false
state: READY
uid: df90d57d-88df-49be-a626-6dfec0513e64
updateTime: '2023-01-06T14:49:40.907977843Z'
writableNode:
  zoneId: us-central1-b

Explora las funciones disponibles(Query Insight y Monitoring) en la consola.

3b12b0fa1367fb42.png

Revisa el clúster de GKE Autopilot

Establece las variables de entorno del proyecto:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

Como parte de la configuración inicial, el clúster se creó con el siguiente comando (no es necesario que ejecutes este comando):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

Ejecuta el comando para ver el clúster de GKE Autopilot creado:

gcloud container clusters list

Resultado de muestra:

e8882c44fa0bb631.png

Ejecuta el comando para almacenar las credenciales del clúster:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

Implementa una aplicación

A continuación, implementarás una aplicación de servicio al cliente.

La aplicación de atención al cliente es un microservicio basado en Java que usa el framework de Quarkus.

Navega a la carpeta cymbal-eats/customer-service y ejecuta los comandos para compilar y subir la imagen del contenedor:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

Abre Cloud Build en la consola para revisar los detalles de la compilación más reciente.

49fd65309967ae47.png

Establece la siguiente variable de entorno con el valor de la dirección IP privada de AlloyDB:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

Ejecuta los siguientes comandos para crear el objeto de secretos de Kubernetes que almacenará las credenciales de la base de datos que usará la aplicación de atención al cliente para conectarse a la base de datos:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

Ejecuta el comando para reemplazar CUSTOMER_SERVICE_IMAGE en el archivo deployment.yaml:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

Ejecuta el comando para implementar la aplicación:

kubectl apply -f customer-service-deployment.yaml

La aplicación tardará unos minutos en cambiar al estado RUNNING.

Ejecuta el comando para crear la IP externa que se usará en los pasos de la prueba:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

Ejecuta el comando para verificar los recursos creados:

kubectl get all

Resultado de muestra:

179a23bd33793924.png

4. Aplicación de prueba

Ejecuta los siguientes comandos para guardar la URL de atención al cliente.

kubectl get svc

Configura la siguiente variable de entorno con el valor de la IP externa del resultado anterior.

CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

Ejecuta los siguientes comandos para crear un nuevo registro de cliente:

curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'

Ejecuta el comando anterior varias veces para generar mensajes de registro que verás en el Explorador de registros más adelante.

Revisa los registros de clientes

Ejecuta los siguientes comandos para ver el registro del cliente creado.

curl $CUSTOMER_SERVICE_URL/customer | jq

Resultado de muestra:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-06T16:13:19.118744",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 3,
    "state": "CA",
    "updateDateTime": "2023-01-06T16:13:19.118896",
    "zip": "94043"
  }
]

Revisa los servicios y las cargas de trabajo de GKE

Abre Kubernetes Engine en la consola de Cloud y revisa las cargas de trabajo y los servicios creados.

e1217216e003a839.png

d5c97fb5950c4db.png

Registros de la aplicación

Abre el Explorador de registros y busca los registros que contengan el texto "Customer already exists".

543c5ed97819f540.png

5. ¡Felicitaciones!

¡Felicitaciones! Completaste el codelab.

Temas abordados:

  • Cómo crear una instancia privada de la base de datos de AlloyDB
  • Cómo implementar una aplicación en un clúster de GKE Autopilot que se conecta a una instancia de AlloyDB

Pasos siguientes:

Explora otros codelabs de Cymbal Eats:

Limpia

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.