Conectividad de red en los servicios gestionados de Google Cloud

En esta página se describe cómo configurar la conectividad privada de Integration Connectors a tu servicio backend, como Cloud SQL para MySQL, Cloud SQL para PostgreSQL y Cloud SQL para SQL Server. En esta página se da por hecho que conoces los siguientes conceptos:

Cuestiones importantes

Cuando crees un adjunto de servicio de PSC, ten en cuenta los siguientes puntos clave:

  • La vinculación de servicio de PSC y el balanceador de carga se crean en subredes diferentes de la misma VPC. En concreto, el adjunto de servicio siempre se crea en una subred NAT.
  • Los servidores proxy SOCKS5 deben enlazarse a la dirección IP 0.0.0.0:<port>, ya que es necesaria para el tráfico entrante del balanceador de carga y las sondas de comprobación del estado. Para obtener más información, consulta Comprobación del estado.
  • El tráfico del balanceador de carga y de la comprobación de estado debe enviarse al mismo puerto.
  • Configura las reglas de cortafuegos para facilitar el flujo de tráfico.

    Reglas de entrada

    • El tráfico de la subred del adjunto de servicio de PSC debe llegar a tu servicio de backend.
    • Dentro de la subred del ILB, este debe poder enviar tráfico a los servidores proxy SOCKS5.
    • La sonda de comprobación de estado debe poder acceder a los servidores proxy SOCKS5. Las sondas de comprobación de estado de Google Cloud tienen un intervalo de IPs fijo (35.191.0.0/16, 130.211.0.0/22). Por lo tanto, se puede permitir que estas IPs envíen tráfico a los servidores proxy SOCKS.

    Reglas de salida

    El tráfico de salida está habilitado de forma predeterminada en un proyecto de Google Cloud, a menos que se configuren reglas de denegación específicas.

  • Todos tus componentes de Google Cloud, como el adjunto de servicio de PSC y el balanceador de carga, deben estar en la misma región.
  • Asegúrate de que tus servidores proxy SOCKS5 acepten tráfico en los siguientes casos:
    • Balanceadores de carga de transferencia (ILB TCP/UDP de nivel 4): las solicitudes de las IPs de NAT de la vinculación de servicio de PSC deberían poder llegar a tus servidores proxy SOCKS5. Por lo tanto, debes permitir todo el intervalo de IPs de la subred NAT para el adjunto de servicio. Para obtener más información, consulta Subredes de Private Service Connect.
    • Balanceadores de carga basados en proxy o HTTP(s) (ILB de proxy de nivel 4 e ILB de nivel 7): todas las solicitudes nuevas proceden del balanceador de carga. Por lo tanto, tus servidores proxy SOCKS5 deben aceptar solicitudes de la subred proxy de tu red de VPC. Para obtener más información, consulta el artículo Subredes de solo proxy para balanceadores de carga basados en Envoy.

Configurar la conectividad privada

Algunos de los servicios gestionados de Google Cloud, como Cloud SQL para MySQL , exponen un adjunto de servicio de PSC para la conectividad privada. En esos casos, puedes saltarte este paso para crear una vinculación de servicio de PSC. Además, puedes usar la vinculación de servicio de PSC proporcionada por el servicio gestionado para crear la vinculación de endpoint de Integration Connectors.

Debes crear un nuevo adjunto de servicio de PSC en los siguientes casos:

  • El servicio gestionado de Google Cloud no expone un archivo adjunto de servicio, sino una dirección IP mediante el acceso a servicios privados.
  • El servicio gestionado de Google Cloud expone un adjunto de servicio, pero no admite la inclusión en la lista de permitidos del proyecto de Integration Connectors para consumir el adjunto de servicio.

En las siguientes secciones se describen en detalle los pasos para crear el adjunto de servicio en estos dos casos. Después de crear la vinculación de servicio, debes crear una vinculación de endpoint y configurar una conexión para usarla.

Crear un adjunto de servicio para un servicio gestionado que restrinja el acceso

Es posible que el servicio gestionado no permita que el proyecto de Integration Connectors se añada a la lista de permitidos para consumir el adjunto de servicio que expone. En este caso, debes crear un balanceador de carga que consuma la vinculación de servicio y exponer el balanceador de carga a Integration Connectors creando otra vinculación de servicio en tu proyecto.

En la siguiente imagen se muestra un servicio gestionado que expone un adjunto de servicio:

Para ver un ejemplo de un servicio gestionado que expone un archivo adjunto de servicio, consulta Conectividad privada para un clúster de MongoDB Atlas.

Crear un balanceador de carga con un NEG de PSC como backend

  1. Crea un NEG para conectarte a un servicio publicado.
  2. Añade un backend a un balanceador de carga de red de proxy interno regional.

Para obtener más información, consulta Crear un NEG de Private Service Connect.

Crear una vinculación de servicio

  1. Crea una subred para NAT de PSC.
  2. Crea una regla de cortafuegos para permitir solicitudes de NAT de PSC al balanceador de carga
  3. Crea una vinculación de servicio.

Para obtener más información, consulta Crear un adjunto de servicio de PSC.

Permitir la conexión de Private Service Connect desde el proyecto Integration Connectors

Para obtener información sobre cómo incluir en la lista de permitidos la conexión de Private Service Connect desde el proyecto de Integration Connectors, consulta Incluir en la lista de permitidos Integration Connectors.

Crear una vinculación de servicio para un servicio gestionado que exponga una dirección IP

Si el servicio gestionado no expone un adjunto de servicio, el tráfico de Integration Connectors debe enviarse a través de tu proyecto.

En la siguiente imagen se muestra un servicio gestionado que no expone un adjunto de servicio:

Para configurar la conectividad privada, sigue estos pasos:

  1. Crea una vinculación de servicio de PSC.
    1. Crea instancias de VM de Compute Engine para ejecutar servidores proxy SOCKS5.
      1. Crea la instancia de proxy 1.
        gcloud compute instances create PROXY_INSTANCE_1 \
                    --project=PROJECT_ID \
                    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
                  

      En función de tus necesidades, puedes crear tantas instancias de VM como necesites.

    2. Crea una regla de cortafuegos para permitir el acceso SSH a tus instancias de VM.
      gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \
                  --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
                  
    3. La instancia de VM se usará para proxy el tráfico de Integration Connectors al servicio gestionado. Instala un proxy SOCKS5 en la instancia de VM. El proxy de autenticación de Cloud SQL admite el encadenamiento a través de un proxy SOCKS5, lo que te permite reenviar tráfico cifrado desde el proxy de autenticación de Cloud SQL a la instancia de Cloud SQL de destino. Por lo tanto, necesitas servidores proxy SOCKS5 para conectarte a una instancia privada de Cloud SQL.

      Los pasos detallados para instalar y configurar un servidor proxy SOCKS5 no se incluyen en este documento. Puedes instalar cualquier proxy SOCKS5 que elijas. En los siguientes pasos se muestra cómo instalar y configurar el servidor proxy SOCKS5 de Dante.

      1. Conéctate a tu instancia de VM mediante SSH.
        gcloud compute ssh \
                    --tunnel-through-iap \
                    PROXY_INSTANCE_1
                
      2. Instala el servidor proxy Dante SOCKS5.
        sudo apt update
                sudo apt install dante-server
      3. Comprueba la interfaz del servidor.
        sudo ip a
      4. Crea una copia de seguridad de la configuración de Dante.
        sudo mv /etc/danted.conf /etc/danted.conf.bak
      5. Crea un archivo de configuración de Dante.
        sudo nano /etc/danted.conf
      6. Copia la siguiente configuración en el archivo de configuración:
        logoutput: /var/log/socks.log
                # Bind the server to the 0.0.0.0 IP address to allow traffic
                # traffic from the load balancer and the health check probes.
                internal: 0.0.0.0 port = 1080
                external: ens4
                clientmethod: none
                socksmethod: none
                user.privileged: root
                user.notprivileged: nobody
                client pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                client block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
                socks pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                socks block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
      7. Reinicia el servidor Dante y comprueba el estado.
        sudo systemctl restart danted
                sudo systemctl status danted
      8. Sal de la instancia de VM.
        exit
    4. Crea un balanceador de carga con la instancia de VM como backend.
      1. Crea un grupo de instancias sin gestionar.
        gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
      2. Añade al grupo las instancias de VM creadas en el paso 3.
        gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
                    --instances=PROXY_INSTANCE_1
      3. Crea una exploración para comprobar el estado y permite el tráfico de la exploración.
        1. Crea la sonda de comprobación del estado.
          gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
                      --port BACKEND_SERVER_PORT --region=REGION

          En este comando, asigna el valor 1080 a BACKEND_SERVER_PORT, que es el puerto predeterminado en el que se ejecutan los servidores proxy SOCKS5.

        2. Crea una regla de cortafuegos para permitir el tráfico de la sonda.
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_HEALTHCHECK \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT \
                      --source-ranges=35.191.0.0/16,130.211.0.0/22
      4. Crea un balanceador de carga interno L4 y permite el tráfico del balanceador de carga.
        1. Crea un servicio de backend.
          gcloud compute backend-services create BACKEND_SERVICE \
                      --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME \
                      --health-checks-region=REGION 
        2. Añade el grupo de instancias al servicio de backend.
          gcloud compute backend-services add-backend BACKEND_SERVICE \
                      --instance-group=INSTANCE_GROUP_NAME \
                      --instance-group-zone=ZONE
        3. Crea una regla de reenvío.
          gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
                      --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \
                      --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \
                      --backend-service-region=REGION
        4. Crea una regla de cortafuegos para permitir el tráfico interno del balanceador de carga al grupo de instancias.
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
                      --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2

      Crear una vinculación de endpoint

      Después de crear una vinculación de servicio para un servicio gestionado, debes crear una vinculación de endpoint y, a continuación, usarla en tu conexión.

      Vinculación de endpoint como dirección IP

      Para obtener instrucciones sobre cómo crear un adjunto de endpoint como dirección IP, consulta Crear un adjunto de endpoint como dirección IP.

      Endpoint adjunto como nombre de host

      En algunos casos, como los back-ends con TLS habilitado, el destino requiere que uses nombres de host en lugar de IPs privadas para realizar la validación de TLS. En los casos en los que se utilice un DNS privado en lugar de una dirección IP para el host de destino, además de crear una conexión de endpoint como dirección IP, también debes configurar zonas gestionadas. Para obtener instrucciones sobre cómo crear un adjunto de endpoint como nombre de host, consulta Crear un adjunto de endpoint como nombre de host.

      Más adelante, cuando configures la conexión para usar el endpoint, podrás seleccionar este endpoint.

      Configurar una conexión para usar el adjunto de endpoint

      Ahora que has creado un adjunto de endpoint, úsalo en tu conexión. Cuando cree una conexión o actualice una que ya tenga, vaya a la sección Destinos, seleccione Endpoint attachment (Endpoint adjunto) como Destination Type (Tipo de destino) y elija el endpoint adjunto que haya creado en la lista Endpoint Attachment (Endpoint adjunto).

      Si has creado una zona gestionada, selecciona Dirección de host como Tipo de destino y usa el registro A que has creado al crear la zona gestionada.

      Consejos para solucionar problemas

      Si tienes problemas con la conectividad privada, sigue las directrices que se indican en esta sección para evitar problemas habituales.

      • Asegúrate de que el proyecto de arrendatario del conector esté incluido en la lista de permitidos de la vinculación de servicio.
      • Comprueba que las reglas de cortafuegos tengan la siguiente configuración:
        • Se debe permitir que el tráfico de la subred del adjunto de servicio de PSC llegue a tu servicio de backend.
        • La sonda de comprobación de estado debe poder acceder a tu sistema backend. Las sondas de comprobación de estado de Google Cloud tienen un intervalo de IP fijo (35.191.0.0/16 y 130.211.0.0/22). Por lo tanto, se debe permitir que estas direcciones IP envíen tráfico a tu servidor backend.
      • La prueba de conectividad de Google Cloud se puede usar para identificar cualquier deficiencia en la configuración de tu red. Para obtener más información, consulta Crear y ejecutar pruebas de conectividad.