Looker PSC 南向混合 NEG 到本地

1. 简介

在此 Codelab 中,您将使用内部 TCP 代理负载平衡器和从 Looker PSC 调用并用作服务使用方的混合网络端点组,通过 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,以部署通过 Private Service Connect (PSC) 作为服务发布的内部 TCP 代理负载平衡器和混合 NEG。为了演示本地数据库,您将部署一个使用 HA-VPN 连接到 looker-psc-demo VPC 的 on-prem-demo VPC。

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

  • 在 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:port 组合。

后端服务

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

Cloud Router

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

HA-VPN

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

Cloud NAT

由 on-prem-demo 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:Port(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 中列出的服务附件(以项目开头),以便在 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

为 on-prem-demo VPC 创建 Cloud Router 路由器

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

在 Cloud Shell 中,创建要与 Cloud NAT 和 HA-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

创建数据库测试实例

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

在 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 可访问的所有 VM 实例。
  • 允许来自 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,以演示与 onprem.database1.com 的混合 NEG 连接。

looker-psc-demo 创建高可用性 VPN GW

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

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

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

为 on-prem-demo 创建高可用性 VPN GW

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

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

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

验证高可用性 VPN GW 创建情况

在控制台中,依次选择“混合连接”→“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

为 on-prem-demo 创建 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

为 on-prem-demo 创建 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 学习了数据库子网 192.168.10.0/28。

c11a11ed8b0491c8.png

验证 on-prem-demo VPC 是否已通过高可用性 VPN 获知路由

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

观察 on-prem-demo 从 looker-psc-demo 学习了代理专用子网 10.10.10.0/24。

在控制台中,依次前往 VPC 网络 → VPC 网络 → on-prem-demo → 路由 → 区域 → 视图

b0073faed026931f.png

12. Looker postgres 数据库创建

在下一部分中,您将使用 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 数据库实例 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 状态为活动:

sudo service postgresql status

示例:

在操作系统中,验证 postgresql 状态为活动:

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

在操作系统中,使用密码 postgreslooker 创建用户 postgres_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

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 数据库实例的数据库连接。

依次选择 ADMIN → DATABASE → CONNECTIONS → ADD CONNECTION

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

5900fdf0b698cbfc.png

连接现已配置完毕

4817157fd3b1277e.png

15. 验证 Looker 连接

在下一部分中,您将学习如何使用 Looker“test”操作和 TCPDUMP 验证 Looker 与 on-prem-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

前往数据连接 ADMIN → DATABASE → CONNECTIONS → postgres-database → Test

选择“Test”后,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. 恭喜

恭喜,您已成功使用由 Private Service Connect 支持的 Looker 控制台配置并验证了通过 HA-VPN 连接到本地数据库的连接。

您已创建提供方基础架构,并了解了如何创建允许与提供方服务建立连接的混合 NEG、提供方服务和 Looker PSC 端点。

Cosmopup 认为 Codelab 很棒!

c911c127bffdee57.jpeg

后续操作

查看下列 Codelab…

深入阅读和视频

参考文档