Looker PSC 南向混合 NEG 到本地

1. 简介

在此 Codelab 中,您将使用从 Looker PSC(作为服务使用方)调用的内部 TCP 代理负载平衡器和混合网络端点组,通过 H-VPN 对本地 Postgres 数据库执行南向连接。

Private Service Connect 是 Google Cloud 网络的一项功能,允许使用方从其 VPC 网络内部以私密方式访问托管式服务。同样,它允许托管式服务提供方在其各自的 VPC 网络中托管这些服务,并为其使用方提供专用连接。例如,当您使用 Private Service Connect 访问 Looker 时,您是服务使用方,而 Google 是服务提供方,如图 1 中突出显示的那样。

图 1.

145ea4672c3a3b14.png

南向访问(也称为反向 PSC)可让使用方创建已发布的服务作为提供方,以允许 Looker 访问本地、VPC 中的端点、托管式服务和混合环境。南向连接可以部署在任何区域,无论 Looker PSC 部署在何处,如图 2 中突出显示的那样。

图 2.

259493afd914f68b.png

学习内容

  • 网络要求
  • 创建 Private Service Connect 提供方服务
  • 在 Looker 中创建 Private Service Connect 端点
  • 使用“测试连接”功能从 Looker 建立与本地 Postgres 数据库的连接

所需条件

def88091b42bfe4d.png

2. 构建内容

您将建立一个生产者网络 looker-psc-demo,以部署内部 TCP 代理负载平衡器和通过 Private Service Connect (PSC) 发布为服务的混合 NEG。为了演示本地数据库,您将部署一个使用高可用性 VPN 连接到 looker-psc-demo VPC 的 on-prem-demo VPC。

您将执行以下操作来验证对 Producer 服务的访问权限:

  • 在 Looker 中创建与提供方服务连接关联的 PSC 端点
  • 使用 Looker 控制台对本地 Postgres 数据库执行连接验证

3. 网络要求

下面列出了提供方网络的网络要求。在此 Codelab 中,使用方是 Looker PSC 实例。

组件

说明

VPC (looker-psc-demo)

自定义模式 VPC

VPC (on-prem-demo)

自定义模式 VPC

PSC NAT 子网

来自使用方 VPC 网络的数据包使用来源 NAT (SNAT) 进行转换,以便其原始的来源 IP 地址转换为来自提供方 VPC 网络中的 NAT 子网的来源 IP 地址。

PSC 转发规则子网

用于为区域级内部 TCP 代理负载平衡器分配 IP 地址

PSC NEG 子网

用于为网络端点组分配 IP 地址

仅代理子网

负载平衡器的每个代理 都分配有一个内部 IP 地址。从代理发送到后端虚拟机或端点的数据包具有来自代理专用子网的来源 IP 地址。

混合 NEG

本地服务和其他云服务被视为与其他任何 Cloud Load Balancing 后端一样。主要区别在于使用混合连接 NEG 来配置这些后端的端点。端点必须是您的负载平衡器可以使用混合连接产品(如 Cloud VPN 或 Cloud Interconnect)访问的有效 IP:端口组合。

后端服务

后端服务充当负载平衡器与后端资源之间的桥梁。在本教程中,后端服务与混合 NEG 相关联。

Cloud Router

  • Cloud NAT 依赖于 Cloud Router 来提供控制平面功能,但不依赖于 Cloud Router 来提供 BGP 会话管理功能。
  • Cloud Router 用于在 psc-looker-demo 和 本地-demo VPC 之间建立高可用性 VPN 时建立的 BGP。

高可用性 VPN

Google Cloud VPC 网络之间的高可用性 VPN。在此拓扑中,您可以使用两个 Google Cloud VPC 网络中各自的高可用性 VPN 网关将这两个网络连接起来。VPC 网络可以位于同一区域,也可以位于不同区域。

Cloud NAT

供本地演示版 VPC 用于互联网出站流量

4. Codelab 拓扑

79aeb28b38f237da.png

5. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
  • 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。

启动 Cloud Shell

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:

55efc1aaa7a4d3ad.png

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

7ffe5cbb04455448.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。

6. 准备工作

启用 API

在 Cloud Shell 中,确保项目 ID 已设置:

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
zone=[YOUR-ZONE]
echo $project
echo $region

启用所有必要的服务:

gcloud services enable compute.googleapis.com

7. 创建提供方 VPC 网络

VPC 网络

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

gcloud compute networks create looker-psc-demo --subnet-mode custom

创建子网

PSC 子网将与 PSC 服务连接相关联,以实现网络地址转换。

在 Cloud Shell 中,创建 PSC NAT 子网:

gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT

在 Cloud Shell 中,创建提供方转发规则子网:

gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

在 Cloud Shell 中,创建提供方区域代理专用子网:

gcloud compute networks subnets create $region-proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=looker-psc-demo \
  --range=10.10.10.0/24

预留负载均衡器的 IP 地址

在 Cloud Shell 中,为负载平衡器预留内部 IP 地址:

gcloud compute addresses create hybrid-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-fr-subnet

在 Cloud Shell 中,查看预留的 IP 地址。

gcloud compute addresses describe hybrid-neg-lb-ip \
  --region=$region | grep -i address:

输出示例:

gcloud compute addresses describe hybrid-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

设置混合 NEG

创建混合 NEG,并将 –network-endpoint-type 设置为 NON_GCP_PRIVATE_IP_PORT

在 Cloud Shell 中,创建一个用于访问本地数据库的混合 NEG:

gcloud compute network-endpoint-groups create on-prem-hybrid-neg \
    --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
    --network=looker-psc-demo \
    --zone=$zone

在 Cloud Shell 中,使用教程后续步骤中生成的本地数据库的 IP:端口(192.168.10.4 和端口 5432)更新混合 NEG:

gcloud compute network-endpoint-groups update on-prem-hybrid-neg \
    --add-endpoint=ip=192.168.10.4,port=5432 \
    --zone=$zone

创建区域级健康检查

在 Cloud Shell 中,创建一个探测本地数据库端口 5432 的健康检查:

gcloud compute health-checks create tcp on-prem-5432-healthcheck \
    --region=$region \
    --port=5432

创建网络防火墙政策和防火墙规则

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

gcloud compute network-firewall-policies create looker-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy

以下防火墙规则允许流量从 PSC NAT 子网范围流向网络中的所有实例。

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

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

8. 创建提供方服务

创建负载平衡器组件

在 Cloud Shell 中,创建后端服务:

gcloud compute backend-services create producer-backend-svc --region=$region --load-balancing-scheme=INTERNAL_MANAGED --protocol=TCP --region=$region --health-checks=on-prem-5432-healthcheck --health-checks-region=$region

在 Cloud Shell 中,将混合 NEG 后端添加到后端服务:

gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=on-prem-hybrid-neg --network-endpoint-group-zone=$zone --balancing-mode=CONNECTION --max-connections=100 --region=$region

在 Cloud Shell 中,创建目标 TCP 代理以将请求路由到后端服务:

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=producer-backend-svc  \
      --region=$region

在以下语法中,创建转发规则(内部 TCP 代理负载平衡器)。

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

gcloud compute forwarding-rules create producer-hybrid-neg-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=looker-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=hybrid-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=5432

创建服务连接

在 Cloud Shell 中,创建服务附件 onpremdatabase1-svc-attachment:

gcloud compute service-attachments create onpremdatabase1-svc-attachment --region=$region --producer-forwarding-rule=producer-hybrid-neg-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet

接下来,获取并记下 selfLink URI(以“projects”开头)中列出的服务连接,以便在 Looker 中配置 PSC 端点。

selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/onpremdatabase1-svc-attachment

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

gcloud compute service-attachments describe onpremdatabase1-svc-attachment --region=$region

预期输出示例:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-09-01T16:07:51.600-07:00'
description: ''
enableProxyProtocol: false
fingerprint: cFt9rERR1iE=
id: '2549689544315850024'
kind: compute#serviceAttachment
name: onpremdatabase1-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '19348441121424360'
  low: '2549689544315850024'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-hybrid-neg-fr

在 Cloud 控制台中,前往:

网络服务 → Private Service Connect → 已发布的服务

9f436251a3ae2cc7.png

4c3e8e73d40d1238.png

9. 在 Looker 中建立 PSC 端点连接

在下一部分中,您将通过在 Cloud Shell 中使用 -psc-service-attachment 标志(针对单个网域)将提供方服务连接与 Looker Core PSC 相关联。

在 Cloud Shell 中,通过更新以下参数以匹配您的环境来创建 PSC 关联:

  • INSTANCE_NAME:Looker (Google Cloud Core) 实例的名称。
  • DOMAIN_1: onprem.database1.com
  • SERVICE_ATTACHMENT_1:创建服务连接时捕获的 URI,onpremdatabase1-svc-attachment
  • REGION:Looker (Google Cloud Core) 实例的托管区域。

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

gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

示例:

gcloud looker instances update looker-psc-instance --psc-service-attachment domain=onprem.database1.com,attachment=projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment --region=$region

在 Cloud Shell 中,验证 serviceAttachments connectionStatus 是否为“ACCEPTED”,并使用您的 Looker PSC 实例名称进行更新:

gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json

示例:

gcloud looker instances describe looker-psc-instance --region=$region --format=json

示例:

{
  "adminSettings": {},
  "createTime": "2024-08-23T00:00:45.339063195Z",
  "customDomain": {
    "domain": "looker.cosmopup.com",
    "state": "AVAILABLE"
  },
  "encryptionConfig": {},
  "lookerVersion": "24.14.18",
  "name": "projects/$project/locations/$region/instances/looker-psc-instance",
  "platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
  "pscConfig": {
    "allowedVpcs": [
      "projects/$project/global/networks/looker-psc-demo",
      "projects/$project/global/networks/looker-shared-vpc"
    ],
    "lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "onprem.database1.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/onpremdatabase1-svc-attachment"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-09-01T23:15:07.426372901Z"
}

在 Cloud 控制台中验证 PSC 端点

您可以在 Cloud 控制台中验证 PSC 连接

在 Cloud 控制台中,前往:

Looker → Looker 实例 → 详细信息

2d4684d722d31e4b.png

993cdaf748f4c030.png

创建本地 VPC 网络

VPC 网络

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

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

创建 PostgreSQL 数据库子网

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

gcloud compute networks subnets create database-subnet --project=$project --range=192.168.10.0/28 --network=on-prem-demo --region=$region

在 Cloud Shell 中,预留一个用于 onprem.database1.com 的内部 IPv4 地址 (192.168.10.4):

gcloud compute addresses create on-prem-database1-ip --region=$region --subnet=database-subnet --addresses 192.168.10.4

为本地演示版 VPC 创建 Cloud Router

本教程中使用 Cloud NAT 是因为虚拟机实例没有外部 IP 地址。

在 Cloud Shell 中,创建与 Cloud NAT 和高可用性 VPN 搭配使用的 Cloud Router:

gcloud compute routers create on-prem-cr \
   --region=$region \
   --network=on-prem-demo \
   --asn=65002

在 Cloud Shell 中,创建 NAT 网关:

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

创建数据库测试实例

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

在 Cloud Shell 中,创建实例:

gcloud compute instances create postgres-database \
    --project=$project \
    --zone=$zone \
    --machine-type=e2-medium \
    --subnet=database-subnet \
    --no-address \
    --private-network-ip 192.168.10.4 \
    --image-family debian-12 \
    --image-project debian-cloud  \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt -y install postgresql postgresql-client postgresql-contrib -y"

创建网络防火墙政策和防火墙规则

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

gcloud compute network-firewall-policies create on-prem-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy on-prem-demo-policy --network on-prem-demo --name on-prem-demo --global-firewall-policy

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

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

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

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy on-prem-demo-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

以下防火墙规则允许来自代理专用子网范围的流量到达网络中的所有实例。

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

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy on-prem-demo-policy --description "allow traffic from proxy only subnet" --direction INGRESS --src-ip-ranges 10.10.10.0/24 --global-firewall-policy --layer4-configs=tcp

10. 混合连接

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

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

在以下步骤中,您将在 looker-psc-demo VPC 和 on-prem-demo VPC 之间部署高可用性 VPN,以演示混合 NEG 与 onprem.database1.com 的本地连接。

looker-psc-demo 创建高可用性 VPN 网关

每个网关创建后,系统会自动分配两个外部 IPv4 地址,每个地址对应一个网关接口。

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

gcloud compute vpn-gateways create looker-psc-demo-vpn-gw \
   --network=looker-psc-demo \
   --region=$region

为本地演示版创建高可用性 VPN 网关

每个网关创建后,系统会自动分配两个外部 IPv4 地址,每个地址对应一个网关接口。

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

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-demo\
   --region=$region

验证高可用性 VPN 网关创建

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

7f1b504616504866.png

为 looker-psc-demo 创建 Cloud Router

在 Cloud Shell 中,创建 Cloud Router:

gcloud compute routers create looker-psc-demo-cr \
   --region=$region \
   --network=looker-psc-demo\
   --asn=65001

为 looker-psc-demo 创建 VPN 隧道

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

创建 VPN 隧道 0

在 Cloud Shell 中,创建 tunnel0:

gcloud compute vpn-tunnels create looker-psc-demo-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router looker-psc-demo-cr \
    --vpn-gateway looker-psc-demo-vpn-gw \
    --interface 0

创建 VPN 隧道 1

在 Cloud Shell 中,创建 tunnel1:

gcloud compute vpn-tunnels create looker-psc-demo-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router looker-psc-demo-cr \
    --vpn-gateway looker-psc-demo-vpn-gw \
    --interface 1

为本地演示创建 VPN 隧道

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

创建 VPN 隧道 0

在 Cloud Shell 中,创建 tunnel0:

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway looker-psc-demo-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr \
    --vpn-gateway on-prem-vpn-gw \
   --interface 0

创建 VPN 隧道 1

在 Cloud Shell 中,创建 tunnel1:

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway looker-psc-demo-vpn-gw \
    --region $region \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

验证 VPN 隧道创建

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

c2fcb340a7614070.png

11. 建立 BGP 邻居

为 looker-psc-demo 创建 BGP 接口和对等互连

在 Cloud Shell 中,创建 BGP 接口:

gcloud compute routers add-interface looker-psc-demo-cr \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel looker-psc-demo-tunnel0 \
    --region $region

在 Cloud Shell 中,创建 BGP 对等方:

gcloud compute routers add-bgp-peer looker-psc-demo-cr \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region $region

在 Cloud Shell 中,创建 BGP 接口:

gcloud compute routers add-interface looker-psc-demo-cr \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel looker-psc-demo-tunnel1 \
    --region $region

在 Cloud Shell 中,创建 BGP 对等方:

gcloud compute routers add-bgp-peer looker-psc-demo-cr \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region $region

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

在 Cloud Shell 中,创建 BGP 接口:

gcloud compute routers add-interface on-prem-cr \
    --interface-name if-tunnel0-to-looker-psc-demo \
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region $region

在 Cloud Shell 中,创建 BGP 对等方:

gcloud compute routers add-bgp-peer on-prem-cr \
    --peer-name bgp-looker-psc-demo-tunnel0 \
    --interface if-tunnel1-to-looker-psc-demo \
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region $region

在 Cloud Shell 中,创建 BGP 接口:

gcloud compute routers add-interface on-prem-cr \
    --interface-name if-tunnel1-to-looker-psc-demo \
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region $region

在 Cloud Shell 中,创建 BGP 对等方:

gcloud compute routers add-bgp-peer on-prem-cr \
    --peer-name bgp-looker-psc-demo-tunnel1\
    --interface if-tunnel2-to-looker-psc-demo \
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region $region

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

78ab590317919bf5.png

验证 looker-psc-demo 是否已通过高可用性 VPN 获知路由

现在,高可用性 VPN 隧道和 BGP 会话已建立,Cloud Router 的默认行为是通告子网路由。查看 looker-psc-demo 已知路由。

使用控制台,依次前往 VPC 网络 → VPC 网络 → looker-psc-demo → 路由 → 区域 → 查看

观察到 looker-psc-demo 已从本地 on-prem-demo VPC 获知 database-subnet 192.168.10.0/28。

c11a11ed8b0491c8.png

验证本地演示版 VPC 是否已通过高可用性 VPN 获知已知路由

由于 Cloud Router 路由器的默认行为是通告所有子网,因此仅通过 BGP 通告代理子网。在与服务器 onprem.database1.com 通信时,混合 NEG 将使用代理专用子网作为源地址。

观察到本地演示版已从 looker-psc-演示版 中学习到代理专用子网 10.10.10.0/24。

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

b0073faed026931f.png

12. Looker postgres-database 创建

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

在 Cloud Shell 中,通过 SSH 连接到 postgres-database 实例**:**

 gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"

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

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 noprefixroute 
       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:c0:a8:0a:04 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 192.168.10.4/32 metric 100 scope global dynamic ens4
       valid_lft 66779sec preferred_lft 66779sec
    inet6 fe80::4001:c0ff:fea8:a04/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 (192.168.10.4) 和仅代理子网 (10.10.10.0/24)。

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

以下屏幕截图显示了更新完成后的状态:eaff2ed6d27fa7cc.png

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

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

Before:

65e0b1074dc48644.png

之后:

14a0d1fa5455e23e.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 Mon 2024-09-02 12:10:10 UTC; 1min 46s ago
    Process: 20486 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 20486 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Sep 02 12:10:10 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Sep 02 12:10:10 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

13. 创建 postgres 数据库

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

在操作系统内,登录到 postgres:

sudo -u postgres psql postgres

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

create database postgres_looker;

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

\l

在操作系统内,创建用户 postgres_looker,密码为 postgreslooker:

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

Exit from the OS, returning you to cloud shell:

\q

示例:

user@postgres-database:/$ sudo -u postgres psql postgres
psql (15.8 (Debian 15.8-0+deb12u1))
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 table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit
CREATE SCHEMA
CREATE TABLE
postgres_looker-# \q

14. 将 Looker 与 Postgres postgres-database 集成

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

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

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

5900fdf0b698cbfc.png

连接现已配置完毕

4817157fd3b1277e.png

15. 验证 Looker 连接

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

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

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
zone=[YOUR-ZONE]
echo $project
echo $region
gcloud compute ssh --zone "$zone" "postgres-database" --project "$project"

在操作系统中,使用代理专用子网 10.10.10.0/24 创建 TCPDUMP 过滤器

sudo tcpdump -i any net 10.10.10.0/24 -nn

依次前往“数据连接”管理 → 数据库 → 连接 → postgres-database → 测试

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

774f9313ece41034.png

清理

从单个 Cloud Shell 终端删除实验组件

gcloud compute service-attachments delete onpremdatabase1-svc-attachment --region=$region -q

gcloud compute forwarding-rules delete producer-hybrid-neg-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

gcloud compute backend-services delete producer-backend-svc --region=$region -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy  --name=looker-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q

gcloud compute routers nats delete on-prem-nat --router=on-prem-cr --router-region=$region -q

gcloud compute network-endpoint-groups delete on-prem-hybrid-neg --zone=$zone -q

gcloud compute addresses delete hybrid-neg-lb-ip --region=$region -q

gcloud compute vpn-tunnels delete looker-psc-demo-tunnel0 looker-psc-demo-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=$region -q

gcloud compute vpn-gateways delete looker-psc-demo-vpn-gw on-prem-vpn-gw --region=$region -q

gcloud compute routers delete looker-psc-demo-cr on-prem-cr --region=$region -q

gcloud compute instances delete postgres-database --zone=$zone -q

gcloud compute addresses delete on-prem-database1-ip --region=$region -q

gcloud compute networks subnets delete database-subnet --region=$region -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy on-prem-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy on-prem-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=on-prem-demo-policy  --name=on-prem-demo --global-firewall-policy -q

gcloud compute networks subnets delete $region-proxy-only-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks delete on-prem-demo -q

gcloud compute networks delete looker-psc-demo -q

16. 恭喜

恭喜!您已成功配置并验证了通过高可用性 VPN 使用 Looker 控制台(由 Private Service Connect 提供支持)连接到本地数据库的连接。

您已创建提供方基础架构,并了解了如何创建混合 NEG、提供方服务和 Looker PSC 端点,以便连接到提供方服务。

Cosmopup 认为 Codelab 非常棒!

c911c127bffdee57.jpeg

后续操作

查看下列 Codelab…

深入阅读和视频

参考文档