1. Introducción
Looker (Google Cloud Core) proporciona 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 configuraciones 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 desde Internet.
- Privada: La conexión de red usa una dirección IP interna de nube privada virtual (VPC) alojada por Google.
- Pública y privada: La conexión de red usa una dirección IP pública y una dirección IP privada, en la que el tráfico entrante se enruta a través de la IP pública y el tráfico saliente se enruta a través de la IP privada.
En este instructivo, implementarás una red privada integral de extremo a extremo para admitir la conectividad de Looker a una VPC local a través de una VPN con alta disponibilidad que se puede replicar para satisfacer tus requisitos de conectividad local y de múltiples nubes.
Looker (Google Cloud Core) admite IPs privadas para las instancias que cumplen con los siguientes criterios:
- Las ediciones de instancias deben ser Enterprise o Embed.
Qué compilarás
En este instructivo, compilarás una implementación integral de la red privada de Looker en una VPC independiente que tenga conectividad híbrida con múltiples nubes y entornos locales.
Configurarás una red de VPC llamada on-prem-vpc para representar un entorno local. En tu implementación, la VPC local no existiría. En su lugar, se usaría la conexión de redes híbrida a tu centro de datos local o proveedor de servicios en la nube.
A continuación, se indican los pasos principales del instructivo
- Crea una VPC independiente en us-central1
- Asigna una subred de IP al acceso privado a servicios
- Implementa la instancia de Looker en la VPC independiente
- Crea la red on-prem-vpc y la red híbrida
- Anuncia y valida el rango de IP de Looker a través de BGP
- Integrar y validar la comunicación de datos de Looker y PostgreSQL
Figure1

Qué aprenderás
- Cómo crear una VPC y redes híbridas asociadas
- Cómo implementar Looker en una VPC independiente
- Cómo crear una red on-prem-vpc y redes híbridas asociadas
- Conecta la VPC local con la VPS de Analytics a través de la VPN con alta disponibilidad
- Cómo anunciar subredes de Looker a través de redes híbridas
- Cómo supervisar la infraestructura de redes híbridas
- Cómo integrar una base de datos de PostgreSQL con Looker Cloud Core
Requisitos
- Proyecto de Google Cloud
Permisos de IAM
2. Antes de comenzar
Actualiza el proyecto para que admita el instructivo
En este instructivo, se usan variables para facilitar la implementación de la configuración de gcloud en Cloud Shell.
Dentro de Cloud Shell, haz lo siguiente:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Configuración de la VPC
Crea la red analytics-vpc
Dentro de Cloud Shell, haz lo siguiente:
gcloud compute networks create analytics-vpc --project=$projectid --subnet-mode=custom
Crea la VPC local
Dentro de Cloud Shell, haz 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, haz 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 la instalación de paquetes de software porque la instancia de VM de la base de datos no tiene una dirección IP externa.
Dentro de Cloud Shell, crea el Cloud Router.
gcloud compute routers create on-prem-cr-us-central1-nat --network on-prem-vpc --region us-central1
Dentro de 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.
Dentro de 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 cumpla con lo siguiente:
- Se aplica a todas las instancias de VM a las que deseas acceder mediante IAP.
- Permite el tráfico de entrada desde el 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 privado a servicios
El acceso privado a 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 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.
Asigna un rango de direcciones IP para los servicios
Antes de crear una conexión privada, debes asignar un rango de direcciones IPv4 para que la red de VPC del productor de servicios lo use. 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 los destinos de las 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 los parámetros addresses y prefix-length. 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.
Dentro de 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
Dentro de 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 de red de VPC entre tu red de VPC y la red 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 el productor de servicios. Si un solo productor de servicios ofrece varios servicios, solo necesitas una conexión privada para todos los servicios del productor.
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 las rutas y las reglas de firewall, para cada productor de servicios.
Dentro de Cloud Shell, crea una conexión privada y anota el 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.
Dentro de Cloud Shell, verifica si la operación se realizó correctamente. Para ello, reemplaza OPERATION_NAME por el nombre que se generó 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 autenticarte y acceder a la instancia.
En la siguiente sección, deberás usar el ID y el secreto del cliente de OAuth para crear la instancia de Looker.
No se requieren orígenes de JavaScript autorizados ni URIs de redireccionamiento.

Dentro de Cloud Console, crea una instancia basada en las capturas de pantalla proporcionadas.
Navega a LOOKER → CREATE AN INSTANCE.
Completa el ID de cliente y el secreto de OAuth que creaste anteriormente.



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 tu nueva instancia. También puedes ver la 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 tu instancia, el ícono de notificaciones en el 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 instancia. Anota la URL.

6. Actualiza el ID de cliente de OAuth 2.0
En la siguiente sección, deberás actualizar el URI de redireccionamiento autorizado del ID de cliente de OAuth que creaste anteriormente agregando /oauth2callback a la URL de la instancia.
Una vez que se complete, podrás usar la URL de la instancia para acceder a la IU de Looker.
En la consola de Cloud, navega a APIs & SERVICES → CREDENTIALS.
Selecciona tu ID de cliente de OAuth 2.0 y actualiza la URL de la instancia, como se muestra en el siguiente ejemplo:

7. Valida el acceso a Looker
En Cloud Console, navega a Looker y selecciona la URL de tu instancia que abrirá la IU de Looker.

Una vez que se inicie, verás la página de destino que se muestra en la siguiente captura de pantalla, en la que se confirma tu acceso a Looker Cloud Core.

8. Conectividad híbrida
En la siguiente sección, crearás un Cloud Router que te permitirá intercambiar rutas de forma dinámica entre tu nube privada virtual (VPC) y la red de intercambio de tráfico mediante el Protocolo de puerta de enlace fronteriza (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 rangos de direcciones IP de subredes nuevos y los anuncia en 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 de forma automática dos direcciones IPv4 externas, una para cada interfaz de puerta de enlace. Anota estas direcciones IP para usarlas más adelante en los pasos de configuración.
Dentro de 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 de forma automática dos direcciones IPv4 externas, una para cada interfaz de puerta de enlace. Anota estas direcciones IP para usarlas más adelante en los pasos de configuración.
Dentro de 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 la puerta de enlace de VPN con alta disponibilidad
En la consola, navega a CONECTIVIDAD HÍBRIDA → VPN → PUERTAS DE ENLACE DE CLOUD VPN.

Crea el Cloud Router para analytics-vpc
Dentro de 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
Dentro de 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.
Crea el túnel VPN0
Dentro de 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
Crea el túnel VPN1
Dentro de 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.
Crea el túnel VPN0
Dentro de 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
Crea el túnel VPN1
Dentro de 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
Valida la creación del túnel VPN
En la consola, navega a CONECTIVIDAD HÍBRIDA → VPN → TÚNELES DE CLOUD VPN.

9. Establece vecinos de BGP
Crea sesiones de BGP
En esta sección, configurarás interfaces de Cloud Router y pares de BGP.
Crea una interfaz de BGP y un intercambio de tráfico para analytics-vpc
Dentro de 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
Dentro de 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
Dentro de 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
Dentro de 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
Dentro de 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
Dentro de 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
Dentro de 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
Dentro de 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 de VPN.

Valida las rutas aprendidas de analytics-vpc a través de la VPN con alta disponibilidad
Debido a que se establecieron los túneles de VPN con alta disponibilidad y las sesiones de BGP, las rutas de on-prem-vpc se aprenden de analytics-vpc. En la consola, navega a Red de VPC → Redes de VPC → analytics-vpc → RUTAS → REGIÓN → us-central1 → VER.
Observa que analytics-vpc aprendió rutas de la subred de la base de datos de on-prem-vpc database-subnet-us-central1 172.16.10.0/27

Valida que on-prem-vpc no haya aprendido rutas a través de la VPN con alta disponibilidad
La VPC de Analytics no tiene una subred, por lo que Cloud Router no anunciará ninguna subred a la VPC local . En la consola, navega a Red de VPC → Redes de VPC → on-prem-vpc → RUTAS → REGIÓN → us-central1 → VER.

10. Anuncia la subred de Looker a la red 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 a PSA, no a la VPC.
Deberás crear un anuncio de ruta personalizado desde analytics-cr-central1 para la subred de PSA 192.168.0.0/22 (psa-range-looker) que se anunciará al entorno local y que usarán las cargas de trabajo para acceder a Looker.
En la consola, navega a CONECTIVIDAD HÍBRIDA → ENRUTADORES DE CLOUD → 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.

11. Valida que on-prem-vpc haya aprendido la subred de Looker
La VPC local ahora 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, navega a RED DE VPC → REDES DE VPC → on-prem-vpc → RUTAS → REGIÓN → us-central1 → VER.
Observa las rutas de Looker anunciadas desde analytics-vpc:

12. Valida el intercambio de tráfico entre VPC actual
La conexión entre Looker Cloud Core y analytics-vpc se realiza a través del intercambio de tráfico de VPC, lo que permite el intercambio de rutas personalizadas aprendidas a través de BGP. En el instructivo, la vpc de Analytics deberá publicar las rutas aprendidas por la vpc local en Looker. 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 → INTERCAMBIO DE TRÁFICO ENTRE REDES DE VPC → servicenetworking-googleapis-com.

En la siguiente captura de pantalla, se detalla la importación de analytics-vpc del psa-range-looker desde la red de VPC con intercambio de tráfico administrada por Google, servicesnetworking.

La selección de rutas EXPORTADAS no revela ninguna ruta exportada a la red de VPC con intercambio de tráfico, ya que 1) las subredes no están configuradas en la vpc-analytics y 2) no se seleccionó la opción Exportar rutas personalizadas.

13. Actualiza el intercambio de tráfico entre VPC
Navega a RED DE VPC → INTERCAMBIO DE TRÁFICO ENTRE REDES DE VPC → servicenetworking-googleapis-com → EDITAR.
Selecciona EXPORTAR RUTAS PERSONALIZADAS → GUARDAR.

14. Valida el intercambio de tráfico entre VPC actualizado
Valida las rutas exportadas.
Navega a RED DE VPC → INTERCAMBIO DE TRÁFICO ENTRE REDES DE VPC → servicenetworking-googleapis-com.
Si seleccionas EXPORTED ROUTES, se revelan las rutas de on-prem-vpc (subred de la base de datos 172.16.10.0/27) que analytics-vpc exportó a la red de VPC con intercambio de tráfico que aloja Looker.

15. Creación de bases de datos de Looker Postgres
En la siguiente sección, realizarás una conexión SSH a la VM 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
Dentro del SO, accede a postgresql.
sudo -u postgres psql postgres
Dentro del SO, ingresa la solicitud de contraseña.
\password postgres
Dentro del SO, configura 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 en las conexiones locales de IPv4, como se muestra en la siguiente captura de pantalla:

sudo nano /etc/postgresql/15/main/pg_hba.conf
En la siguiente sección, quita la marca de comentario de postgresql.conf para que escuche todas las direcciones IP “*”, como se muestra en la siguiente captura de pantalla:
sudo nano /etc/postgresql/15/main/postgresql.conf
Antes:

Después:

Dentro del SO, reinicia el servicio de PostgreSQL.
sudo service postgresql restart
Dentro del SO, valida que el estado de postgresql sea activo.
sudo service postgresql status
Ejemplo:
Dentro del SO, valida que el estado de postgresql sea 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 un esquema llamado looker_schema que se usan para validar la conectividad de Looker con las instalaciones locales.
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 usuario looker con la contraseña looker.
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 looker-schema y sal del símbolo del sistema 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 para volver a Cloud Shell.
\q
exit
17. Crea un firewall en on-prem-vpc
En la siguiente sección, crea un firewall de entrada con registro que permita la comunicación de la subred de Looker 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 se implementa en una VPC administrada por Google, se admite el acceso al DNS privado de analytics-vpc a través del intercambio de tráfico con Service Networking.
En la siguiente sección, crearás una zona de DNS privada en analytics-vpc que constará de un registro A del nombre de dominio completamente calificado (postgres.analytics.com)) y la dirección IP de la instancia de postgres-database.
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"
Desde 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
Desde Cloud Shell, crea el registro A y asegúrate de agregar la dirección IP identificada anteriormente.
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 tráfico entre el sufijo de DNS analytics.com y Service Networking, lo que permite que Looker acceda a la zona privada de analytics-vpc.
gcloud services peered-dns-domains create looker-com --network=analytics-vpc --service=servicenetworking.googleapis.com --dns-suffix=analytics.com.
19. Integra Looker con la base de datos 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 Cloud Console, navega a Looker y selecciona la URL de tu instancia que abrirá la IU de Looker.

Una vez que se inicie, verás la página de destino que se muestra en la siguiente captura de pantalla.

Navega a ADMIN → DATABASE → CONNECTIONS → Selecciona ADD CONNECTION
Completa los detalles de la conexión según la siguiente captura de pantalla y selecciona CONECTAR.

La conexión se estableció correctamente

20. Valida la conectividad de Looker
En la siguiente sección, aprenderás a validar la conectividad de Looker a la base de datos de Postgres en la VPC local con la acción "test" de Looker y TCPDUMP.
Desde Cloud Shell, accede a la base de datos de postgres si se agotó el tiempo de espera de la sesión.
Dentro de Cloud Shell, haz 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"
En el SO, crea un filtro de TCPDUMP con la subred 192.168.0.0/22 de psa-range-looker.
sudo tcpdump -i any net 192.168.0.0/22 -nn
Navega a la conexión de datos ADMIN → DATABASE → CONNECTIONS → Select → Test.
Una vez que se seleccione Probar, Looker se conectará correctamente a la base de datos de Postgres, como se indica a continuación:

Regresa a la terminal del SO y valida que TCPDUMP haya identificado que el psc-range-looker se está conectando a la instancia local de postgres-database.
Agrega una nota que indique que cualquier IP del rango de PSA se mostrará 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
Existen algunas recomendaciones de seguridad y prácticas recomendadas relacionadas con la protección de Looker y la base de datos de PostgreSQL. Esas son algunas opciones:
- Configurar los permisos de la cuenta de base de datos con privilegios mínimos para Looker, que aún le permiten realizar las funciones necesarias
- Los datos en tránsito entre el cliente y la IU de Looker, y entre Looker y la base de datos, se encriptan con TLS 1.2 o versiones posteriores.
- Los datos en reposo se encriptan de forma predeterminada. Los clientes también pueden aprovechar la CMEK para las instancias de Looker ( https://cloud.google.com/looker/docs/looker-core-cmek) y para PostgreSQL ( https://cloud.google.com/sql/docs/postgres/configure-cmek).
- Control de acceso de Looker: Los administradores de Looker pueden controlar lo que un principal o un grupo de usuarios pueden 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 que incluyan el modelo y el conjunto de permisos, y cree un control de acceso detallado a los datos.
- Looker admite los registros de auditoría y los registros de acceso a los datos, que registran 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 se deben habilitar de forma explícita.
- Actualmente, VPC-SC admite instancias de Enterprise y Embed configuradas solo con IP privada.
22. Limpia
Borra la instancia de Looker (Google Cloud Core). Para ello, navega a:
LOOKER → looker-tutorial → DELETE

Borra los componentes del instructivo desde Cloud Shell.
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 a través de redes híbridas, lo que permite la comunicación de datos en entornos locales y de múltiples nubes.
También pudiste probar correctamente la conectividad de Looker Cloud Core a la base de datos de Postgres con la herramienta "Test" de Looker Connect y TCPDUMP en la instancia de la base de datos de Postgres.
Cosmopup cree que los instructivos son geniales.

Lecturas y videos adicionales
- Presentamos la próxima evolución de Looker
- ¿Migrarás a GCP? Primero, lo primero: VPC
- Enrutamiento dinámico con Cloud Router
Documentos de referencia
- Documentación de Looker (Google Cloud Core)
- Crea una instancia de Looker (Google Cloud Core)
- Crea una conexión de IP privada para Looker (Google Cloud Core)
- VPN con alta disponibilidad entre redes de Google Cloud
- Configura y administra la traducción de direcciones de red con Cloud NAT
- Opciones para intercambiar rutas dinámicas