通过混合网络连接 Looker Cloud

1. 简介

Looker (Google Cloud Core) 通过 Google Cloud 控制台提供简化且顺畅的 Looker 实例预配、配置和管理。您还可以通过控制台执行一些实例管理任务。

Looker (Google Cloud Core) 实例有三种可用的网络配置:

  • 公开:网络连接使用可通过互联网访问的外部 IP 地址。
  • 专用:网络连接使用由 Google 托管的内部虚拟私有云 (VPC) IP 地址。
  • 公共和专用:网络连接同时使用公共 IP 地址和专用 IP 地址,其中入站流量将通过公共 IP 路由,出站流量将通过专用 IP 路由。

在本教程中,您将部署一个全面的端到端专用网络 ,以支持 Looker 通过高可用性 VPN 连接到本地 VPC,该网络可以复制,以满足您对多云和本地连接的要求。

Looker (Google Cloud Core) 支持满足以下条件的实例使用专用 IP:

构建内容

在本教程中,您将在一个独立的 VPC 中构建全面的私密 Looker 网络部署,该 VPC 具有与多云和本地的混合连接。

您将设置一个名为 on-prem-vpc 的 VPC 网络来表示本地环境。对于您的部署,on-prem-vpc 将不存在,而是使用混合网络连接到您的本地数据中心或云服务提供商。

以下是本教程的主要步骤

  1. 在 us-central1 中创建独立 VPC
  2. 为专用服务访问通道分配 IP 子网
  3. 在独立 VPC 中部署 Looker 实例
  4. 创建本地 VPC 和混合网络
  5. 通过 BGP 通告并验证 Looker IP 范围
  6. 集成并验证 Looker 和 Postgresql 数据通信

Figure1

8436cc4802b670db.png

学习内容

  • 如何创建 VPC 和关联的混合网络
  • 如何在独立 VPC 中部署 Looker
  • 如何创建本地 VPC 和关联的混合网络
  • 通过高可用性 VPN 将本地 VPC 与 analytics-vps 连接起来
  • 如何通过混合网络通告 Looker 子网
  • 如何监控混合网络基础架构
  • 如何将 PostgreSQL 数据库与 Looker Cloud Core 集成

所需条件

  • Google Cloud 项目

IAM 权限

2. 准备工作

更新项目以支持本教程

本教程使用 $变量来帮助在 Cloud Shell 中实现 gcloud 配置。

在 Cloud Shell 中,执行以下操作:

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

3. VPC 设置

创建 analytics-vpc

在 Cloud Shell 中,执行以下操作:

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

创建本地 VPC

在 Cloud Shell 中,执行以下操作:

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

创建 PostgreSQL 数据库子网

在 Cloud Shell 中,执行以下操作:

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

Cloud Router 和 NAT 配置

本教程中使用 Cloud NAT 来安装软件包,因为数据库虚拟机实例没有外部 IP 地址。

在 Cloud Shell 中,创建 Cloud Router。

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

在 Cloud Shell 中,创建 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

创建数据库测试实例

创建将用于测试和验证与 Looker 的连接的 postgres 数据库实例。

在 Cloud Shell 中,创建实例。

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"

创建防火墙规则

如需允许 IAP 连接到您的虚拟机实例,请创建一个防火墙规则,该规则应:

  • 适用于您希望使用 IAP 可访问的所有虚拟机实例。
  • 允许来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。

从 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. 专用服务访问通道

专用服务访问通道是一种专用连接,将您的 VPC 网络与 Google 或第三方拥有的网络连接起来。Google 或第三方是提供服务的实体,亦称为服务提供方。Looker Cloud Core 是服务提供方。

通过专用连接,您的 VPC 网络中的虚拟机实例和您访问的服务可以使用内部 IP 地址进行单独通信。

概括来讲,若要使用专用服务访问通道,您必须在 VPC 网络中分配一个 IP 地址范围(CIDR 块),然后创建连接到服务提供方的专用连接

为服务分配 IP 地址范围

创建专用连接之前,您必须分配 IPv4 地址范围以供服务提供方的 VPC 网络使用。这能确保您的 VPC 网络与服务提供方的网络不发生 IP 地址冲突。

当您在自己的 VPC 网络中分配一个范围时,该范围不能再用于子网(主要范围和次要范围)以及自定义静态路由。

不支持将 IPv6 地址范围与专用服务访问通道结合使用。

在 Google Cloud 控制台中为您的项目启用 Service Networking API。启用 API 时,您可能需要刷新控制台页面才能确认相应 API 已启用。

创建 IP 分配

如需指定地址范围和前缀长度(子网掩码),请使用地址和前缀长度标志。例如,如需分配 CIDR 地址块 192.168.0.0/22,请将地址指定为 192.168.0.0,并将前缀长度指定为 22。

在 Cloud Shell 中,为 Looker 创建 IP 分配。

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

在 Cloud Shell 中,验证 IP 分配。

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

示例:

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

创建专用连接

创建分配范围后,您可以创建到服务提供方 Looker Cloud Core 的专用连接。在 Looker 实例建立后,专用连接会在您的 VPC 网络和服务提供方的网络之间建立 VPC 网络对等互连连接。

专用连接在您的 VPC 网络与服务提供方之间提供一对一关联。如果某个服务提供方提供多种服务,您只需一个专用连接就能获得提供方的所有服务。

如果您连接到多个服务提供方,请为每个服务提供方使用唯一的分配。这有助于您管理各个服务提供方的网络设置,例如路由和防火墙规则。

在 Cloud Shell 中,创建专用连接,并记下操作名称。

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

示例:

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.

在 Cloud Shell 中,检查操作是否成功,将 OPERATION_NAME 替换为在上一步中生成的名称。

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

示例:

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. 创建 Looker (Google Cloud Core) 实例

准备工作

在 Google Cloud 控制台中为您的项目启用 Looker API 。启用 API 时,您可能需要刷新控制台页面才能确认相应 API 已启用。

设置 OAuth 客户端以进行身份验证并访问实例。

在下一部分中,您需要使用 OAuth 客户端 ID 和密钥来创建 Looker 实例。

无需提供已获授权的 JavaScript 来源和重定向 URI。

103601bca0b6ebe8.png

在 Cloud 控制台中,根据提供的屏幕截图创建实例。

依次前往 LOOKER → 创建实例

填充之前创建的 OAuth 客户端 ID 和密钥。

b780ed751824176c.png

3fe880e26a81a756.png

91acffd74c68a067.png

选择创建

在创建实例的过程中,您会被重定向到控制台中的实例页面。您可能需要刷新页面才能查看新实例的状态。您还可以点击 Google Cloud 控制台菜单中的通知图标,查看实例创建活动。在创建实例期间,Google Cloud 控制台菜单中的“通知”图标将显示为加载图标。

创建 Looker 实例后,系统会生成实例网址。记下该网址。

5ac8a1b8b438dce6.png

6. 更新 OAuth 2.0 客户端 ID

在下一部分中,您需要通过将 /oauth2callback 附加到实例网址来更新之前创建的 OAuth 客户端 ID 已获授权的重定向 URI

完成后,您可以使用实例网址登录 Looker 界面。

在 Cloud 控制台中,依次前往 API 和服务 → 凭据

选择您的 OAuth 2.0 客户端 ID,然后更新您的实例网址,示例如下:

793c5b82ec34fb1f.png

7. 验证 Looker 访问权限

在 Cloud 控制台中,导航到 Looker,然后选择您的实例网址,系统随即会打开 Looker 界面。

9d132a67c532279e.png

启动后,您会看到一个着陆页,其中会显示一条消息,确认您有权访问 Looker Cloud Core,如下面的屏幕截图所示。

b77055fd674f8a69.png

8. 混合连接

在下一部分中,您将创建一个 Cloud Router 路由器,该路由器可让您使用边界网关协议 (BGP) 在虚拟私有云 (VPC) 和对等互连网络之间动态交换路由。

Cloud Router 路由器可以通过 Cloud VPN 隧道设置 BGP 会话来连接您的网络。它会自动获知新的子网 IP 地址范围,并将其通告给您的对等网络。

在本教程中,您将在 analytics-vpcon-prem-vpc 之间部署高可用性 VPN,以演示与 Looker 的专用连接。

analytics-vpc 创建高可用性 VPN 网关

每个网关创建后,系统会自动分配两个外部 IPv4 地址,每个地址对应一个网关接口。记下这些 IP 地址,以便稍后在配置步骤中使用。

在 Cloud Shell 中,创建高可用性 VPN 网关

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

本地 VPC 创建高可用性 VPN 网关

每个网关创建后,系统会自动分配两个外部 IPv4 地址,每个地址对应一个网关接口。记下这些 IP 地址,以便稍后在配置步骤中使用。

在 Cloud Shell 中,创建高可用性 VPN 网关。

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

验证高可用性 VPN 网关创建

在控制台中,依次前往“混合连接”→“VPN”→“Cloud VPN 网关”。

a3973b2bbb832bae.png

为 analytics-vpc 创建 Cloud Router

在 Cloud Shell 中,创建位于 us-central1 中的 Cloud Router

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

为本地 VPC 创建 Cloud Router

在 Cloud Shell 中,创建位于 us-central1 中的 Cloud Router

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

为 analytics-vpc 创建 VPN 隧道

您将在每个高可用性 VPN 网关上创建两个 VPN 隧道。

创建 VPN 隧道 0

在 Cloud Shell 中,创建 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

创建 VPN 隧道 1

在 Cloud Shell 中,创建 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

为本地 VPC 创建 VPN 隧道

您将在每个高可用性 VPN 网关上创建两个 VPN 隧道。

创建 VPN 隧道 0

在 Cloud Shell 中,创建 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

创建 VPN 隧道 1

在 Cloud Shell 中,创建 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

验证 VPN 隧道创建

使用控制台,依次前往“混合连接”→“VPN”→“Cloud VPN 隧道”。

61c09b3d3102149d.png

9. 建立 BGP 邻居

创建 BGP 会话

在本部分中,您将配置 Cloud Router 接口和 BGP 对等端。

为 analytics-vpc 创建 BGP 接口和对等互连

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

为本地 VPC 创建 BGP 接口和对等互连

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

前往混合连接 → VPN,查看 VPN 隧道详情。

ddd4a8f851d44fd6.png

验证 analytics-vpc 是否已通过高可用性 VPN 获知路由

由于高可用性 VPN 隧道和 BGP 会话已建立,因此 analytics-vpc 会获知来自本地 VPC 的路由。使用控制台,依次前往 VPC 网络 → VPC 网络 → analytics-vpc → 路由 → 区域 → us-central1 → 查看

观察到 analytics-vpc 已从本地 VPC on-prem-vpc 数据库子网 database-subnet-us-central1 172.16.10.0/27 获知路由

57c7898390db4bcb.png

验证本地 VPC 是否未通过高可用性 VPN 获知路由

analytics-vpc 没有子网,因此 Cloud Router 不会向本地 VPC 通告任何子网。使用控制台,依次前往 VPC 网络 → VPC 网络 → 本地-vpc → 路由 → 区域 → us-central1 → 查看

5b007e46a7c7026.png

10. 向本地网络通告 Looker 子网

analytics-cr-us-central1 Cloud Router 路由器不会自动通告 Looker 专用服务访问通道 (PSA) 子网,因为该子网已分配给 PSA,而不是 VPC。

您需要为 PSA 子网 192.168.0.0/22 (psa-range-looker) 创建从 analytics-cr-central1 到本地环境的自定义路由通告,以便工作负载使用该通告来访问 Looker。

在控制台中,依次前往 HYBRID CONNECTIVITY → CLOUD ROUTERS → analytics-cr-us-central1,然后选择修改

在“通告的路由”部分中,选择创建自定义路由选项,根据以下示例更新相应字段,选择完成,然后点击保存

87f95ee3d1cd8521.png

11. 验证本地 VPC 是否已获知 Looker 子网

由于本地 VPC 已从 analytics-cr-us-central1 通告为自定义路由通告,因此现在能够访问 Looker PSA 子网。

使用控制台,依次前往 VPC 网络 → VPC 网络 → 本地 VPC → 路由 → 区域 → us-central1 → 查看

观察从 analytics-vpc 通告的 Looker 路由:

a987a76fd57ddedd.png

12. 验证当前的 VPC 对等互连

Looker Cloud Core 与 analytics-vpc 之间的连接通过 VPC 对等互连实现,从而允许交换通过 BGP 获知的自定义路由。在本教程中,analytics-vpc 需要将本地-vpc 获知的路由发布到 Looker。如需启用此功能,VPC 对等互连需要更新才能导出自定义路由。

验证当前导入和导出的路线。

依次前往 VPC 网络 → VPC 网络对等互连 → servicenetworking-googleapis-com

f6d9395712934cd8.png

以下屏幕截图详细展示了 analytics-vpc 从 Google 管理的对等互连 VPC 网络 servicesnetworking 导入 psa-range-looker 的过程。

86a0e8c3534c6986.png

选择“导出的路由”后,系统不会显示任何导出到对等互连 VPC 网络的路由,因为 1) 未在 analytics-vpc 中配置子网 2) 未选择“导出自定义路由”

a52de427fa73fb22.png

13. 更新 VPC 对等互连

依次前往 VPC 网络 → VPC 网络对等互连 → servicenetworking-googleapis-com → 修改

依次选择导出自定义路线 → 保存

a2309e4c3a7cee80.png

14. 验证更新后的 VPC 对等互连

验证导出的路线。

依次前往 VPC 网络 → VPC 网络对等互连 → servicenetworking-googleapis-com

选择“导出的路由”后,系统会显示本地 VPC 路由(数据库子网 172.16.10.0/27)已由 analytics-vpc 导出到托管 Looker 的对等互连 VPC 网络。

47e953268d78a469.png

15. Looker postgres-database 创建

在下一部分中,您将使用 Cloud Shell 通过 SSH 连接到 postgres-database 虚拟机。

在 Cloud Shell 中,对 postgres-database 实例执行 SSH。

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

在操作系统内,确定并记下 postgres-database 实例的 IP 地址 (ens4)。

ip a

示例:

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

在操作系统内,登录到 postgresql。

sudo -u postgres psql postgres

在操作系统内,输入密码提示。

\password postgres

在操作系统内,将密码设置为 postgres(输入两次相同的密码)

postgres

示例:

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: 

在操作系统内,退出 postgres。

\q

示例:

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

在下一部分中,您将按照以下屏幕截图所示,在 pg_hba.conf 文件中的 IPv4 本地连接下插入您的 postgres-database 实例 IP 地址和 Looker 专用 Google 访问通道子网 (192.168.0.0/22):

178364a8ee9b6233.png

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

在以下部分中,取消注释 postgresql.conf 以监听所有“*”IP 地址,如下面的屏幕截图所示:

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

Before:

aad52092c0a9408.png

之后:

7e80b916d29e097c.png

在操作系统内,重启 postgresql 服务。

sudo service postgresql restart

在操作系统内,验证 postgresql 状态是否为“active”。

sudo service postgresql status

示例:

在操作系统内,验证 postgresql 状态是否为“active”。

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. 创建 postgres 数据库

在下一部分中,您将创建一个名为 postgres_looker 的 postgres 数据库和一个名为 looker_schema 的架构,用于验证 Looker 与本地的连接。

在操作系统内,登录 postgres。

sudo -u postgres psql postgres

在操作系统中,创建数据库。

create database postgres_looker;

在操作系统内,列出数据库。

\l

在操作系统内,创建用户 looker,密码为 looker

create user postgres_looker with password 'postgreslooker';

在操作系统内,连接到数据库。

\c postgres_looker;

在操作系统内,创建架构 looker-schema 并退出到 Cloud Shell 提示符。

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

示例:

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

退出操作系统,返回到 Cloud Shell。

\q
exit

17. 在本地 VPC 中创建防火墙

在下一部分中,创建一个具有日志记录功能的入站防火墙,以允许 Looker 子网与 postgres-database 实例通信。

在 Cloud Shell 中,创建本地 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. 在 analytics-vpc 中创建专用 DNS

虽然 Looker 部署在 Google 管理的 VPC 中,但通过与服务网络建立对等互连,可以访问 analytics-vpc 专用 DNS。

在下一部分中,您将在 analytics-vpc 中创建一个专用 DNS 区域,其中包含 postgres-database 实例的完全限定域名 (postgres.analytics.com)) 和 IP 地址的 A 记录。

在 Cloud Shell 中,创建专用可用区 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"

在 Cloud Shell 中,确定 postgres-database 实例的 IP 地址。

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

示例:

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

在 Cloud Shell 中,创建 A 记录,确保添加之前确定的 IP 地址。

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

示例:

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

在 Cloud Shell 中,将 DNS 后缀 analytics.com 与服务网络对等互连,从而允许 Looker 访问 analytics-vpc 专用区域。

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

19. 将 Looker 与 Postgres postgres-database 集成

在下一部分中,您将使用 Cloud 控制台创建与本地 postgres-database 实例的数据库连接。

在 Cloud 控制台中,导航到 Looker,然后选择您的实例网址,系统随即会打开 Looker 界面。

9d132a67c532279e.png

启动后,您将看到如下屏幕截图所示的着陆页。

b77055fd674f8a69.png

依次前往管理 → 数据库 → 连接 → 选择添加连接

根据以下屏幕截图填写连接详细信息,然后选择连接

c8cca15252c2020d.png

连接现已成功

3e51b7e2cc62fb45.png

20. 验证 Looker 连接

在下一部分中,您将学习如何使用 Looker“测试”操作和 TCPDUMP 验证 Looker 与本地 VPC 中的 postgres 数据库的连接。

如果会话已超时,请从 Cloud Shell 登录 postgres-database。

在 Cloud Shell 中,执行以下操作:

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"

在操作系统中,使用 psa-range-looker 子网 192.168.0.0/22 创建 TCPDUMP 过滤器

sudo tcpdump -i any net 192.168.0.0/22 -nn

依次前往“数据连接”管理 → 数据库 → 连接 → 选择 → 测试

选择“测试”后,Looker 将成功连接到 postgres 数据库,如下所示:

ef25b837b6a41fe.png

返回到操作系统终端,验证 TCPDUMP 是否已识别出 psc-range-looker 正在连接到本地 postgres-database 实例。

添加一条注释,说明来自 PSA 范围的任何 IP 都将显示在 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. 安全建议

以下是一些与保护 Looker 和 Postgres 数据库相关的安全建议和最佳实践。其中包括:

  • 为 Looker 设置最低权限的数据库账号权限,同时仍允许其执行所需的功能。
  • 客户端与 Looker 界面之间以及 Looker 与数据库之间传输中的数据使用 TLS 1.2 及更高版本进行加密
  • 系统默认会对静态数据进行加密,客户还可以为 Looker 实例 ( https://cloud.google.com/looker/docs/looker-core-cmek) 和 Postgres ( https://cloud.google.com/sql/docs/postgres/configure-cmek) 利用 CMEK
  • Looker 访问权限控制 - Looker 管理员可以授予内容访问权限、数据访问权限和功能访问权限,从而控制正文或用户群组在 Looker 中的查看和操作权限。借助这些选项,Looker 管理员可以定义包含模型和权限集的特定角色,并创建精细的数据访问权限控制。
  • Looker 支持审核日志和数据访问日志,可记录谁在何时何地执行了哪些操作。审核日志默认处于启用状态,而数据访问日志需要明确启用
  • 目前,VPC-SC 支持仅配置了 专用 IP 的企业版和嵌入版实例

22. 清理

删除 Looker Cloud Core 实例,前往:

LOOKER → looker-tutorial → DELETE

e5a2e3af9e7ffd40.png

从 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. 恭喜

恭喜!您已成功配置并验证了混合网络上的 Looker 连接性,从而实现了本地环境和多云环境之间的数据通信。

您还能够使用 Looker 的“测试”工具和 postgres-database 实例中的 TCPDUMP 成功测试 Looker Cloud Core 与 postgres-database 的连接。

Cosmopup 认为教程很棒!

e6d3675ca7c6911f.jpeg

深入阅读和视频

参考文档