En esta página, se describe cómo configurar una instancia de Cloud SQL para usar una IP privada.
Para obtener más información sobre cómo funcionan las IP privadas, así como los requisitos de administración y del entorno, consulta IP privada.
Antes de comenzar
Requisitos de API y de IAM
- Debes habilitar la API de Service Networking para tu proyecto de Google Cloud.
- Para administrar una conexión de acceso a servicios privados, el usuario debería tener los siguientes permisos de Identity and Access Management (IAM). Si no cuentas con los permisos necesarios, puedes recibir errores de permisos insuficientes.
compute.networks.list
compute.addresses.create
compute.addresses.list
servicenetworking.services.addPeering
Si usas una red de VPC compartida, también debes agregar el usuario al proyecto host y asignarle los mismos permisos al usuario en el proyecto host.
Si usas una red de VPC compartida, también debes habilitar esta API para el proyecto host.
Acceso privado a servicios
Cuando creas una nueva red de nube privada virtual (VPC) en el proyecto, debes configurar el acceso privado a los servicios para asignar un rango de direcciones IP y crear una conexión privada a los servicios. Esto permite que los recursos en la red de VPC se conecten a instancias de Cloud SQL. La consola de Google Cloud proporciona un asistente para ayudarte a establecer esta configuración.
Configura una instancia para que use una IP privada
Puedes configurar el uso de IP privada cuando creas una instancia de Cloud SQL o para una instancia ya existente.
Configura una IP privada en una instancia nueva
Si quieres configurar una instancia de Cloud SQL para usar una IP privada en el momento de su creación, realiza los siguientes pasos:
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Haga clic en Crear instancia.
- Expanda Mostrar opciones de configuración.
- Expande Conexiones.
- Seleccione IP privada.
En una lista desplegable, se muestran las redes de VPC disponibles en tu proyecto. Si tu proyecto es el proyecto de servicio de una VPC compartida, también se muestran las redes de VPC del proyecto host.
- Selecciona la red de VPC que deseas usar.
- Haz clic en Configurar conexión.
- En la sección Asignar un rango de IP, elige una de las siguientes opciones:
- Selecciona uno o más rangos de IP existentes o crea uno nuevo desde el menú desplegable. El menú desplegable incluye los rangos asignados previamente, si hay alguno, o puedes seleccionar Asignar un rango de IP nuevo e ingresar un rango y un nombre nuevos.
- Usa un rango de IP asignado automáticamente en tu red.
- Haz clic en Continuar.
- Haz clic en Crear conexión (Create connection).
- Verifica que ves el mensaje:
Private service connection for network VPC_NETWORK_NAME has been successfully created
. - De manera opcional, puedes especificar un rango de IP asignado para que tus instancias las usen en las conexiones.
- Expande la opción Mostrar la opción de rango de IP asignado.
- Selecciona un rango de IP en el menú desplegable.
- Termina de configurar tu instancia.
- Haga clic en Crear instancia.
Si ves un mensaje que indica que necesitas configurar una conexión privada a servicios, haz lo siguiente:
gcloud
Antes de crear una instancia con una dirección IP privada, asegúrate de que tu proyecto esté configurado para el acceso privado a servicios.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
INSTANCE_ID
: El ID de la instanciaPROJECT_ID
: El ID del proyectoNETWORK_PROJECT_ID
: Es el ID del proyecto de la red de VPC.VPC_NETWORK_NAME
: Es el nombre de la red de VPC.RANGE_NAME
: opcional. Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir conRFC-1035
y contener de 1 a 63 caracteres.REGION_NAME
: Es el nombre de la región.
--network
. Para inhabilitar la IP pública, usa la marca --no-assign-ip
.
gcloud beta sql instances create INSTANCE_ID \ --project=PROJECT_ID \ --network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \ --no-assign-ip \ --allocated-ip-range-name=RANGE_NAME
Terraform
A fin de configurar la IP privada para una instancia nueva, usa los siguientes recursos de Terraform:
google_compute_network
google_compute_global_address
google_service_networking_connection
google_sql_database_instance
Aplica los cambios
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Borra los cambios
Para borrar tus cambios, haz lo siguiente:
- Para inhabilitar la protección contra la eliminación, en tu archivo de configuración de Terraform, establece el argumento
deletion_protection
enfalse
.deletion_protection = "false"
- Para aplicar la configuración actualizada de Terraform, ejecuta el siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform apply
-
Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa
yes
cuando se te solicite:terraform destroy
REST v1
Crea una instancia nueva con una dirección IP privada:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: ID del proyecto
- INSTANCE_ID: El ID de la instancia
- VPC_NETWORK_NAME: especifica el nombre de la red de nube privada virtual (VPC) que deseas usar para esta instancia. El acceso a servicios privados ya debe estar configurado para la red.
- RANGE_NAME: Opcional. Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con
RFC-1035
y contener de 1 a 63 caracteres. - AUTHORIZED_NETWORKS: Para las conexiones de IP públicas, especifica las conexiones de redes autorizadas que pueden conectarse a la instancia.
En el parámetro ipv4Enabled
, establece el valor en true
si usas una dirección IP pública para tu instancia o false
si tu instancia tiene una dirección IP privada.
Método HTTP y URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
Cuerpo JSON de la solicitud:
{ "name": "INSTANCE_ID", "region": "region", "databaseVersion": "database-version", "settings": { "tier": "machine-type", "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
REST v1beta4
Crea una instancia nueva con una dirección IP privada:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: ID del proyecto
- INSTANCE_ID: El ID de la instancia
- VPC_NETWORK_NAME: especifica el nombre de la red de nube privada virtual (VPC) que deseas usar para esta instancia. El acceso a servicios privados ya debe estar configurado para la red.
- RANGE_NAME: Opcional. Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con
RFC-1035
y contener de 1 a 63 caracteres. - AUTHORIZED_NETWORKS: Para las conexiones de IP públicas, especifica las conexiones de redes autorizadas que pueden conectarse a la instancia.
En el parámetro ipv4Enabled
, establece el valor en true
si usas una dirección IP pública para tu instancia o false
si tu instancia tiene una dirección IP privada.
Método HTTP y URL:
POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances
Cuerpo JSON de la solicitud:
{ "name": "INSTANCE_ID", "region": "region", "databaseVersion": "database-version", "settings": { "tier": "machine-type", "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
Configura una IP privada en una instancia existente
Configurar una instancia de Cloud SQL existente para que use una IP privada hace que la instancia se reinicie, lo que causa un tiempo de inactividad.
A fin de configurar una instancia existente para que use una IP privada, sigue estos pasos:
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- Selecciona Conexiones en el menú de navegación de Cloud SQL.
- En la pestaña Redes, selecciona la casilla de verificación IP privada.
En una lista desplegable, se muestran las redes disponibles en tu proyecto.
- Selecciona la red de VPC que deseas usar:
- Haz clic en Configurar conexión.
- En la sección Asignar un rango de IP, elige una de las siguientes opciones:
- Selecciona uno o más rangos de IP existentes o crea uno nuevo desde el menú desplegable. El menú desplegable incluye los rangos asignados previamente, si hay alguno, o puedes seleccionar Asignar un rango de IP nuevo e ingresar un rango y un nombre nuevos.
- Usa un rango de IP asignado automáticamente en tu red.
- Haz clic en Continuar.
- Haz clic en Crear conexión (Create connection).
- Verifica que veas el estado Se creó correctamente la conexión privada a servicio para la red
VPC_NETWORK_NAME
. - Haz clic en Guardar.
Si ves Se requiere conexión privada a servicio:
gcloud
Asegúrate de que tu proyecto esté configurado para el acceso privado a servicios.
Actualiza tu instancia de Cloud SQL con el parámetro --network
para especificar el nombre de la red de VPC seleccionada.
gcloud beta sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \ --no-assign-ip
REST v1
Crea una instancia nueva con una dirección IP privada:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: ID del proyecto
- INSTANCE_ID: El ID de la instancia
- VPC_NETWORK_NAME: especifica el nombre de la red de nube privada virtual (VPC) que deseas usar para esta instancia. El acceso a servicios privados ya debe estar configurado para la red.
- RANGE_NAME: Opcional. Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con
RFC-1035
y contener de 1 a 63 caracteres. - AUTHORIZED_NETWORKS: Para las conexiones de IP públicas, especifica las conexiones de redes autorizadas que pueden conectarse a la instancia.
En el parámetro ipv4Enabled
, establece el valor en true
si usas una dirección IP pública para tu instancia o false
si tu instancia tiene una dirección IP privada.
Método HTTP y URL:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID
Cuerpo JSON de la solicitud:
{ "settings": { "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
REST v1beta4
Crea una instancia nueva con una dirección IP privada:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- PROJECT_ID: ID del proyecto
- INSTANCE_ID: El ID de la instancia
- VPC_NETWORK_NAME: especifica el nombre de la red de nube privada virtual (VPC) que deseas usar para esta instancia. El acceso a servicios privados ya debe estar configurado para la red.
- RANGE_NAME: Opcional. Si se especifica, establece un nombre de rango para el que se asigna un rango de IP. El nombre del rango debe cumplir con
RFC-1035
y contener de 1 a 63 caracteres. - AUTHORIZED_NETWORKS: para las conexiones de IP públicas, especifica las conexiones de redes autorizadas que pueden conectarse a la instancia.
En el parámetro ipv4Enabled
, establece el valor en true
si usas una dirección IP pública para tu instancia o false
si tu instancia tiene una dirección IP privada.
Método HTTP y URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
Cuerpo JSON de la solicitud:
{ "settings": { "ipConfiguration": { "ipv4Enabled": false, "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "allocatedIpRange": "RANGE_NAME" "authorizedNetworks": [AUTHORIZED_NETWORKS], } } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
Conéctate a una instancia mediante su IP privada
Debes usar el acceso privado a servicios para conectarte a instancias de Cloud SQL desde instancias de Compute Engine o Google Kubernetes Engine en la misma red de VPC (definidas aquí como fuentes internas) o fuera de esa red (con una fuente externa).
Conéctate desde una fuente interna
Si deseas conectarte desde una fuente en el mismo proyecto de Google Cloud que tu instancia de Cloud SQL, como el proxy de Cloud SQL Auth que se ejecuta en un recurso de Compute Engine, ese recurso debe estar en la misma red de VPC en el que se estableció el acceso privado a servicios para la instancia de Cloud SQL.
Para conectarse desde una fuente sin servidor, como el Entorno estándar de App Engine, Cloud Run o las funciones de Cloud Run, la aplicación o función se conecta directamente a la instancia a través Acceso a VPC sin servidores sin el proxy de Cloud SQL Auth.
Conéctate desde una fuente externa
Si una red externa está conectada a la red de VPC a la que está conectada la instancia de Cloud SQL (por ejemplo, una red local o una red de VPC), puedes usar Cloud VPN o Cloud Interconnect para conectarte a la instancia desde un cliente en la red externa.
Para permitir conexiones desde una red externa, haz lo siguiente:
- Asegúrate de que tu red de VPC esté conectada a la red externa mediante un túnel de Cloud VPN o un adjunto de VLAN para la interconexión dedicada o la interconexión de socio.
- Asegúrate de que las sesiones de protocolo de puerta de enlace de frontera (BGP) en los Cloud Routers que administran los túneles de Cloud VPN y los adjuntos de Cloud Interconnect (VLAN) hayan recibido prefijos específicos (destinos) de tu red local.
Las rutas predeterminadas (destino 0.0.0.0/0) no se pueden importar a la red de VPC de Cloud SQL porque esa red tiene su propia ruta predeterminada local. Se usan las rutas locales para un destino, aunque el intercambio de tráfico de Cloud SQL esté configurado para importar rutas personalizadas desde tu red de VPC.
-
Identifica las conexiones de intercambio de tráfico que produce la conexión privada a los servicios. Según el servicio, la conexión privada a servicios puede crear una o más de las siguientes conexiones de intercambio de tráfico, pero no necesariamente todas:
cloudsql-mysql-googleapis-com
cloudsql-postgres-googleapis-com
servicenetworking-googleapis-com
- Actualiza todas las conexiones de intercambio de tráfico para habilitar la exportación de rutas personalizadas.
- Identifica el rango asignado que usa la conexión de servicios privados.
- Configura el modo de anuncio personalizado de Cloud Router para el en los Cloud Routers que administran sesiones de BGP para tu Túneles de Cloud VPN o adjuntos de Cloud Interconnect (VLAN).
Conectarse desde Cloud Shell
Cloud Shell no es compatible con la conexión a una instancia de Cloud SQL que solo tiene una dirección IP privada.
Conéctate desde direcciones IP que no sean RFC 1918
RFC 1918 especifica las direcciones IP que se asignan para usar de manera interna (es decir, dentro de una organización) y que no se enrutarán en Internet. En concreto, las siguientes:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
Las conexiones a una instancia de Cloud SQL mediante una dirección IP privada se autorizan de forma automática para los rangos de direcciones RFC 1918. De esta manera, todos los clientes privados pueden acceder a la base de datos sin pasar por el proxy.
Para conectarte desde una dirección IP que no sea RFC 1918, debes configurar la autorización de IP por instancia a fin de permitir el tráfico de rangos de direcciones IP que no sean RFC 1918.
Por ejemplo, usa un comando de gcloud
como el siguiente:
gcloud sql instances patch INSTANCE_NAME \ --authorized-networks=192.88.99.0/24,11.0.0.0/24
De forma predeterminada, Cloud SQL no procesa rutas de subred de tu red de VPC que no son RFC 1918. Debes actualizar el intercambio de tráfico entre redes a Cloud SQL para exportar cualquier ruta que no sea RFC 1918.
gcloud compute networks peerings update PEERING_CONNECTION \ --network=VPC_NETWORK_NAME \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
PEERING_CONNECTION
es el nombre de la conexión de intercambio de tráfico que produce la conexión de servicios privados entre tu red de VPC y la red del productor de servicios.VPC_NETWORK_NAME
es el nombre de tu red de VPC.PROJECT_ID
es el ID del proyecto de la red de VPC. Si usas una VPC compartida, usa el ID del proyecto host.
Reemplaza lo siguiente:
Para mitigar el agotamiento de direcciones IP, puedes usar direcciones IP públicas que se usan de forma privada.
Conéctate desde direcciones IP públicas usadas de forma privada
Si deseas configurar tu instancia en un rango de direcciones IP públicas de uso privado, habilita export-subnet-routes-with-public-ip
en el intercambio de tráfico entre redes entre tu red y la red de Cloud SQL.
gcloud compute networks peerings update PEERING_CONNECTION \ --network=VPC_NETWORK_NAME \ --export-subnet-routes-with-public-ip \ --project=PROJECT_ID
PEERING_CONNECTION
es el nombre de la conexión de intercambio de tráfico que produce la conexión de servicios privados entre tu red de VPC y la red del productor de servicios. Para conocer el nombre de la conexión de intercambio de tráfico, ve a la página Intercambio de tráfico entre redes de VPC.VPC_NETWORK_NAME
es el nombre de tu red de VPC.PROJECT_ID
es el ID del proyecto de la red de VPC. Si usas una VPC compartida, usa el ID del proyecto host.
Reemplaza lo siguiente:
Conéctate a una instancia configurada con direcciones IP públicas usadas de forma privada
Si la instancia está configurada en un rango de direcciones IP públicas de uso privado y deseas conectarte a ella, habilita import-subnet-routes-with-public-ip
en el intercambio de tráfico entre redes entre tu red y la red de Cloud SQL.
gcloud compute networks peerings update PEERING_CONNECTION \ --network=VPC_NETWORK_NAME \ --import-subnet-routes-with-public-ip \ --project=PROJECT_ID
PEERING_CONNECTION
es el nombre de la conexión de intercambio de tráfico que produce la conexión de servicios privados entre tu red de VPC y la red del productor de servicios. Para conocer el nombre de la conexión de intercambio de tráfico, ve a la página Intercambio de tráfico entre redes de VPC.VPC_NETWORK_NAME
es el nombre de tu red de VPC.PROJECT_ID
es el ID del proyecto de la red de VPC. Usa el ID del proyecto host si usas una VPC compartida.
Reemplaza lo siguiente:
Conéctate con un extremo de escritura
Además de una dirección IP privada, puedes usar un extremo de escritura en una cadena de conexión de SQL. El extremo de escritura es un nombre de servicio de nombre de dominio (DNS) que se resuelve en la dirección IP de la instancia principal. Cuando usas un extremo de escritura, puedes evitar tener que realizar cambios en la conexión de la aplicación cuando se produce una interrupción regional.
Si se produce un conmutación por error o cambio de réplica, el extremo de escritura puede ayudar a administrar las direcciones IP privadas de las instancias. Cuando esto suceda, usa el extremo de escritura para conectarte a la instancia que actúa como instancia principal.
Cómo Cloud SQL crea un extremo de escritura
Si habilitas la API de Cloud DNS para tu proyecto de Google Cloud y, luego, creas una instancia principal de la edición de Cloud SQL Enterprise Plus, promocionas la réplica de la instancia o actualizas la instancia de la edición de Cloud SQL Enterprise, Cloud SQL genera automáticamente un extremo de escritura y se lo asigna a la instancia.
Para obtener más información acerca de cómo obtener el extremo de escritura de la instancia, consulta Visualiza la información de la instancia.
Asigna un extremo de escritura a una instancia
Si no habilitas la API de Cloud DNS para tu proyecto de Google Cloud y, luego, creas, promocionas o actualizas tu instancia, Cloud SQL no asignará el extremo de escritura a la instancia automáticamente.
Para que Cloud SQL genere un extremo de escritura y lo asigne a la instancia, completa los siguientes pasos:
-
Habilita la API de Cloud DNS.
Console
-
En la consola de Google Cloud, ve a la página API.
- Haz clic en la API de Cloud DNS.
- Habilita la API.
gcloud
Haz clic en el siguiente botón para abrir Cloud Shell, que proporciona acceso de línea de comandos a tus recursos de Google Cloud directamente desde el navegador.
Para habilitar la API, ejecuta el siguiente
gcloud services enable
comando:gcloud services enable dns.googleapis.com
-
Crea una réplica habilitada para la recuperación ante desastres avanzada. Como resultado, Cloud SQL genera el extremo de escritura y lo asigna a la instancia.
- Para recuperar el extremo de escritura, usa el comando
gcloud sql instances describe
:gcloud sql instances describe INSTANCE_NAME | grep psaWriteEndpoint
Reemplaza INSTANCE_NAME por el nombre de tu instancia de Cloud SQL.
Solucionar problemas
Consulta la solución de problemas a fin de obtener más información sobre problemas conocidos de conectividad y la depuración de problemas de conexión para obtener ayuda con los diagnósticos automáticos.
¿Qué sigue?
- Obtén más información sobre IP privada.
- Obtén más información sobre acceso privado a servicios.
- Consulta cómo usar los Controles del servicio de VPC para agregar un perímetro de servicio.
- Obtén más información sobre la configuración del acceso privado a servicios.
- Obtén más información sobre la configuración del acceso privado a servicios para Cloud SQL.
- Obtén más información sobre Cloud VPN.
- Obtén más información sobre las redes de VPC.
- Obtén más información sobre el intercambio de tráfico entre redes de VPC.
- Obtén más información sobre la VPC compartida.