1. 简介
在此 Codelab 中,您将使用内部 TCP 代理负载平衡器和从 Looker PSC 调用并用作服务使用方的互联网网络端点组,向 GitHub 执行南向 SSH 连接。
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 端点
- 使用测试连接从 Looker 建立与 GitHub 的连接
所需条件
- 具有所有者权限的 Google Cloud 项目
- GitHub 账号和代码库
- Looker 和 GitHub 之间共享的 SSH 部署密钥
- 现有 Looker PSC 实例
2. 您将构建的内容
您将建立一个生产者网络 looker-psc-demo,以部署通过 Private Service Connect (PSC) 作为服务发布的内部 TCP 代理负载平衡器和互联网 NEG。发布后,您需要执行以下操作来验证对生产者服务的访问权限:
- 在 Looker 中创建与提供方服务连接关联的 PSC 端点
- 使用 Looker 控制台创建一个新项目,然后按照使用 SSH 连接到 Git 中的说明测试与 GitHub.com 的 SSH 连接
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 | 用于为负载平衡器定义外部后端的资源。端点不能只通过 Cloud VPN 或 Cloud Interconnect 才可以访问。 |
后端服务 | 后端服务充当负载平衡器与后端资源之间的桥梁。在本教程中,后端服务与互联网 NEG 相关联。 |
Cloud Router | Cloud NAT 依赖于 Cloud Router 来提供控制平面功能,但不依赖于 Cloud Router 来提供 BGP 会话管理功能。 |
Cloud NAT | 区域级互联网 NEG 利用 Cloud NAT 进行互联网出站流量传输。 |
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
创建 Public NAT 网关
区域内部 TCP 代理负载平衡器使用 NAT 网关通过配置选项 –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB 进行互联网出站流量传输,因此同一 NATGW 不支持 GCE/GKE 互联网出站流量。为 GCE/GKE 互联网出站流量部署额外的 NAT GW,并使用 –endpoint-types=ENDPOINT_TYPE_VM。
在 Cloud Shell 中,创建 Cloud Router 路由器:
gcloud compute routers create looker-psc-demo-cloud-router --network looker-psc-demo --region $region
在 Cloud Shell 中,创建 Cloud NAT 网关,为 TCP 代理负载平衡器启用互联网出站流量:
gcloud compute routers nats create looker-psc-demo-natgw \
--router=looker-psc-demo-cloud-router \
--endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
--nat-custom-subnet-ip-ranges=$region-proxy-only-subnet \
--auto-allocate-nat-external-ips \
--region=$region
预留负载均衡器的 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 中,创建一个用于 github.com 的互联网 NEG
gcloud compute network-endpoint-groups create github-internet-neg-ssh \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=looker-psc-demo \
--region=$region
在 Cloud Shell 中,使用 FQDN github.com 和端口 22 更新互联网 NEG github-internet-neg-ssh
gcloud compute network-endpoint-groups update github-internet-neg-ssh \
--add-endpoint="fqdn=github.com,port=22" \
--region=$region
创建网络防火墙政策和防火墙规则
在 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 --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=github-internet-neg-ssh --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-github-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=22
创建服务连接
在 Cloud Shell 中,创建服务附件 github-svc-attachment-ssh:
gcloud compute service-attachments create github-svc-attachment-ssh --region=$region --producer-forwarding-rule=producer-github-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet
接下来,获取并记下 selfLink URI 中列出的服务附件(以项目开头),以便在 Looker 中配置 PSC 端点。
selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/github-svc-attachment-ssh
在 Cloud Shell 中,执行以下操作:
gcloud compute service-attachments describe github-svc-attachment-ssh --region=$region
预期输出示例
connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-08-31T13:43:07.078-07:00'
description: ''
enableProxyProtocol: false
fingerprint: O5OtqHR33v4=
id: '7557641709467614900'
kind: compute#serviceAttachment
name: github-svc-attachment-ssh
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
high: '19348441121424360'
low: '7557641709467614900'
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/github-svc-attachment-ssh
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-github-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: githubssh.com
- SERVICE_ATTACHMENT_1:描述服务连接时捕获的 URI,即 github-svc-attachment-ssh。
- 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=githubssh.com,attachment=projects/$project/regions/$region/serviceAttachments/github-svc-attachment-ssh \
--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.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": "githubssh.com",
"targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/github-svc-attachment-ssh"
}
]
},
"pscEnabled": true,
"state": "ACTIVE",
"updateTime": "2024-08-31T20:53:04.824018122Z"
}
在 Cloud 控制台中验证 PSC 端点
您可以在 Cloud 控制台中验证 PSC 连接
在 Cloud 控制台中,前往:
Looker → Looker 实例 → 详细信息
10. 测试与 GitHub 的连接情况
在以下步骤中,您将使用 Looker 控制台创建一个项目,通过在 Looker 界面中将域名 github.com 更新为 githubssh.com 来验证与 GitHub.com 的 SSH 连接。只有与 GitHub 建立 SSH 连接时才需要执行此操作。
11. 创建一个新项目
启用开发者模式
在 Looker 控制台中,前往:
启用开发者模式(页面左下角),选择后系统会显示横幅“您目前处于开发者模式”。
创建一个新项目
在 Cloud 控制台中,前往:
开发 → 项目
选择“New LookML Project”(新的 LookML 项目)
提供项目名称,选择“Blank Project”(空白项目),然后选择“Create Project”(创建项目)。
选择“配置 Git”
配置 Git
选择“继续”后,系统会提示您验证代码库网址和 Git 托管服务。
将部署密钥 添加到您的 GitHub 代码库。请务必允许写入权限。更新完毕后,选择“测试并完成设置”。
选择“Git 操作”
选择“测试 Git 连接”
验证 Git 连接测试
12. 清理
在一个 Cloud Shell 终端中删除实验组件
gcloud compute service-attachments delete github-svc-attachment-ssh --region=$region -q
gcloud compute forwarding-rules delete producer-github-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 looker-psc-demo-natgw --router=looker-psc-demo-cloud-router --router-region=$region -q
gcloud compute routers delete looker-psc-demo-cloud-router --region=$region -q
gcloud compute addresses delete internet-neg-lb-ip --region=$region -q
gcloud compute network-endpoint-groups delete github-internet-neg-ssh --region=$region -q
gcloud compute networks subnets delete producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q
gcloud compute networks delete looker-psc-demo -q
13. 恭喜
恭喜!您已成功使用由 Private Service Connect 提供支持的 Looker 控制台配置并验证了与 GitHub 的连接。
您已创建提供方基础架构,并了解了如何创建允许与提供方服务建立连接的互联网 NEG、提供方服务和 Looker PSC 端点。
Cosmopup 认为 Codelab 很棒!
后续操作
查看下列 Codelab…
- 使用 Private Service Connect 发布和使用服务
- 使用 Private Service Connect 和内部 TCP 代理负载平衡器通过混合网络连接到本地服务
- 访问所有已发布的 Private Service Connect Codelab