arrow_back

Conéctate a Cloud SQL desde una aplicación en Kubernetes Engine

Unirse Acceder
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Conéctate a Cloud SQL desde una aplicación en Kubernetes Engine

Lab 1 hora 15 minutos universal_currency_alt 5 créditos show_chart Intermedio
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP449

Labs de autoaprendizaje de Google Cloud

Descripción general

En este lab, descubrirás lo fácil que es conectar una aplicación en Kubernetes Engine a una instancia de Cloud SQL con el contenedor de proxy de Cloud SQL como un contenedor de archivo adicional. Implementarás un clúster de Kubernetes Engine y una instancia Postgres de Cloud SQL y utilizarás el contenedor del proxy de Cloud SQL para permitir la comunicación entre ellos.

Aunque este lab se enfoca en cómo conectarse a una instancia de Cloud SQL con un contenedor del proxy de Cloud SQL, los conceptos son los mismos para cualquier servicio administrado de Google Cloud que requiera acceso a la API.

Los ingenieros de GKE Helmsman crearon este lab para ayudarte a comprender mejor Cloud SQL a través de un contenedor del proxy. Puedes ver esta demostración en GitHub en la página gke-networking-demos. Cualquier contribución a los recursos es bienvenida.

Qué aprenderás

En este lab, aprenderás a hacer lo siguiente:

  • Proteger tu base de datos de accesos no autorizados a través del uso de una cuenta de servicio sin privilegios en tus nodos de Kubernetes Engine
  • Colocar credenciales de una cuenta de servicio con privilegios en un contenedor que se ejecuta en Kubernetes Engine
  • Usar el proxy de Cloud SQL para disminuir el trabajo que implica conectarse a tu instancia de Cloud SQL y reducir el conocimiento que tus aplicaciones tienen de tu infraestructura

Cuentas de servicio sin privilegios

A cada nodo de Kubernetes Engine se le asigna la cuenta de servicio predeterminada de Compute Engine. Esta cuenta de servicio posee una gran cantidad de privilegios y tiene acceso a muchos servicios de Google Cloud. Debido a la forma en que está configurado el SDK de Cloud, el software que escribas usará las credenciales asignadas a la instancia de Compute Engine en la que se ejecuta.

Dado que lo mejor es que tus contenedores no tengan los privilegios que posee la cuenta de servicio predeterminada de Compute Engine, deberás crear una cuenta de servicio con privilegios mínimos para tus nodos de Kubernetes Engine y, luego, crear cuentas de servicio más específicas (también con privilegios mínimos) para tus contenedores.

Cuentas de servicio con privilegios en contenedores

Las únicas dos formas de conseguir credenciales de cuentas de servicio son a través de las siguientes opciones:

  1. Tu instancia de host (no recomendado)
  2. Un archivo de credenciales

En este lab, se mostrará cómo colocar el archivo de credenciales en tu contenedor que se ejecuta en Kubernetes Engine para que tu aplicación tenga los privilegios que necesita.

Proxy de Cloud SQL

El proxy de Cloud SQL se encarga de crear y mantener una conexión a tu instancia de Cloud SQL para que no debas hacerlo tú. Esto simplifica tu administración de secretos y permite que tu aplicación no conozca los detalles de la conexión. Google empaqueta el proxy de Cloud SQL como un contenedor de Docker que se puede ejecutar junto con el contenedor de tu aplicación, en el mismo pod de Kubernetes Engine.

Arquitectura

La aplicación y su contenedor de archivo adicional se implementan en un único pod de Kubernetes (K8s) que se ejecuta en el único nodo del clúster de Kubernetes Engine. La aplicación se comunica con la instancia de Cloud SQL a través del proceso del proxy de Cloud SQL que escucha en localhost.

El manifiesto de K8s compila un objeto de implementación de una sola réplica con dos contenedores: pgAdmin y el proxy de Cloud SQL. Hay dos Secrets instalados en el clúster de Kubernetes Engine: la información de conexión de la instancia de Cloud SQL y un archivo de credenciales de clave para la cuenta de servicio; los contenedores del proxy de Cloud SQL a los que llama la API de Cloud SQL utilizan ambos Secrets.

La aplicación no necesita saber cómo conectarse a Cloud SQL ni estar expuesta a su API. El proceso de proxy de Cloud SQL se encarga de eso por la aplicación. Es importante destacar que el contenedor del proxy de Cloud SQL se ejecuta en el pod como un contenedor de “archivo adicional”.

Flujo de la aplicación en un clúster de Kubernetes

Configuración y requisitos

Antes de hacer clic en el botón Comenzar lab

Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.

Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.

Para completar este lab, necesitarás lo siguiente:

  • Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
Nota: Usa una ventana de navegador privada o de Incógnito para ejecutar este lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
  • Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses en este lab para evitar cargos adicionales en tu cuenta.

Cómo iniciar su lab y acceder a la consola de Google Cloud

  1. Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab que tiene estos elementos:

    • El botón Abrir la consola de Google
    • Tiempo restante
    • Las credenciales temporales que debe usar para el lab
    • Otra información para completar el lab, si es necesaria
  2. Haga clic en Abrir la consola de Google. El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.

    Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.

    Nota: Si ve el diálogo Elegir una cuenta, haga clic en Usar otra cuenta.
  3. Si es necesario, copie el nombre de usuario del panel Detalles del lab y péguelo en el cuadro de diálogo Acceder. Haga clic en Siguiente.

  4. Copie la contraseña del panel Detalles del lab y péguela en el cuadro de diálogo de bienvenida. Haga clic en Siguiente.

    Importante: Debe usar las credenciales del panel de la izquierda. No use sus credenciales de Google Cloud Skills Boost. Nota: Usar su propia Cuenta de Google podría generar cargos adicionales.
  5. Haga clic para avanzar por las páginas siguientes:

    • Acepte los términos y condiciones.
    • No agregue opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
    • No se registre para obtener pruebas gratuitas.

Después de un momento, se abrirá la consola de Cloud en esta pestaña.

Nota: Para ver el menú con una lista de los productos y servicios de Google Cloud, haga clic en el Menú de navegación que se encuentra en la parte superior izquierda de la pantalla. Ícono del menú de navegación

Activa Cloud Shell

Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.

  1. Haz clic en Activar Cloud Shell Ícono de Activar Cloud Shell en la parte superior de la consola de Google Cloud.

Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. El resultado contiene una línea que declara el PROJECT_ID para esta sesión:

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.

  1. Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
gcloud auth list
  1. Haz clic en Autorizar.

  2. Ahora, el resultado debería verse de la siguiente manera:

Resultado:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. Puedes solicitar el ID del proyecto con este comando (opcional):
gcloud config list project

Resultado:

[core] project = <project_ID>

Resultado de ejemplo:

[core] project = qwiklabs-gcp-44776a13dea667a6 Nota: Para obtener toda la documentación de gcloud, consulta la guía con la descripción general de gcloud CLI en Google Cloud.

Configura tu región y zona

Algunos recursos de Compute Engine se encuentran en regiones y zonas. Una región es una ubicación geográfica específica donde puedes ejecutar tus recursos. Cada región tiene una o más zonas.

Para obtener más información sobre las regiones y zonas y ver una lista de todas ellas, consulta esta documentación.

Ejecuta el siguiente comando para configurar una región y zona para tu lab (puedes usar la región/zona más adecuada para tu caso):

gcloud config set compute/region {{{ project_0.default_region | REGION }}} gcloud config set compute/zone {{{ project_0.default_zone | ZONE }}}

Copia la demostración

  1. Ejecuta el siguiente comando para copiar los archivos de este lab:
gsutil cp gs://spls/gsp449/gke-cloud-sql-postgres-demo.tar.gz . tar -xzvf gke-cloud-sql-postgres-demo.tar.gz
  1. Ve al directorio de este lab:
cd gke-cloud-sql-postgres-demo

Tarea 1. Implementación

La implementación está completamente automatizada. La secuencia de comandos que implementarás tomará los siguientes parámetros, en orden:

  • Un nombre de usuario para tu instancia de Cloud SQL
  • Un nombre de usuario para la consola de pgAdmin
  • USER_PASSWORD (la contraseña para acceder a la instancia de Postgres)
  • PG_ADMIN_CONSOLE_PASSWORD (la contraseña para acceder a la IU de pgAdmin)
  1. Puedes crear cualquier nombre de usuario para la instancia de Cloud SQL y usar cualquier correo electrónico para la consola pgAdmin; en este ejemplo, se usa “dbadmin” y tu correo electrónico de estudiante temporal.

  2. Guarda tu cuenta de estudiante en una variable:

PG_EMAIL=$(gcloud config get-value account)
  1. Ejecuta el siguiente comando para implementar la secuencia de comandos y crea los 2 nombres de usuario; se te pedirá que crees una contraseña para dbadmin y $PG_EMAIL (tu cuenta de student@qwiklabs.net) en el resultado:
./create.sh dbadmin $PG_EMAIL

Dado que volverás a usar las contraseñas más adelante en este lab, no es necesario que sean difíciles.

Durante la implementación, create.sh ejecutará las siguientes secuencias de comandos:

  • enable_apis.sh: Habilita las APIs de Kubernetes Engine y Cloud SQL Admin.
  • postgres_instance.sh: Crea la instancia de Cloud SQL y el usuario adicional de Postgres. Ten en cuenta que se agotará el tiempo de espera de gcloud mientras se crea la instancia de Cloud SQL, por lo que la secuencia de comandos verificará de forma manual que se complete.
  • service_account.sh: Crea el archivo de credenciales y la cuenta de servicio para el contenedor del proxy de Cloud SQL.
  • cluster.sh: Crea el clúster de Kubernetes Engine.
  • configs_and_secrets.sh: Crea los secretos y el objeto ConfigMap de Kubernetes Engine, que contienen las credenciales y la string de conexión de la instancia de Cloud SQL.
  • pgadmin_deployment.sh: Crea el pod de pgAdmin4.
Nota: La implementación de la instancia de Cloud SQL puede tardar hasta 10 minutos. Si encuentras un error en la secuencia de comandos de implementación automatizada, asegúrate de que tu región y las variables de la zona estén configuradas de forma correcta y, luego, vuelve a ejecutar la secuencia de comandos create.sh.

A continuación, usa el balanceador de cargas para exponer el pod y conectarte a la instancia. Cuando termines, borra los servicios para evitar accesos no autorizados.

  1. Ejecuta el siguiente comando para obtener el ID del pod:
POD_ID=$(kubectl --namespace default get pods -o name | cut -d '/' -f 2)
  1. Expón el pod a través del balanceador de cargas:
kubectl expose pod $POD_ID --port=80 --type=LoadBalancer
  1. Obtén la dirección IP del servicio:
kubectl get svc

Resultado:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 443/TCP 96m SVC_NAME LoadBalancer 80:31789/TCP 45m Nota: Vuelve a ejecutar el comando anterior hasta que veas una dirección IP externa para el servicio pgAdmin.
  1. En la consola de Cloud, ve a Menú de navegación > SQL y haz clic en el ID de la instancia.

  2. En el menú de la izquierda, haz clic en Conexiones y, luego, en Herramientas de redes.

  3. Con la casilla IP pública marcada, haz clic en Agregar una red.

  4. Nombra la red y, luego, otórgale acceso público:

0.0.0.0/0
  1. Haz clic en Listo.

  2. Haz clic en Guardar.

  3. Abre una pestaña nueva y conéctate a pgAdmin en tu navegador con th pgAdmin <SVC_IP>:

http://<SVC_IP>
  1. Accede a la IU de pgAdmin con la siguiente información:
  • <PGADMIN_USERNAME> (tu cuenta temporal de student@qwiklabs.net) en el campo “Email Address”
  • <PG_ADMIN_CONSOLE_PASSWORD> que definiste antes
Nota: Si no sabes con certeza cuál es tu cuenta de estudiante completa, ejecuta gcloud config get-value account en Cloud Shell y copia el resultado.
  1. Vuelve a la consola de Cloud y a la página de SQL. Haz clic en la pestaña Descripción general.

  2. Copia la dirección IP pública.

  3. En la consola de pgAdmin, en el panel del lado izquierdo, haz clic en Servers y, luego, en Add New Server.

  4. En la pestaña General, asígnale un nombre a tu servidor y, luego, haz clic en la pestaña Connection.

  5. Usa las credenciales <DATABASE_USER_NAME>(dbadmin) y <USER_PASSWORD> que creaste anteriormente para conectarte a 127.0.0.1:5432:

  • Host name: pega la dirección IP pública que copiaste
  • Username: <DATABASE_USER_NAME>(dbadmin)
  • Password: <USER_PASSWORD> que creaste

Pestaña Connection con los campos Host Name/Address, Username y Password completados

  1. Haz clic en Guardar.

Prueba la tarea completada

Haz clic en Revisar mi progreso para verificar la tarea realizada. Si creaste de forma correcta los recursos necesarios con la implementación completamente automatizada, verás una puntuación de evaluación.

Crear los recursos necesarios con la implementación completamente automatizada

Tarea 2. Validación

La validación está completamente automatizada. La secuencia de comandos de validación verifica si existen la instancia de Cloud SQL, el clúster de Kubernetes Engine y el pod en ejecución. Todos estos recursos deberían existir luego de que se complete la secuencia de comandos de implementación.

  • Para validar estas tres implementaciones, ejecuta el siguiente comando en Cloud Shell:
make validate

La secuencia de comandos usa los parámetros INSTANCE_NAME: El nombre de la instancia Cloud SQL existente.

Un resultado exitoso se ve así:

Cloud SQL instance exists GKE cluster exists pgAdmin4 Deployment object exists

Tarea 3. Eliminación

El desmontaje está completamente automatizado. La secuencia de comandos de desmontaje borra todos los recursos que haya creado la secuencia de comandos de implementación.

  1. Para realizar la eliminación, ejecuta el siguiente comando:
make teardown

La secuencia de comandos usa el parámetro INSTANCE_NAME: El nombre de la instancia de Cloud SQL existente.

teardown.sh ejecuta las siguientes secuencias de comandos:

  • delete_resources.sh: Borra todo excepto la instancia de Cloud SQL
  • delete_instance.sh: Borra la instancia de Cloud SQL

Tarea 4. Soluciona problemas en tu propio entorno

Cuando creas una instancia de Cloud SQL, obtienes el siguiente error:

is the subject of a conflict: The instance or operation is not in an appropriate state to handle the request.

Solución

No puedes volver a usar el nombre de una instancia hasta una semana después de haberla borrado. Para obtener más información, consulta cómo Borrar instancias.

¡Felicitaciones!

Conectaste una aplicación en Kubernetes Engine a una instancia de Cloud SQL con el contenedor de proxy de Cloud SQL como un contenedor de archivo adicional. Luego, implementaste un clúster de Kubernetes Engine y una instancia de Cloud SQL Postgres y utilizaste el contenedor de proxy de Cloud SQL para permitir la comunicación entre ellos.

Finaliza la Quest

Este lab de autoaprendizaje es parte de la Quest Google Kubernetes Engine Best Practices. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completas esta Quest, obtendrás una insignia como reconocimiento por tu logro. Puedes hacer públicas tus insignias y agregar vínculos a ellas en tu currículum en línea o en tus cuentas de redes sociales. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.

Próximos pasos/Más información

Consulta Instrucciones de instalación de Kubernetes, donde se muestra cómo implementar una aplicación alojada en contenedores para varias plataformas.

Última actualización del manual: 16 de octubre de 2023

Prueba más reciente del lab: 17 de octubre de 2023

Copyright 2024 Google LLC. Este software se proporciona tal como está, sin garantías ni declaraciones para ningún uso o propósito. El uso que hagas de él está sujeto a tu acuerdo con Google.