1. 简介
在此 Codelab 中,您将使用从 Looker PSC 调用的内部 TCP 代理负载平衡器和互联网网络端点组 (NEG) 作为服务使用方,向 GitLab 自有环境执行南向 HTTPS 连接。
Private Service Connect 是 Google Cloud 网络的一项功能,允许使用方从其 VPC 网络内部以私密方式访问托管式服务。同样,它允许托管式服务提供方在其各自的 VPC 网络中托管这些服务,并为其使用方提供专用连接。例如,当您使用 Private Service Connect 访问 Looker 时,您是服务使用方,而 Google 是服务提供方,如图 1 所示。
图 1.
南向访问(也称为反向 PSC)可让使用方以提供方的身份创建已发布服务,以允许 Looker 访问 VPC 中的本地端点、托管式服务和互联网。南向连接可部署在任何区域,而无需考虑 Looker PSC 的部署位置,如图 2 所示。
图 2.
学习内容
- 网络要求
- 创建 Private Service Connect 提供方服务
- 在 Looker 中创建 Private Service Connect 端点
- 与 GitLab 自有实例建立连接
所需条件
- 具有所有者权限的 Google Cloud 项目
- GitLab 账号和代码库
- 现有 Looker PSC 实例
2. 您将构建的内容
您将建立一个生产者网络 looker-psc-demo,以部署通过 Private Service Connect (PSC) 作为服务发布的内部 TCP 代理负载平衡器和互联网 NEG。发布后,您需要执行以下操作来验证对生产者服务的访问权限:
- 在 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 拓扑
5. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID
标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 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 中列出的服务连接(以项目开头),以便在 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 → 已发布服务
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:描述服务连接时捕获的 URI,即 gitlab-self-managed-svc-attachment-https。
- 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 connectionStatus 是否为“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 实例 → 详细信息
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 中,创建一个 A 记录,其中包含 GitLab 自托管实例 IP 地址 192.168.10.4。
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 和本地网络之间配置混合网络(例如互连、高可用性 VPN),以实现连接。
以下是建立混合 NEG 与本地连接所需的步骤:
- 选择 Network Connectivity 产品 | Google Cloud
- 在采用 VPC 对等互连的中心-辐射架构中,混合 NEG 部署在与 Cloud Router 位于同一 VPC(hub)
- 确保更新本地防火墙以适应代理专用子网范围,因为此子网用作与本地工作负载通信的来源 IP 地址
- 以自定义路由通告的形式,从 Cloud Router 通告仅代理子网
14. 测试连接
在以下步骤中,您将使用 Looker 控制台创建一个项目,以便按照设置和测试 Git 连接中所述的步骤验证与 gitlabonprem.com 的 HTTPS 连接。
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 很棒!
后续操作
查看下列 Codelab…
- 使用 Private Service Connect 发布和使用服务
- 使用 Private Service Connect 和内部 TCP 代理负载平衡器通过混合网络连接到本地服务
- 访问所有已发布的 Private Service Connect Codelab