Conecta Looker Cloud a través de redes híbridas

1. Introducción

Looker (Google Cloud Core) ofrece aprovisionamiento, configuración y administración simplificados y optimizados de una instancia de Looker desde la consola de Google Cloud. Algunas tareas de administración de instancias también se pueden realizar desde la consola.

Hay tres parámetros de configuración de red disponibles para las instancias de Looker (Google Cloud Core):

  • Pública: La conexión de red usa una dirección IP externa a la que se puede acceder a través de Internet.
  • Privada: La conexión de red usa una dirección IP de nube privada virtual (VPC) interna alojada en Google.
  • Pública y privada: La conexión de red usa una dirección IP pública y una privada, en la que el tráfico entrante se enrutará a través de una IP pública, y el tráfico saliente, a través de una IP privada.

En el instructivo, implementarás una red privada integral de extremo a extremo para admitir la conectividad de Looker a una VPN on-prem-vpc con alta disponibilidad que se puede replicar para cumplir con tus requisitos de conectividad local y de múltiples nubes.

Looker (Google Cloud Core) admite IP privadas para instancias que cumplen con los siguientes criterios:

Qué compilarás

En este instructivo, compilarás una implementación integral de la red privada de Looker en una VPC independiente que tiene conectividad híbrida a múltiples nubes y a nivel local.

Configurarás una red de VPC llamada on-prem-vpc para representar un entorno local. Para tu implementación, on-prem-vpc no existiría, en su lugar, se usaría una red híbrida a tu centro de datos local o al proveedor de servicios en la nube.

A continuación, se presentan los pasos principales del instructivo

  1. Crea una VPC independiente en us-central1
  2. Asigna una subred de IP al Acceso privado a servicios
  3. Implementa la instancia de Looker en la VPC independiente
  4. Crea la infraestructura on-prem-vpc y las redes híbridas
  5. Anuncia y valida el rango de IP de Looker a través de BGP
  6. Integrar y validar la comunicación de datos de Looker y Postgresql

Figure1

8436cc4802b670db.png

Qué aprenderás

  • Cómo crear una VPC y redes híbridas asociadas
  • Cómo implementar Looker en una VPC independiente
  • Cómo crear un clúster on-prem-vpc y redes híbridas asociadas
  • Conecta on-prem-vpc con analytics-vps a través de una VPN con alta disponibilidad
  • Cómo anunciar subredes de Looker a través de redes híbridas
  • Cómo supervisar la infraestructura de red híbrida
  • Cómo integrar una base de datos de Postgresql a Looker Cloud Core

Requisitos

  • Proyecto de Google Cloud

Permisos de IAM

2. Antes de comenzar

Actualiza el proyecto para que sea compatible con el instructivo

En este instructivo, se usa $variables para facilitar la implementación de la configuración de gcloud en Cloud Shell.

Dentro de Cloud Shell, realiza lo siguiente:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. Configuración de VPC

Crea el archivo analytics-vpc

Dentro de Cloud Shell, realiza lo siguiente:

gcloud compute networks create analytics-vpc --project=$projectid --subnet-mode=custom

Crea on-prem-vpc

Dentro de Cloud Shell, realiza lo siguiente:

gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom

Crea la subred de la base de datos de Postgresql

Dentro de Cloud Shell, realiza lo siguiente:

gcloud compute networks subnets create database-subnet-us-central1 --project=$projectid --range=172.16.10.0/27 --network=on-prem-vpc --region=us-central1

Configuración de Cloud Router y NAT

Cloud NAT se usa en el instructivo para instalar paquetes de software porque la instancia de VM de la base de datos no tiene una dirección IP externa.

En Cloud Shell, crea el Cloud Router.

gcloud compute routers create on-prem-cr-us-central1-nat --network on-prem-vpc --region us-central1

En Cloud Shell, crea la puerta de enlace NAT.

gcloud compute routers nats create on-prem-nat-us-central1 --router=on-prem-cr-us-central1-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

Crea la instancia de prueba de la base de datos

Crea una instancia de postgres-database que se usará para probar y validar la conectividad a Looker.

En Cloud Shell, crea la instancia.

gcloud compute instances create postgres-database \
    --project=$projectid \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --subnet=database-subnet-us-central1 \
    --no-address \
   --image=projects/ubuntu-os-cloud/global/images/ubuntu-2304-lunar-amd64-v20230621 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt -y install postgresql postgresql-client postgresql-contrib -y"

Crea reglas de firewall

Para permitir que IAP se conecte a tus instancias de VM, crea una regla de firewall que haga lo siguiente:

  • Se aplica a todas las instancias de VM a las que deseas que se pueda acceder mediante IAP.
  • Permite el tráfico de entrada del rango de IP 35.235.240.0/20. Este rango contiene todas las direcciones IP que IAP usa para el reenvío de TCP.

Desde Cloud Shell

gcloud compute firewall-rules create on-prem-ssh \
    --network on-prem-vpc --allow tcp:22 --source-ranges=35.235.240.0/20

4. Acceso de servicio privado

El acceso privado a los servicios es una conexión privada entre tu red de VPC y una red que pertenece a Google o terceros. Las entidades que proporcionan servicios, como Google o terceros, también se conocen como productores de servicios. Looker Cloud Core es un productor de servicios.

La conexión privada permite que las instancias de VM en tu red de VPC y los servicios a los que accedes se comuniquen de forma exclusiva mediante direcciones IP internas.

En un nivel alto, para usar el acceso privado a los servicios, debes asignar un rango de direcciones IP (bloque CIDR) en tu red de VPC y, luego, crear una conexión privada con un productor de servicios.

Asignar un rango de direcciones IP para los servicios

Antes de crear una conexión privada, debes asignar un rango de direcciones IPv4 para que lo use la red de VPC del productor de servicios. Esto garantiza que no haya una colisión de direcciones IP entre tu red de VPC y la red del productor de servicios.

Cuando asignas un rango en tu red de VPC, ese rango no es apto para subredes (rangos principales y secundarios) ni destinos de rutas estáticas personalizadas.

No se admite el uso de rangos de direcciones IPv6 con acceso privado a servicios.

Habilita la API de Service Networking para tu proyecto en la consola de Google Cloud. Cuando habilites la API, es posible que debas actualizar la página de la consola para confirmar que se habilitó.

Crea una asignación de IP

Para especificar un rango de direcciones y una longitud de prefijo (máscara de subred), usa las direcciones y las marcas de longitud de prefijo. Por ejemplo, para asignar el bloque CIDR 192.168.0.0/22, especifica 192.168.0.0 para la dirección y 22 para la longitud de prefijo.

En Cloud Shell, crea la asignación de IP para Looker.

gcloud compute addresses create psa-range-looker \
    --global \
    --purpose=VPC_PEERING \
    --addresses=192.168.0.0 \
    --prefix-length=22 \
    --description="psa range for looker" \
    --network=analytics-vpc

En Cloud Shell, valida la asignación de IP.

gcloud compute addresses list --global --filter="purpose=VPC_PEERING"

Ejemplo:

userl@cloudshell$ gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
NAME: psa-range-looker
ADDRESS/RANGE: 192.168.0.0/22
TYPE: INTERNAL
PURPOSE: VPC_PEERING
NETWORK: analytics-vpc
REGION: 
SUBNET: 
STATUS: RESERVED

Crea una conexión privada

Después de crear un rango asignado, puedes crear una conexión privada a un productor de servicios, Looker Cloud Core. La conexión privada establece una conexión de intercambio de tráfico entre redes de VPC entre tu red de VPC y la del productor de servicios una vez que se establece la instancia de Looker.

Las conexiones privadas constituyen una relación uno a uno entre tu red de VPC y un productor de servicios. Si un solo productor de servicios ofrece varios servicios, solo necesitas una conexión privada para todos ellos.

Si te conectas a varios productores de servicios, usa una asignación única para cada uno de ellos. Esta práctica te ayuda a administrar la configuración de tu red, como rutas y reglas de firewall, para cada productor de servicios.

Dentro de Cloud Shell, crea una conexión privada y toma nota del nombre de la operación.

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc

Ejemplo:

user@cloudshell$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

En Cloud Shell, verifica si la operación se realizó correctamente. Reemplaza OPERATION_NAME por el nombre generado en el paso anterior.

gcloud services vpc-peerings operations describe \
    --name=OPERATION_NAME

Ejemplo:

user@cloudshell$ gcloud services vpc-peerings operations describe \
    --name=operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

5. Crea una instancia de Looker (Google Cloud Core)

Antes de comenzar

Habilita la API de Looker para tu proyecto en la consola de Google Cloud. Cuando habilites la API, es posible que debas actualizar la página de la consola para confirmar que se habilitó.

Configura un cliente de OAuth para autenticar y acceder a la instancia.

En la siguiente sección, deberás usar el ID y el Secreto de cliente de OAuth para crear la instancia de Looker.

No se requieren orígenes autorizados de JavaScript ni URI de redireccionamiento.

103601bca0b6ebe8.png

En la consola de Cloud, crea una instancia basada en las capturas de pantalla proporcionadas.

Navega a BUSCAR → CREAR UNA INSTANCIA.

Propaga el ID y el secreto de cliente de OAuth que se crearon antes.

b780ed751824176c.png

3fe880e26a81a756.png

91acffd74c68a067.png

Selecciona CREAR.

Mientras se crea la instancia, se te redireccionará a la página Instancias en la consola. Es posible que debas actualizar la página para ver el estado de la instancia nueva. También puedes ver tu actividad de creación de instancias haciendo clic en el ícono de notificaciones en el menú de la consola de Google Cloud. Mientras se crea la instancia, el ícono de notificaciones del menú de la consola de Google Cloud estará rodeado por un ícono de carga.

Después de crear la instancia de Looker, se genera una URL de la instancia. Anota la URL.

5ac8a1b8b438dce6.png

6. Actualiza el ID de cliente de OAuth 2.0

En la siguiente sección, deberás agregar /oauth2callback a la URL de la instancia para actualizar el URI de redireccionamiento autorizado que se creó anteriormente.

Cuando termines, puedes usar la URL de la instancia para acceder a la IU de Looker.

En la consola de Cloud, navega a APIs & SERVICIOS → CREDENCIALES

Selecciona tu ID de cliente de OAuth 2.0 y actualiza la URL de tu instancia, como se muestra a continuación:

793c5b82ec34fb1f.png

7. Valida el acceso a Looker

En la consola de Cloud, navega a Looker y selecciona la URL de tu instancia para abrir la IU de Looker.

9d132a67c532279e.png

Después del lanzamiento, verás la página de destino según la siguiente captura de pantalla, que confirma tu acceso a Looker Cloud Core.

b77055fd674f8a69.png

8. Conectividad híbrida

En la siguiente sección, crearás un Cloud Router que te permita intercambiar rutas de forma dinámica entre tu Nube privada virtual (VPC) y la red de intercambio de tráfico usando el Protocolo de puerta de enlace de frontera (BGP).

Cloud Router puede configurar una sesión de BGP a través de un túnel de Cloud VPN para conectar tus redes. Aprende automáticamente los nuevos rangos de direcciones IP de subredes y los notifica a tu red de intercambio de tráfico.

En el instructivo, implementarás una VPN con alta disponibilidad entre analytics-vpc y on-prem-vpc para ilustrar la conectividad privada a Looker.

Crea la puerta de enlace de VPN con alta disponibilidad para analytics-vpc

Cuando se crea cada puerta de enlace, se asignan automáticamente dos direcciones IPv4 externas, una para cada interfaz de puerta de enlace. Toma nota de estas direcciones IP para usarlas más adelante en los pasos de configuración.

En Cloud Shell, crea la puerta de enlace de VPN con alta disponibilidad

gcloud compute vpn-gateways create analytics-vpn-gw \
   --network=analytics-vpc\
   --region=us-central1

Crea la puerta de enlace de VPN con alta disponibilidad para on-prem-vpc

Cuando se crea cada puerta de enlace, se asignan automáticamente dos direcciones IPv4 externas, una para cada interfaz de puerta de enlace. Toma nota de estas direcciones IP para usarlas más adelante en los pasos de configuración.

En Cloud Shell, crea la puerta de enlace de VPN con alta disponibilidad.

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

Valida la creación de entornos de VPN con alta disponibilidad

En la consola, navega a CONECTIVIDAD HÍBRIDA → VPN → GATEWAYS DE CLOUD VPN.

a3973b2bbb832bae.png

Crea el Cloud Router para analytics-vpc

En Cloud Shell, crea el Cloud Router ubicado en us-central1

gcloud compute routers create analytics-cr-us-central1 \
   --region=us-central1 \
   --network=analytics-vpc\
   --asn=65001

Crea el Cloud Router para on-prem-vpc

En Cloud Shell, crea el Cloud Router ubicado en us-central1

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

Crea los túneles VPN para analytics-vpc

Crearás dos túneles VPN en cada puerta de enlace de VPN con alta disponibilidad.

Crear túnel VPN0

En Cloud Shell, crea tunnel0:

gcloud compute vpn-tunnels create analytics-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 0

Crear túnel VPN1

En Cloud Shell, crea tunnel1:

gcloud compute vpn-tunnels create analytics-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 1

Crea los túneles VPN para on-prem-vpc

Crearás dos túneles VPN en cada puerta de enlace de VPN con alta disponibilidad.

Crear túnel VPN0

En Cloud Shell, crea tunnel0:

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

Crear túnel VPN1

En Cloud Shell, crea tunnel1:

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

Validar la creación del túnel VPN

En la consola, navega a CONECTIVIDAD HÍBRIDA → VPN → TUNNELS DE CLOUD VPN.

61c09b3d3102149d.png

9. Establecer vecinos de BGP

Crea sesiones de BGP

En esta sección, configurarás las interfaces de Cloud Router y los pares de BGP.

Crea una interfaz de BGP y un intercambio de tráfico para analytics-vpc

En Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel0 \
    --region us-central1

En Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

En Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel1 \
    --region us-central1

En Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

Crea una interfaz de BGP y un intercambio de tráfico para on-prem-vpc

En Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-analytics-vpc \
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

En Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel0 \
    --interface if-tunnel1-to-analytics-vpc \
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

En Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-analytics-vpc \
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

En Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel1\
    --interface if-tunnel2-to-analytics-vpc \
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

Navega a CONECTIVIDAD híbrida → VPN para ver los detalles del túnel VPN.

ddd4a8f851d44fd6.png

Valida las rutas aprendidas de analytics-vpc a través de VPN con alta disponibilidad

Debido a que se establecieron los túneles VPN con alta disponibilidad y las sesiones de BGP, las rutas de on-prem-vpc se aprenden desde analytics-vpc. En la consola, ve a Red de VPC → Redes de VPC → analytics-vpc → ROUTES → REGIÓN → us-central1 → VISTA

Observa que analytics-vpc aprendió las rutas de on-prem-vpc database-subnet-us-central1 172.16.10.0/27.

57c7898390db4bcb.png

Valida que on-prem-vpc no aprendieron rutas en una VPN con alta disponibilidad

La instancia analytics-vpc no tiene una subred, por lo que Cloud Router no anunciará ninguna subred a on-prem-vpc . En la consola, ve a Red de VPC → Redes de VPC → on-prem-vpc → ROUTES → REGIÓN → us-central1 → VISTA

5b007e46a7c7026.png

10. Anuncia la subred de Looker a un entorno local

El Cloud Router analytics-cr-us-central1 no anuncia automáticamente la subred de acceso privado a servicios (PSA) de Looker porque la subred está asignada al PSA, no a la VPC.

Deberás crear un anuncio de ruta personalizado desde analytics-cr-central1 para la subred PSA 192.168.0.0/22 (psa-range-looker), que se anunciará en el entorno local y las cargas de trabajo usarán para acceder a Looker.

En la consola, navega a CONECTIVIDAD HÍBRIDA → ROUTERS DE LA NUBE → analytics-cr-us-central1 y, luego, selecciona EDITAR.

En la sección Rutas anunciadas, selecciona la opción Crear rutas personalizadas, actualiza los campos según el siguiente ejemplo, selecciona LISTO y, luego, haz clic en GUARDAR.

87f95ee3d1cd8521.png

11. Validar que on-prem-vpc haya aprendido la subred de Looker

Ahora, on-prem-vpc podrá acceder a la subred del PSA de Looker, ya que se anunció desde analytics-cr-us-central1 como un anuncio de ruta personalizado.

En la consola, ve a RED DE VPC → REDES de VPC → on-prem-vpc → ROUTES → REGIÓN → us-central1 → VISTA

Observa las rutas de Looker anunciadas desde analytics-vpc:

a987a76fd57ddedd.png

12. Validar el intercambio de tráfico de VPC actual

La conexión entre Looker Cloud Core y analytics-vpc se realiza a través del intercambio de tráfico entre VPC, que permite el intercambio de rutas personalizadas aprendidas a través de BGP. En el instructivo, analytics-vpc deberá publicar en Looker las rutas que aprendió on-prem-vpc. Para habilitar esta funcionalidad, el intercambio de tráfico entre VPC requiere una actualización para exportar rutas personalizadas.

Valida las rutas importadas y exportadas actuales.

Navega a RED DE VPC → PEERING DE RED DE VPC → servicenetworking-googleapis-com

f6d9395712934cd8.png

En la siguiente captura de pantalla, se detalla la importación de analytics-vpc que importa el psa-range-looker de las redes de VPC con intercambio de tráfico administradas por Google, servicesnetworking.

86a0e8c3534c6986.png

La opción RUTAS EXPORTADAS reveló que no se exportaron rutas a la red de VPC con intercambio de tráfico, ya que 1) las subredes no están configuradas en analytics-vpc 2) La exportación de rutas personalizadas no está seleccionada

a52de427fa73fb22.png

13. Actualiza el intercambio de tráfico entre VPC

Navega a RED DE VPC → PEERING DE RED DE VPC → servicenetworking-googleapis-com → EDITAR

Selecciona EXPORTAR RUTAS PERSONALIZADAS → GUARDAR.

a2309e4c3a7cee80.png

14. Valida el intercambio de tráfico de VPC actualizado

Valida las rutas exportadas.

Navega a RED DE VPC → PEERING DE RED DE VPC → servicenetworking-googleapis-com

Si seleccionas RUTAS EXPORTADAS, se mostrarán las rutas on-prem-vpc (subred de base de datos 172.16.10.0/27) que analytics-vpc exporta a las redes de VPC con intercambio de tráfico que alojan Looker.

47e953268d78a469.png

15. Creación de bases de datos de PostgreSQL de Looker

En la siguiente sección, realizarás una conexión SSH a la VM de postgres-database con Cloud Shell.

Dentro de Cloud Shell, realiza una conexión SSH a la instancia postgres-database**.**

 gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

Dentro del SO, identifica y anota la dirección IP (ens4) de la instancia de postgres-database.

ip a

Ejemplo:

user@postgres-database:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
    link/ether 42:01:ac:10:0a:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 172.16.10.2/32 metric 100 scope global dynamic ens4
       valid_lft 84592sec preferred_lft 84592sec
    inet6 fe80::4001:acff:fe10:a02/64 scope link 
       valid_lft forever preferred_lft forever

En el SO, accede a postgresql.

sudo -u postgres psql postgres

Dentro del SO, ingresa la solicitud de contraseña.

\password postgres

En el SO, establece la contraseña en postgres (ingresa la misma contraseña dos veces)

postgres

Ejemplo:

user@postgres-database:~$ sudo -u postgres psql postgres
\password postgres
psql (13.11 (Debian 13.11-0+deb11u1))
Type "help" for help.

postgres=# \password postgres
Enter new password for user "postgres": 
Enter it again: 

Dentro del SO, sal de postgres.

\q

Ejemplo:

postgres=# \q
user@postgres-database:~$ 

En la siguiente sección, insertarás la dirección IP de la instancia de postgres-database y la subred de Acceso privado a Google de Looker (192.168.0.0/22) en el archivo pg_hba.conf debajo de las conexiones locales IPv4, como se muestra en la siguiente captura de pantalla:

178364a8ee9b6233.png

sudo nano /etc/postgresql/15/main/pg_hba.conf

En la siguiente sección, quita el comentario de postgresql.conf para escuchar todos los “*” direcciones IP según la siguiente captura de pantalla:

sudo nano /etc/postgresql/15/main/postgresql.conf

Antes:

aad52092c0a9408.png

Después:

7e80b916d29e097c.png

Dentro del SO, reinicia el servicio de postgresql.

sudo service postgresql restart

En el SO, valida el estado de postgresql como activo.

sudo service postgresql status

Ejemplo:

En el SO, valida el estado de postgresql como activo.

user@postgres-database$ sudo service postgresql status
 postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Sat 2023-07-01 23:40:59 UTC; 7s ago
    Process: 4073 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4073 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Jul 01 23:40:59 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Jul 01 23:40:59 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

16. Crea la base de datos de postgres

En la siguiente sección, crearás una base de datos de postgres llamada postgres_looker y el esquema looker_schema que se usa para validar Looker a la conectividad local.

Dentro del SO, accede a postgres.

sudo -u postgres psql postgres

Dentro del SO, crea la base de datos.

create database postgres_looker;

Dentro del SO, enumera la base de datos.

\l

Dentro del SO, crea el Looker de usuarios con el Looker de contraseñas.

create user postgres_looker with password 'postgreslooker';

Dentro del SO, conéctate a la base de datos.

\c postgres_looker;

Dentro del SO, crea el esquema de looker-schema y sal al prompt de Cloud Shell.

create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit

Ejemplo:

user@postgres-database$ sudo -u postgres psql postgres
psql (15.3 (Ubuntu 15.3-0ubuntu0.23.04.1))
Type "help" for help.

postgres=# create database postgres_looker;
CREATE DATABASE
postgres=# \l
                                                List of databases
      Name       |  Owner   | Encoding | Collate |  Ctype  | ICU Locale | Locale Provider |   Access privileges   
-----------------+----------+----------+---------+---------+------------+-----------------+-----------------------
 postgres        | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 postgres_looker | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 template0       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
 template1       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
(4 rows)

postgres=# create user postgres_looker with password 'postgreslooker';
CREATE ROLE
postgres=# \c postgres_looker;
You are now connected to database "postgres_looker" as user "postgres".
postgres_looker=# create schema looker_schema;
CREATE SCHEMA
postgres_looker=# create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
CREATE TABLE
postgres_looker=# exit

Sal del SO y vuelve a Cloud Shell.

\q
exit

17. Crea un firewall en on-prem-vpc

En la siguiente sección, crearás un firewall de Ingress con registro que permita que la subred de Looker se comunique con la instancia de postgres-database.

En Cloud Shell, crea el firewall on-prem-vpc.

gcloud compute --project=$projectid firewall-rules create looker-access-to-postgres --direction=INGRESS --priority=1000 --network=on-prem-vpc --action=ALLOW --rules=all --source-ranges=192.168.0.0/22 --enable-logging

18. Crea un DNS privado en analytics-vpc

Aunque Looker está implementado en una VPC administrada por Google, se admite el acceso al DNS privado analytics-vpc mediante el intercambio de tráfico con redes de servicios.

En la siguiente sección, crearás una zona de DNS privado en analytics-vpc que consta de un registro A de la instancia de postgres-database el nombre de dominio completamente calificado (postgres.analytics.com)y la dirección IP).

En Cloud Shell, crea la zona privada analytics.com.

gcloud dns --project=$projectid managed-zones create gcp-private-zone --description="" --dns-name="analytics.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/analytics-vpc"

En Cloud Shell, identifica la dirección IP de la instancia de postgres-database.

gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:

Ejemplo:

user@cloudshell$ gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:
  networkIP: 172.16.10.2

En Cloud Shell, crea el registro A y asegúrate de agregar la dirección IP que se identificó previamente.

gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="your-postgres-database-ip"

Ejemplo:

user@cloudshell$ gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="172.16.10.2"
NAME: postgres.analytics.com.
TYPE: A
TTL: 300
DATA: 172.16.10.2

Desde Cloud Shell, intercambia el tráfico de dns-suffix analytics.com. a las redes de servicios, lo que permite que Looker acceda a la zona privada analytics-vpc.

gcloud services peered-dns-domains create looker-com --network=analytics-vpc --service=servicenetworking.googleapis.com --dns-suffix=analytics.com.

19. Integra Looker a la base de datos Postgres de Postgres

En la siguiente sección, usarás la consola de Cloud para crear una conexión de base de datos a la instancia local de postgres-database.

En la consola de Cloud, navega a Looker y selecciona la URL de tu instancia para abrir la IU de Looker.

9d132a67c532279e.png

Después del lanzamiento, verás la página de destino como se muestra en la siguiente captura de pantalla.

b77055fd674f8a69.png

Navega a ADMINISTRADOR → BASE DE DATOS → CONEXIONES → Selecciona AGREGAR CONEXIÓN.

Completa los detalles de la conexión según la siguiente captura de pantalla y selecciona CONECTAR

c8cca15252c2020d.png

Se estableció correctamente la conexión

3e51b7e2cc62fb45.png

20. Valida la conectividad de Looker

En la siguiente sección, aprenderás a validar la conectividad de Looker a la base de datos postgres-database en on-prem-vpc con la “prueba” de Looker. y TCPDUMP.

En Cloud Shell, inicia sesión en postgres-database si se agotó el tiempo de espera de la sesión.

Dentro de Cloud Shell, realiza lo siguiente:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

Desde el SO, crea un filtro TCPDUMP con la subred psa-range-looker 192.168.0.0/22.

sudo tcpdump -i any net 192.168.0.0/22 -nn

Navega a Conexión de datos ADMINISTRADOR → BASE DE DATOS → CONEXIONES → Seleccionar → Prueba

Una vez que se seleccione Test, Looker se conectará correctamente a postgres-database como se indica a continuación:

ef25b837b6a41fe.png

Regresa a la terminal del SO y valida que TCPDUMP haya identificado que psc-range-looker se está conectando a la instancia local de postgres-database.

Agrega una nota para indicar que se mostrará cualquier IP del rango del PSA desde Looker

user@postgres-database$ sudo tcpdump -i any net 192.168.0.0/22 -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
00:16:55.121631 ens4  In  IP 192.168.1.24.46892 > 172.16.10.2.5432: Flags [S], seq 2221858189, win 42600, options [mss 1366,sackOK,TS val 4045928414 ecr 0,nop,wscale 7], length 0
00:16:55.121683 ens4  Out IP 172.16.10.2.5432 > 192.168.1.24.46892: Flags [S.], seq 1464964586, ack 2221858190, win 64768, options [mss 1420,sackOK,TS val 368503074 ecr 4045928414,nop,wscale 7], length 0

21. Recomendaciones de seguridad

Hay algunas recomendaciones de seguridad y prácticas recomendadas relacionadas con la protección de la base de datos de Looker y Postgres. Esas son algunas opciones:

  • Configurar los permisos de la cuenta de base de datos con menos privilegios para Looker que aún le permita realizar las funciones necesarias
  • Datos en tránsito entre el cliente y la IU de Looker, y de Looker a la base de datos encriptados con TLS 1.2 y versiones posteriores
  • Los datos en reposo están encriptados de forma predeterminada. El cliente también puede aprovechar CMEK para instancias de Looker ( https://cloud.google.com/looker/docs/looker-core-cmek) y Postgres ( https://cloud.google.com/sql/docs/postgres/configure-cmek).
  • Control de acceso de Looker: Los administradores de Looker pueden controlar lo que un principio o grupo de usuarios puede ver y hacer en Looker otorgando acceso al contenido, a los datos y a las funciones. Estas opciones permiten que el administrador de Looker defina roles específicos, como el modelo y el conjunto de permisos, y cree un control de acceso detallado a los datos.
  • Looker admite registros de auditoría y de acceso a los datos, que capturan quién hizo qué, cuándo y dónde. Los registros de auditoría están habilitados de forma predeterminada, mientras que los registros de acceso a los datos deben habilitarse de forma explícita.
  • Actualmente, VPC-SC admite instancias de Incorporación y Enterprise que están configuradas solo con IP privada.

22. Limpia

Borra la instancia de Looker Cloud Core y ve a:

BUSCAR → Instructivo de Looker → BORRAR

e5a2e3af9e7ffd40.png

En Cloud Shell, borra los componentes del instructivo.

gcloud compute vpn-tunnels delete analytics-vpc-tunnel0 analytics-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete analytics-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet

gcloud compute routers delete analytics-cr-us-central1 on-prem-cr-us-central1 on-prem-cr-us-central1-nat --region=us-central1 --quiet

gcloud compute instances delete postgres-database --zone=us-central1-a --quiet

gcloud compute networks subnets delete database-subnet-us-central1 --region=us-central1 --quiet

gcloud compute firewall-rules delete looker-access-to-postgres on-prem-ssh --quiet

gcloud dns record-sets delete postgres.analytics.com. --type=A --zone=gcp-private-zone
        
gcloud dns managed-zones delete gcp-private-zone

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute addresses delete psa-range-looker --global --quiet

gcloud compute networks delete analytics-vpc --quiet

23. Felicitaciones

Felicitaciones, configuraste y validaste correctamente la conectividad de Looker mediante redes híbridas, lo que permite la comunicación de datos en entornos locales y de múltiples nubes.

También pudiste probar con éxito la conectividad de Looker Cloud Core a la base de datos postgres con la “prueba” de Looker Connect y TCPDUMP en la instancia de postgres-database.

Cosmopup cree que los instructivos son increíbles.

e6d3675ca7c6911f.jpeg

Lecturas adicionales y Videos

Documentos de referencia