Conectarse desde Kubernetes Engine

En esta página se explica cómo configurar una conexión desde una aplicación que se ejecuta en Kubernetes Engine a una instancia de Cloud SQL con la imagen Docker del proxy de Cloud SQL.

Introducción

Si quieres acceder a una instancia de Cloud SQL desde una aplicación que se ejecuta en Kubernetes Engine, usa la imagen Docker del proxy de Cloud SQL. Más información sobre el proxy de Cloud SQL Proxy en la sección sobre el proxy de Cloud SQL.

Antes de empezar

Antes de empezar este procedimiento, debes contar con los siguientes elementos:

  • Un clúster de Kubernetes Engine en el que se ejecute la versión 1.2 o posterior, con la herramienta de línea de comandos kubectl instalada y configurada para comunicarse con dicho clúster.

    Si quieres obtener ayuda sobre cómo empezar a usar Kubernetes Engine, consulta la sección sobre inicio rápido.

  • Un contenedor de aplicaciones en un pod del clúster de Kubernetes Engine.

    El proxy de Cloud SQL se añade al pod mediante el patrón de pod "sidecar".

  • Una instancia de segunda generación creada.

    Si quieres obtener ayuda para crear una instancia de Cloud SQL, consulta la sección sobre cómo crear instancias.

1. Habilitar la API

  • Habilita la API Administración de Cloud SQL.

    Habilita la API

  • 2. Crear una cuenta de servicio

    Se necesita una cuenta de servicio con los privilegios adecuados de la instancia de Cloud SQL para el proxy. Obtén más información sobre las cuentas de servicio en la guía de Auth de GCP.

    1. Accede a la página sobre cuentas de servicio de Cloud SQL de la consola de Google Cloud Platform.

      Ir a la página sobre cuentas de servicio

    2. Si fuera necesario, selecciona el proyecto que contiene la instancia de Cloud SQL.
    3. Haz clic en Crear cuenta de servicio.
    4. En el cuadro de diálogo Crear cuenta de servicio, introduce un nombre descriptivo para la cuenta de servicio.
    5. Como Función, selecciona Cloud SQL > Cliente de Cloud SQL.

      También puedes usar la función básica de editor al seleccionar Proyecto > Editor, aunque esta función incluye permisos de Google Cloud Platform.

      Si no ves estas funciones, puede que tu usuario de Google Cloud Platform no cuente con el permiso resourcemanager.projects.setIamPolicy. Puedes consultar tus permisos mediante una búsqueda del ID de usuario en la página sobre gestión de identidades y accesos de la consola de Google Cloud Platform.

    6. Cambia el ID de cuenta de servicio por un valor único que reconozcas para que puedas encontrar fácilmente esta cuenta de servicio más tarde si fuera necesario.
    7. Haz clic en Suministrar una nueva clave privada.
    8. El tipo de clave predeterminado es JSON, que es el valor correcto que se debe usar.
    9. Haz clic en Crear.

      El archivo de clave privada se descargará en la máquina. Puedes cambiar la ubicación en la que se encuentra. Debes proteger el archivo de clave.

    Más tarde, cuando crees tus secretos en esta tarea, tendrás que establecer la ubicación de este archivo de clave en PROXY_KEY_FILE_PATH.

    3. Crear el usuario del proxy

    Este comando gcloud sirve para crear la cuenta de usuario proxyuser que el proxy usará para acceder a la instancia de Cloud SQL. Debes introducir el nombre de la instancia y la contraseña.

    gcloud sql users create proxyuser cloudsqlproxy~% --instance=[INSTANCE_NAME] --password=[PASSWORD]
    

    Si quieres obtener ayuda para crear una cuenta de usuario, consulta la sección sobre cómo crear un usuario.

    4. Obtener el nombre de conexión de la instancia

    El nombre de conexión de instancia permite identificar la instancia en Google Cloud Platform. Puedes obtenerlo desde la consola de Google Cloud Platform o mediante la herramienta de línea de comandos gcloud:

    gcloud sql instances describe [INSTANCE_NAME]
    

    Por ejemplo, en el caso de la instancia myinstance1 del proyecto myproject1, el resultado de gcloud sería el siguiente:

    connectionName: myproject1:us-central1:myinstance1
    

    Más tarde tendrás que establecer este valor en INSTANCE_CONNECTION_NAME.

    5. Crear secretos

    Necesitas dos secretos para habilitar la aplicación Kubernetes Engine y poder acceder a los datos de la instancia de Cloud SQL:

    • El secreto cloudsql-instance-credentials abarca la cuenta de servicio.
    • El secreto cloudsql-db-credentials proporciona la cuenta de usuario y la contraseña del proxy.

    Si deseas crear estos secretos, debes seguir estos pasos:

    1. Crea el secreto cloudsql-instance-credentials mediante el archivo de clave que descargaste anteriormente:

      kubectl create secret generic cloudsql-instance-credentials \
          --from-file=credentials.json=[PROXY_KEY_FILE_PATH]
      
    2. Crea el secreto cloudsql-db-credentials mediante el nombre y la contraseña del usuario del proxy que creaste anteriormente:

      kubectl create secret generic cloudsql-db-credentials \
          --from-literal=username=proxyuser --from-literal=password=[PASSWORD]
      

    6. Actualizar el archivo de configuración del pod

    El archivo de configuración del pod debe incluir la dirección del host de la base de datos, los secretos y la ubicación de la instancia de Cloud SQL.

    Los nombres exactos de las variables necesarias dependen del contenedor de la aplicación que estés usando. Si quieres que se lleve a cabo un despliegue de muestra completa con el código de muestra incluido, consulta el archivo de manifiesto del despliegue de muestra de Kubernetes en GitHub.

    1. Proporciona la dirección de host 127.0.0.1:3306 con el fin de que tu aplicación la use para acceder a la base de datos.

      Como el proxy se ejecuta en un segundo contenedor del mismo pod, se muestra en la aplicación como localhost, de forma que estás usando la dirección 127.0.0.1:3306 para conectarte.

    2. Proporciona el secreto cloudsql-db-credentials para permitir que la aplicación inicie sesión en la base de datos.

      Por ejemplo, la siguiente configuración le proporciona las variables de entorno DB_USER y DB_PASSWORD a la aplicación mediante el secreto cloudsql- db-credentials.

      env:
      - name: DB_USER
        valueFrom:
          secretKeyRef:
            name: cloudsql-db-credentials
            key: username
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: cloudsql-db-credentials
            key: password
      

    3. En el archivo de despliegue de Kubernetes, especifica otro contenedor en la definición del pod para ejecutar el contenedor del proxy. Este contenedor abre el puerto 3306 y adopta el nombre de conexión de instancia que registraste anteriormente.

      - name: cloudsql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.11
        command: ["/cloud_sql_proxy",
                  "-instances=<INSTANCE_CONNECTION_NAME>=tcp:3306",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-instance-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
      En este paso también se definen los puntos de activación del contenedor.

    4. Define los volúmenes:

      volumes:
        - name: cloudsql-instance-credentials
          secret:
            secretName: cloudsql-instance-credentials

    5. Abre el despliegue mediante el archivo de manifiesto de Kubernetes:

      kubectl apply -f deployment.yaml
      

    7. Actualizar la aplicación para conectarte a Cloud SQL

    Cuando configuras tu entorno de Kubernetes Engine, te conectas a Cloud SQL al igual que cualquier otra aplicación externa que esté usando el proxy. La cadena de conexión exacta que usas depende del idioma y el framework que utilices.

    Si quieres ver ejemplos de cadenas de conexión, consulta la sección sobre información específica del lenguaje con ejemplos.

    ¿Necesitas ayuda? Si necesitas ayuda con la solución de problemas del proxy, consulta la sección sobre solución de problemas de las conexiones del proxy de Cloud SQL. También puedes consultar nuestra página de asistencia para Cloud SQL.

    Siguientes pasos