Connetti Looker Cloud tramite il networking ibrido

1. Introduzione

Looker (Google Cloud core) fornisce provisioning, configurazione e gestione semplificati e senza problemi di un'istanza di Looker dalla console Google Cloud. Alcune attività di amministrazione delle istanze possono essere eseguite anche dalla console.

Sono disponibili tre configurazioni di rete per le istanze di Looker (Google Cloud core):

  • Pubblico: la connessione di rete utilizza un indirizzo IP esterno accessibile da internet.
  • Privata: la connessione di rete utilizza un indirizzo IP Virtual Private Cloud (VPC) interno e ospitato da Google.
  • Pubblico e privato: la connessione di rete utilizza sia un indirizzo IP pubblico sia un indirizzo IP privato, dove il traffico in entrata verrà instradato tramite IP pubblico e quello in uscita tramite IP privato.

Nel tutorial verrà implementata una rete privata end-to-end completa per supportare la connettività di Looker a un VPC on-premise tramite VPN ad alta disponibilità, che può essere replicata per soddisfare i tuoi requisiti di connettività multi-cloud e on-premise.

Looker (Google Cloud core) supporta l'IP privato per le istanze che soddisfano i seguenti criteri:

Cosa creerai

In questo tutorial, creerai un deployment completo della rete Looker privata in un VPC autonomo con connettività ibrida al multicloud e on-premise.

Configurerai una rete VPC denominata on-prem-vpc per rappresentare un ambiente on-premise. Per il tuo deployment, la rete VPC on-premise non esisterebbe, ma verrebbe utilizzata la rete ibrida per il tuo data center on-premise o il tuo provider di servizi cloud.

Di seguito sono riportati i passaggi principali del tutorial.

  1. Crea un VPC autonomo in us-central1
  2. Allocare una subnet IP all'accesso privato ai servizi
  3. Esegui il deployment dell'istanza di Looker nel VPC autonomo
  4. Crea il VPC on-prem e il networking ibrido
  5. Annuncia e convalida l'intervallo IP di Looker tramite BGP
  6. Integra e convalida la comunicazione dei dati di Looker e PostgreSQL

Figure1

8436cc4802b670db.png

Obiettivi didattici

  • Come creare un VPC e il networking ibrido associato
  • Come eseguire il deployment di Looker in un VPC autonomo
  • Come creare un VPC on-prem e un networking ibrido associato
  • Connetti on-prem-vpc a analytics-vps tramite VPN ad alta disponibilità
  • Come pubblicizzare le subnet di Looker tramite il networking ibrido
  • Come monitorare l'infrastruttura di rete ibrida
  • Come integrare un database PostgreSQL con Looker (Google Cloud core)

Che cosa ti serve

  • Progetto Google Cloud

Autorizzazioni IAM

2. Prima di iniziare

Aggiornare il progetto per supportare il tutorial

Questo tutorial utilizza le variabili $per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.

In Cloud Shell, esegui le seguenti operazioni:

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

3. Configurazione VPC

Crea analytics-vpc

In Cloud Shell, esegui le seguenti operazioni:

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

Crea on-prem-vpc

In Cloud Shell, esegui le seguenti operazioni:

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

Crea la subnet del database Postgresql

In Cloud Shell, esegui le seguenti operazioni:

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

Configurazione di router Cloud e NAT

Cloud NAT viene utilizzato nel tutorial per l'installazione del pacchetto software perché l'istanza VM del database non ha un indirizzo IP esterno.

In Cloud Shell, crea il router Cloud.

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

In Cloud Shell, crea il gateway 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 l'istanza di test del database

Crea un'istanza postgres-database che verrà utilizzata per testare e convalidare la connettività a Looker.

In Cloud Shell, crea l'istanza.

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 regole firewall

Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applichi a tutte le istanze VM a cui vuoi accedere tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro TCP.

Da 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. Accesso privato ai servizi

L'accesso privato ai servizi è una connessione privata tra la tua rete VPC e una rete di proprietà di Google o di terze parti. Google o la terza parte, le entità che forniscono servizi, sono anche note come produttori di servizi. Looker Cloud Core è un produttore di servizi.

La connessione privata consente alle istanze VM nella rete VPC e ai servizi a cui accedi di comunicare esclusivamente mediante indirizzi IP interni.

A livello generale, per utilizzare l'accesso privato ai servizi, devi allocare un intervallo di indirizzi IP (blocco CIDR) nella tua rete VPC e poi creare una connessione privata a un producer di servizi.

Alloca l'intervallo di indirizzi IP per i servizi

Prima di creare una connessione privata, devi allocare un intervallo di indirizzi IPv4 da utilizzare per la rete VPC del producer di servizi. In questo modo si garantisce che non si verifichi una collisione di indirizzi IP tra la tua rete VPC e la rete del producer di servizi.

Quando allochi un intervallo nella tua rete VPC, questo non è idoneo per le subnet (intervalli primari e secondari) e le destinazioni delle route statiche personalizzate.

L'utilizzo di intervalli di indirizzi IPv6 con l'accesso ai servizi privati non è supportato.

Abilita l'API Service Networking per il tuo progetto nella console Google Cloud. Quando abiliti l'API, potrebbe essere necessario aggiornare la pagina della console per confermare che l'API è stata abilitata.

Creare un'allocazione IP

Per specificare un intervallo di indirizzi e una lunghezza del prefisso (subnet mask), utilizza i flag addresses e prefix-length. Ad esempio, per allocare il blocco CIDR 192.168.0.0/22, specifica 192.168.0.0 per l'indirizzo e 22 per la lunghezza del prefisso.

In Cloud Shell, crea l'allocazione IP per 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

In Cloud Shell, convalida l'allocazione IP.

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

Esempio:

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 connessione privata

Dopo aver creato un intervallo allocato, puoi creare una connessione privata a un producer di servizi, Looker Cloud Core. La connessione privata stabilisce una connessione di peering di rete VPC tra la tua rete VPC e la rete del producer di servizi una volta stabilita l'istanza Looker.

Le connessioni private sono una relazione one-to-one tra la tua rete VPC e un producer di servizi. Se un singolo producer di servizi offre più servizi, è necessaria una sola connessione privata per tutti i servizi del producer.

Se ti connetti a più producer di servizi, utilizza un'allocazione univoca per ciascuno. Questa pratica ti aiuta a gestire le impostazioni di rete, come route e regole firewall, per ogni produttore di servizi.

In Cloud Shell, crea una connessione privata e prendi nota del nome dell'operazione.

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

Esempio:

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.

In Cloud Shell, verifica se l'operazione è andata a buon fine sostituendo OPERATION_NAME con il nome generato nel passaggio precedente.

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

Esempio:

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 un'istanza di Looker (Google Cloud core)

Prima di iniziare

Abilita l'API Looker per il tuo progetto nella console Google Cloud. Quando abiliti l'API, potrebbe essere necessario aggiornare la pagina della console per confermare che l'API è stata abilitata.

Configura un client OAuth per eseguire l'autenticazione e accedere all'istanza.

Nella sezione seguente, dovrai utilizzare l'ID client OAuth e il client secret per creare l'istanza di Looker.

Le origini JavaScript autorizzate e gli URI di reindirizzamento non sono obbligatori.

103601bca0b6ebe8.png

All'interno di Cloud Console, crea un'istanza in base agli screenshot forniti.

Vai a LOOKER → CREA UN'ISTANZA

Compila l'ID client OAuth e il segreto creati in precedenza.

b780ed751824176c.png

3fe880e26a81a756.png

91acffd74c68a067.png

Seleziona CREA.

Durante la creazione dell'istanza, verrà visualizzata la pagina Istanze nella console. Potresti dover aggiornare la pagina per visualizzare lo stato della nuova istanza. Puoi anche visualizzare l'attività di creazione dell'istanza facendo clic sull'icona delle notifiche nel menu della console Google Cloud. Durante la creazione dell'istanza, l'icona delle notifiche nel menu della console Google Cloud sarà circondata da un'icona di caricamento.

Dopo la creazione dell'istanza di Looker, viene generato un URL istanza. Prendi nota dell'URL.

5ac8a1b8b438dce6.png

6. Aggiornare l'ID client OAuth 2.0

Nella sezione seguente, dovrai aggiornare l'URI di reindirizzamento autorizzato dell'ID client OAuth creato in precedenza aggiungendo /oauth2callback all'URL dell'istanza.

Al termine, potrai utilizzare l'URL dell'istanza per accedere alla UI di Looker.

Nella console Cloud, vai a API e SERVIZI → CREDENZIALI.

Seleziona l'ID client OAuth 2.0 e aggiorna l'URL dell'istanza, come nell'esempio riportato di seguito:

793c5b82ec34fb1f.png

7. Convalida l'accesso a Looker

In Cloud Console, vai a Looker e seleziona l'URL dell'istanza che aprirà l'interfaccia utente di Looker.

9d132a67c532279e.png

Una volta avviata, verrà visualizzata la pagina di destinazione come nello screenshot riportato di seguito, che conferma l'accesso a Looker Cloud Core.

b77055fd674f8a69.png

8. Connettività ibrida

Nella sezione seguente, creerai un router Cloud che ti consente di scambiare dinamicamente le route tra la tua rete Virtual Private Cloud (VPC) e la rete peer utilizzando il Border Gateway Protocol (BGP).

Cloud Router può configurare una sessione BGP su un tunnel Cloud VPN per connettere le tue reti. Apprende automaticamente nuovi intervalli di indirizzi IP della subnet e li annuncia alla rete peer.

Nel tutorial, implementerai la VPN ad alta disponibilità tra analytics-vpc e on-prem-vpc per illustrare la connettività privata a Looker.

Crea il gateway VPN ad alta disponibilità per analytics-vpc

Quando viene creato ogni gateway, vengono allocati automaticamente due indirizzi IPv4 esterni, uno per ogni interfaccia del gateway. Annota questi indirizzi IP per utilizzarli in un secondo momento nei passaggi di configurazione.

In Cloud Shell, crea il gateway VPN ad alta disponibilità

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

Crea il gateway VPN ad alta disponibilità per on-prem-vpc

Quando viene creato ogni gateway, vengono allocati automaticamente due indirizzi IPv4 esterni, uno per ogni interfaccia del gateway. Annota questi indirizzi IP per utilizzarli in un secondo momento nei passaggi di configurazione.

In Cloud Shell, crea il gateway VPN ad alta disponibilità.

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

Convalida la creazione del gateway VPN ad alta disponibilità

Utilizzando la console, vai a CONNETTIVITÀ IBRIDA → VPN → GATEWAY VPN CLOUD.

a3973b2bbb832bae.png

Crea il router Cloud per analytics-vpc

In Cloud Shell, crea il router Cloud che si trova in us-central1

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

Crea il router Cloud per on-prem-vpc

In Cloud Shell, crea il router Cloud che si trova in us-central1

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

Crea i tunnel VPN per analytics-vpc

Creerai due tunnel VPN su ogni gateway VPN ad alta disponibilità.

Crea tunnel VPN

In 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 tunnel VPN1

In 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 i tunnel VPN per on-prem-vpc

Creerai due tunnel VPN su ogni gateway VPN ad alta disponibilità.

Crea tunnel VPN

In 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 tunnel VPN1

In 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

Convalida la creazione del tunnel VPN

Utilizzando la console, vai a CONNETTIVITÀ IBRIDA → VPN → TUNNEL VPN CLOUD.

61c09b3d3102149d.png

9. Definisci i vicini BGP

Crea sessioni BGP

In questa sezione, configurerai le interfacce del router Cloud e i peer BGP.

Crea un'interfaccia BGP e il peering per analytics-vpc

In Cloud Shell, crea l'interfaccia 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

In Cloud Shell, crea il peer 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

In Cloud Shell, crea l'interfaccia 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

In Cloud Shell, crea il peer 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 un'interfaccia BGP e un peering per on-prem-vpc

In Cloud Shell, crea l'interfaccia 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

In Cloud Shell, crea il peer 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

In Cloud Shell, crea l'interfaccia 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

In Cloud Shell, crea il peer 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

Vai a CONNETTIVITÀ IBRIDA → VPN per visualizzare i dettagli del tunnel VPN.

ddd4a8f851d44fd6.png

Convalidare le route apprese da analytics-vpc tramite VPN ad alta disponibilità

Poiché i tunnel VPN ad alta disponibilità e le sessioni BGP sono stabiliti, le route da on-prem-vpc vengono apprese da analytics-vpc. Utilizzando la console, vai a Rete VPC → Reti VPC → analytics-vpc → ROUTE → REGIONE → us-central1 → VISUALIZZA

Osserva che analytics-vpc ha appreso le route dal database on-prem-vpc-subnet-us-central1 172.16.10.0/27

57c7898390db4bcb.png

Verifica che on-prem-vpc non abbia appreso le route tramite la VPN ad alta disponibilità

analytics-vpc non ha una subnet, pertanto il router Cloud non annuncerà alcuna subnet a on-prem-vpc . Utilizzando la console, vai a Rete VPC → Reti VPC → on-prem-vpc → ROUTES → REGION → us-central1 → VIEW

5b007e46a7c7026.png

10. Annuncia la subnet di Looker on-premise

La subnet di accesso privato ai servizi (PSA) di Looker non viene pubblicizzata automaticamente dal cloud router analytics-cr-us-central1 perché la subnet è assegnata a PSA, non a VPC.

Devi creare una pubblicità di route personalizzata da analytics-cr-central1 per la subnet PSA 192.168.0.0/22 (psa-range-looker) che verrà pubblicizzata nell'ambiente on-premise e utilizzata dai carichi di lavoro per accedere a Looker.

Dalla console, vai a CONNETTIVITÀ IBRIDA → ROUTER CLOUD → analytics-cr-us-central1, quindi seleziona MODIFICA.

Nella sezione Itinerari pubblicizzati, seleziona l'opzione Crea itinerari personalizzati, aggiorna i campi in base all'esempio riportato di seguito, seleziona FINE e poi fai clic su SALVA.

87f95ee3d1cd8521.png

11. Verifica che on-prem-vpc abbia appreso la subnet Looker

Ora on-prem-vpc potrà accedere alla subnet PSA di Looker poiché è stata pubblicizzata da analytics-cr-us-central1 come pubblicità di route personalizzata.

Utilizzando la console, vai a RETE VPC → RETI VPC → on-prem-vpc → ROUTE → REGIONE → us-central1 → VISUALIZZA

Osserva le route di Looker annunciate da analytics-vpc:

a987a76fd57ddedd.png

12. Convalida del peering VPC attuale

La connessione tra Looker Cloud Core e analytics-vpc avviene tramite il peering VPC, che consente lo scambio di route personalizzate apprese tramite BGP. Nel tutorial, analytics-vpc dovrà pubblicare le route apprese da on-prem-vpc in Looker. Per attivare questa funzionalità, il peering VPC richiede un aggiornamento per esportare le route personalizzate.

Convalida le route importate ed esportate correnti.

Vai a RETE VPC → PEERING DI RETE VPC → servicenetworking-googleapis-com

f6d9395712934cd8.png

Lo screenshot riportato di seguito mostra l'importazione di analytics-vpc di psa-range-looker dal peering di rete VPC gestito da Google, servicesnetworking.

86a0e8c3534c6986.png

Selezionando EXPORTED ROUTES non vengono visualizzate route esportate nella rete VPC in peering perché 1) le subnet non sono configurate in analytics-vpc 2) l'opzione Esporta route personalizzate non è selezionata

a52de427fa73fb22.png

13. Aggiorna peering VPC

Vai a RETE VPC → PEERING DI RETE VPC → servicenetworking-googleapis-com → MODIFICA

Seleziona ESPORTA ITINERARI PERSONALIZZATI → SALVA.

a2309e4c3a7cee80.png

14. Convalida del peering VPC aggiornato

Convalida le route esportate.

Vai a RETE VPC → PEERING DI RETE VPC → servicenetworking-googleapis-com

Seleziona EXPORTED ROUTES (ROUTE ESPORTATE) per visualizzare le route on-prem-vpc (subnet del database 172.16.10.0/27) esportate nel peering VPC che ospita Looker da analytics-vpc.

47e953268d78a469.png

15. Creazione del database postgres di Looker

Nella sezione seguente, eseguirai l'accesso SSH alla VM postgres-database utilizzando Cloud Shell.

In Cloud Shell, esegui un comando ssh all'istanza postgres-database.

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

All'interno del sistema operativo, identifica e annota l'indirizzo IP (ens4) dell'istanza postgres-database.

ip a

Esempio:

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

All'interno del sistema operativo, accedi a postgresql.

sudo -u postgres psql postgres

All'interno del sistema operativo, inserisci la richiesta della password.

\password postgres

All'interno del sistema operativo, imposta la password su postgres (inserisci la stessa password due volte)

postgres

Esempio:

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: 

All'interno del sistema operativo, esci da postgres.

\q

Esempio:

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

Nella sezione seguente, inserisci l'indirizzo IP dell'istanza del database postgres e la subnet di accesso privato Google di Looker (192.168.0.0/22) nel file pg_hba.conf in IPv4 local connections (Connessioni locali IPv4) come nello screenshot riportato di seguito:

178364a8ee9b6233.png

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

Nella sezione seguente, rimuovi il commento da postgresql.conf per ascoltare tutti gli indirizzi IP "*" come nello screenshot seguente:

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

Prima:

aad52092c0a9408.png

Dopo:

7e80b916d29e097c.png

All'interno del sistema operativo, riavvia il servizio postgresql.

sudo service postgresql restart

All'interno del sistema operativo, verifica che lo stato di postgresql sia attivo.

sudo service postgresql status

Esempio:

All'interno del sistema operativo, verifica che lo stato di postgresql sia attivo.

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 il database postgres

Nella sezione seguente, creerai un database PostgreSQL denominato postgres_looker e uno schema looker_schema utilizzato per convalidare la connettività di Looker on-premise.

All'interno del sistema operativo, accedi a postgres.

sudo -u postgres psql postgres

All'interno del sistema operativo, crea il database.

create database postgres_looker;

All'interno del sistema operativo, elenca il database.

\l

All'interno del sistema operativo, crea l'utente Looker con la password Looker

create user postgres_looker with password 'postgreslooker';

All'interno del sistema operativo, connettiti al database.

\c postgres_looker;

All'interno del sistema operativo, crea lo schema looker-schema ed esci al prompt di Cloud Shell.

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

Esempio:

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

Esci dal sistema operativo e torna a Cloud Shell.

\q
exit

17. Crea un firewall in on-prem-vpc

Nella sezione seguente, crea un firewall in entrata con logging che consenta la comunicazione della subnet Looker con l'istanza postgres-database.

Da Cloud Shell, crea il 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 DNS privato in analytics-vpc

Anche se Looker viene implementato in un VPC gestito da Google, l'accesso al DNS privato analytics-vpc è supportato tramite il peering con Service Networking.

Nella sezione seguente, creerai una zona DNS privata in analytics-vpc costituita da un record A del nome di dominio completo (postgres.analytics.com)) e dell'indirizzo IP dell'istanza del database postgres.

Da Cloud Shell, crea la zona privata 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"

Da Cloud Shell, identifica l'indirizzo IP dell'istanza postgres-database.

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

Esempio:

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

Da Cloud Shell, crea il record A e assicurati di aggiungere l'indirizzo IP identificato in precedenza.

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

Esempio:

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

Da Cloud Shell, esegui il peering del suffisso DNS analytics.com al networking dei servizi, consentendo così a Looker di accedere alla zona privata 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 il database Postgres postgres

Nella sezione seguente utilizzerai Cloud Console per creare una connessione al database all'istanza di postgres-database on-premise.

In Cloud Console, vai a Looker e seleziona l'URL dell'istanza che aprirà l'interfaccia utente di Looker.

9d132a67c532279e.png

Una volta avviata, verrà visualizzata la pagina di destinazione come nello screenshot riportato di seguito.

b77055fd674f8a69.png

Vai ad AMMINISTRAZIONE → DATABASE → CONNESSIONI → seleziona AGGIUNGI CONNESSIONE.

Compila i dettagli della connessione come nello screenshot riportato di seguito, seleziona CONNETTI.

c8cca15252c2020d.png

La connessione è stata stabilita correttamente

3e51b7e2cc62fb45.png

20. Convalida la connettività di Looker

Nella sezione seguente imparerai a convalidare la connettività di Looker al database postgres nel VPC on-premise utilizzando l'azione "test" di Looker e TCPDUMP.

Da Cloud Shell, accedi al database postgres se la sessione è scaduta.

In Cloud Shell, esegui le seguenti operazioni:

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"

Dal sistema operativo, crea un filtro TCPDUMP con la subnet psa-range-looker 192.168.0.0/22

sudo tcpdump -i any net 192.168.0.0/22 -nn

Vai a Connessione dati ADMIN → DATABASE → CONNECTIONS → Select → Test

Una volta selezionato Test, Looker si connetterà correttamente al database postgres come indicato di seguito:

ef25b837b6a41fe.png

Torna al terminale del sistema operativo e verifica che TCPDUMP abbia identificato la connessione di psc-range-looker all'istanza del database postgres on-premise.

Aggiungi una nota che indichi che qualsiasi IP dell'intervallo PSA verrà visualizzato da 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. Suggerimenti per la sicurezza

Esistono alcuni consigli e best practice di sicurezza relativi alla protezione di Looker e del database Postgres. ad esempio:

  • Configurazione delle autorizzazioni dell'account di database con privilegi minimi per Looker, che gli consentono comunque di eseguire le funzioni necessarie.
  • I dati in transito tra il client e la UI di Looker e da Looker al database vengono criptati utilizzando TLS 1.2+.
  • I dati archiviati vengono criptati per impostazione predefinita. Il cliente può anche utilizzare CMEK per le istanze di Looker ( https://cloud.google.com/looker/docs/looker-core-cmek) e per Postgres ( https://cloud.google.com/sql/docs/postgres/configure-cmek)
  • Controllo dell'accesso a Looker: gli amministratori di Looker possono controllare le azioni e le visualizzazioni consentite a un principal o a un gruppo di utenti di Looker concedendo l'accesso ai contenuti, ai dati e alle funzionalità. Queste opzioni consentono all'amministratore di Looker di definire ruoli specifici che includono il set di modelli e autorizzazioni e di creare un controllo dell'accesso granulare ai dati.
  • Looker supporta sia gli audit log che i log di accesso ai dati, che registrano chi ha fatto cosa, quando e dove. Gli audit log sono abilitati per impostazione predefinita, mentre i log di accesso ai dati devono essere abilitati esplicitamente.
  • Al momento, VPC-SC supporta le istanze Enterprise e Embed configurate solo con IP privati

22. Esegui la pulizia

Elimina l'istanza di Looker Cloud Core. Vai a:

LOOKER → looker-tutorial → DELETE

e5a2e3af9e7ffd40.png

Da Cloud Shell, elimina i componenti del tutorial.

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. Complimenti

Congratulazioni, hai configurato e convalidato correttamente la connettività di Looker tramite il networking ibrido, consentendo la comunicazione dei dati in ambienti on-premise e multi-cloud.

Hai anche potuto testare correttamente la connettività di Looker Cloud Core al database postgres utilizzando lo strumento "Test" di Looker Connect e TCPDUMP nell'istanza del database postgres.

Cosmopup pensa che i tutorial siano fantastici.

e6d3675ca7c6911f.jpeg

Ulteriori letture e video

Documentazione di riferimento