Looker PSC 南向 HTTPS 互联网 NEG Gitlab 自行管理

1. 简介

在此 Codelab 中,您将使用内部 TCP 代理负载平衡器和互联网网络端点组 (NEG) 对 GitLab 自托管环境执行出站 HTTPS 连接,这些资源将从 Looker PSC 作为服务使用方调用。

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

图 1。

145ea4672c3a3b14.png

出站访问(也称为反向 PSC)允许使用方创建已发布服务作为提供方,以允许 Looker 访问本地、VPC 中的端点、托管式服务和互联网。无论 Looker PSC 部署在哪个区域,出站连接都可以部署在任何区域中,如图 2 中突出显示的部分所示。

图 2。

61932a992ba9b6f4.png

学习内容

  • 网络要求
  • 创建 Private Service Connect 提供方服务
  • 在 Looker 中创建 Private Service Connect 端点
  • 建立与 GitLab 自托管实例的连接

所需条件

def88091b42bfe4d.png

2. 构建内容

您将建立一个提供方网络 looker-psc-demo,以部署内部 TCP 代理负载平衡器和互联网 NEG,这些资源将通过 Private Service Connect (PSC) 作为服务发布。发布后,您将执行以下操作来验证对提供方服务的访问权限:

  • 在 Looker 中创建一个与提供方服务连接关联的 PSC 端点
  • 使用 Looker 控制台创建一个新项目,并测试与 GitLab 自托管环境的 HTTPS 连接。

3. 网络要求

下面是提供方网络(在此 Codelab 中,使用方是 Looker PSC 实例)的网络要求细分。

组件

说明

VPC (looker-psc-demo)

自定义模式 VPC

PSC NAT 子网

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

PSC 转发规则子网

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

PSC NEG 子网

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

仅代理子网

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

互联网 NEG

一种资源,用于为负载平衡器定义外部后端,该负载平衡器配置为 FQDN,表示 Gitlab 自托管本地 FQDN。互联网 FQDN 在 VPC 内执行 DNS 查找以进行解析。

后端服务

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

4. Codelab 拓扑

34950ed6ef504309.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]
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 internet-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-fr-subnet

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

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

输出示例:

user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

设置互联网 NEG

创建一个互联网 NEG,并将 –network-endpoint-type 设置为 internet-fqdn-port(可通过其访问外部后端的主机名和端口)。

在 Cloud Shell 中,创建一个用于访问 Gitlab 自托管实例 gitlabonprem.com 的互联网 NEG。

gcloud compute network-endpoint-groups create gitlab-self-managed-internet-neg \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=looker-psc-demo \
    --region=$region

在 Cloud Shell 中,使用 FQDN gitlabonprem.com 和端口 443 更新互联网 NEG gitlab-self-managed-internet-neg

gcloud compute network-endpoint-groups update gitlab-self-managed-internet-neg \
    --add-endpoint="fqdn=gitlabonprem.com,port=443" \
    --region=$region

创建网络防火墙规则

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

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

在 Cloud Shell 中,创建 IAP 防火墙规则。

gcloud compute firewall-rules create ssh-iap-looker-psc-demo \
    --network looker-psc-demo \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

8. 创建提供方服务

创建负载平衡器组件

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

gcloud compute backend-services create producer-backend-svc  --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED

gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=gitlab-self-managed-internet-neg --network-endpoint-group-region=$region --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-gitlab-self-managed-fr\
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=looker-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=internet-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=443

创建服务连接

在 Cloud Shell 中,创建服务连接 gitlab-self-managed-svc-attachment-https,并启用自动批准,以允许 Looker Core 连接到该服务连接。如果您希望控制对服务连接的访问权限,则支持 显式批准选项。

gcloud compute service-attachments create gitlab-self-managed-svc-attachment-https --region=$region --producer-forwarding-rule=producer-gitlab-self-managed-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/gitlab-self-managed-svc-attachment-https

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

gcloud compute service-attachments describe gitlab-self-managed-svc-attachment-https --region=$region

示例:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2025-03-04T18:55:42.254-08:00'
description: ''
enableProxyProtocol: false
fingerprint: MlY9GLLGsgE=
id: '9103522880241140673'
kind: compute#serviceAttachment
name: gitlab-self-managed-svc-attachment-https
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '115404658846991336'
  low: '9103522880241140673'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/serviceAttachments/gitlab-self-managed-svc-attachment-https
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/forwardingRules/producer-gitlab-self-managed-fr

在 Cloud 控制台中,前往:

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

6fa12f77e4640b08.png

43987fabbabb41ad.png

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

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

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

  • INSTANCE_NAME:Looker (Google Cloud Core) 实例的名称。
  • DOMAIN_1:gitlabonprem.com
  • SERVICE_ATTACHMENT_1:描述服务连接 gitlab-self-managed-svc-attachment-https 时捕获的 URI。
  • 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=gitlabonprem.com,attachment=projects/$project/regions/$region/serviceAttachments/gitlab-self-managed-svc-attachment-https \
--region=$region

在 Cloud Shell 中,验证 serviceAttachments 连接状态是否为“ACCEPTED”,并使用 Looker PSC INSTANCE_NAME 进行更新

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": "cosmopup.looker.com",
    "state": "AVAILABLE"
  },
  "encryptionConfig": {},
  "lookerVersion": "24.12.28",
  "name": "projects/$project/locations/$region/instances/looker-psc-instance",
  "platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
  "pscConfig": {
    "allowedVpcs": [
    "projects/$project/global/networks/looker-psc-demo"
    ],
    "lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "gitlabonprem.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/gitlab-self-managed-svc-attachment-https"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-08-30T17:47:33.440271635Z"
}

在 Cloud 控制台中验证 PSC 端点

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

在 Cloud 控制台中,前往:

Looker → Looker 实例 → 详细信息

2d4684d722d31e4b.png

2d600f33dc61cb6d.png

10. DNS 解析

在以下部分中,创建一个 GCE 实例,并通过执行 PING 来验证对 Gitlab 自托管实例 gitlabonprem.com 的 DNS 解析。正如预期的那样,解析将失败,需要为 gitlabonprem.com 创建专用 DNS 区域。

11. 创建 GCE 实例

在 Cloud Shell 中,创建用于验证 DNS 解析的 GCE 实例。

gcloud compute instances create gce-dns-lookup \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=producer-psc-fr-subnet

在 Cloud Shell 中使用 IAP 登录 consumer-vm,通过执行 curl 来验证与提供方服务的连接。如果超时,请重试。

gcloud compute ssh gce-dns-lookup --project=$projectid --zone=us-central1-a --tunnel-through-iap

从操作系统对 gitlabonprem.com 执行 PING,预计会失败。

ping gitlabonprem.com

示例:

user@gce-dns-lookup:~$ ping gitlabonprem.com
ping: gitlabonprem.com: Name or service not known

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

exit

12. 创建专用 DNS 区域

在 Cloud Shell 中,创建 Cloud DNS 专用区域。

gcloud dns --project=$projectid managed-zones create gitlab-self-managed --description="" --dns-name="gitlabonprem.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/looker-psc-demo"

在 Cloud Shell 中,创建包含 Gitlab 自托管实例 IP 地址 192.168.10.4 的 A 记录。

gcloud dns --project=$projectid record-sets create gitlabonprem.com. --zone="gitlab-self-managed" --type="A" --ttl="300" --rrdatas="192.168.10.4"

在 Cloud Shell 中使用 IAP 登录 consumer-vm,通过执行 curl 来验证与提供方服务的连接。如果超时,请重试。

gcloud compute ssh gce-dns-lookup --project=$projectid --zone=us-central1-a --tunnel-through-iap

从操作系统对 gitlabonprem.com 执行 PING,该地址解析为 192.168.10.4。

ping gitlabonprem.com

示例:

user@gce-dns-lookup:~$ ping gitlabonprem.com
PING gitlabonprem.com (192.168.10.4) 56(84) bytes of data

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

exit

13. 混合连接

现在可以使用本地托管的专用 IP 地址解析 FQDN gitlabonprem.com。接下来,必须在 looker-psc-demo VPC 和本地网络之间配置混合网络(例如 Interconnect、HA-VPN),以启用连接。

以下是在本地建立混合 NEG 连接所需的步骤:

14. 测试连接

在以下步骤中,您将使用 Looker 控制台创建一个项目,以使用 设置和测试 Git 连接 中概述的过程验证与 gitlabonprem.com 的 HTTPS 连接。

ae3b3884e8ef5db8.png

15. 清理

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

gcloud compute service-attachments delete gitlab-self-managed-svc-attachment-https --region=$region -q

gcloud compute forwarding-rules delete producer-gitlab-self-managed-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-endpoint-groups delete gitlab-self-managed-internet-neg --region=$region -q

gcloud compute instances delete gce-dns-lookup --zone=us-central1-a -q

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

gcloud dns --project=$projectid record-sets delete gitlabonprem.com. --zone="gitlab-sel
f-managed" --type="A"

gcloud dns --project=$projectid managed-zones delete gitlab-self-managed 

gcloud compute networks delete looker-psc-demo -q

16. 恭喜

恭喜!您已使用由 Private Service Connect 提供支持的 Looker 控制台成功配置并验证与 GitLab 自托管实例的连接。

您创建了提供方基础架构,了解了如何创建互联网 NEG、提供方服务和 Looker PSC 端点,这些资源允许连接到提供方服务。

Cosmopup 认为 Codelab 非常棒!

c911c127bffdee57.jpeg

后续操作

查看下列 Codelab…

延伸阅读和视频

参考文档