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 ejecutará 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 es parte del sistema Cymbal Eats y proporciona funcionalidad para administrar usuarios registrados. La aplicación de Atención al cliente es un microservicio basado en Java que usa el framework Quarkus.

e8a5140b09521b7a.png

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

El acceso privado a servicios se implementa como una conexión de intercambio de tráfico de VPC entre tu red de VPC y la red de VPC subyacente de Google Cloud en la que residen tus recursos de AlloyDB (instancias y clústeres). La conexión privada permite que los recursos de tu red de VPC se comuniquen con los recursos de AlloyDB a los que acceden solo 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 preestablecidos. 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 en función de los manifiestos de Kubernetes. La configuración optimizada sigue las prácticas recomendadas de GKE para la configuración, escalabilidad y seguridad de los clústeres y las cargas de trabajo. Para obtener una lista de los parámetros de configuración integrados, consulta la tabla de comparación de 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 ofrecer un rendimiento, escalamiento y disponibilidad superiores.

Qué aprenderás

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

  • Crear instancia privada de base de datos de AlloyDB
  • Implementa una aplicación en el clúster de GKE Autopilot que se conecte a una instancia de AlloyDB

Requisitos previos

  • Para este lab, se da por sentado que el usuario tiene conocimientos previos sobre los entornos de la consola de Cloud y Cloud Shell.
  • La experiencia anterior de GKE y AlloyDB es útil, pero no obligatoria.

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 te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (por lo general, se identifica como PROJECT_ID). Si no te gusta el ID generado, puedes generar otro aleatorio. También puedes probar el tuyo propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá mientras dure el proyecto.
  • Para tu información, 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 te facture 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, 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

Para implementar las dependencias necesarias, ejecuta gke-lab-setup.sh.

Se crearán los siguientes recursos:

  • Instancia y clúster de AlloyDB
  • Artifact Registry, a fin de almacenar imágenes de contenedor para el trabajo de Cloud Run y la atención al cliente
  • Conector de acceso a VPC para que los trabajos de Cloud Run se comuniquen 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 que autorices, haz clic en “Autorizar”. para continuar.

6356559df3eccdda.png

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

gke-lab-setup.sh

Espera hasta que la secuencia de comandos finalice 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 aplicaciones

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(Estadísticas de consultas, Supervisión) en la consola.

3b12b0fa1367fb42.png

Revisa el clúster de GKE Autopilot

Configura 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 atención al cliente.

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

Navega a la carpeta cymbal-eats/customer-service y ejecuta los comandos para compilar y subir una imagen de 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

Configura 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 un objeto Secret de Kubernetes y así almacenar las credenciales de la base de datos que la aplicación de atención al cliente usará 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 pasar al estado RUNNING.

Ejecuta el comando para crear una IP externa que se usará en los pasos de 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 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 registro de cliente nuevo:

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 tarde.

Revisar registros de clientes

Ejecuta los siguientes comandos para ver el registro de 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 las cargas de trabajo y los servicios de GKE

Abre Kubernetes Engine en la consola de Cloud y revisa las cargas de trabajo y servicios que se crearon.

e1217216e003a839.png

d5c97fb5950c4db.png

Registros de la aplicación

Abre el Explorador de registros y busca registros que contengan “El cliente ya existe”. texto.

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 conecte a una instancia de AlloyDB

¿Qué sigue?

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.