1. 简介
只有使用专用服务访问通道的专用连接的 Looker (Google Cloud Core) 实例支持专用 IP 和公共 IP 配置。
同时具有专用 IP(专用服务访问通道)连接和公共 IP 连接的 Looker (Google Cloud Core) 实例具有公共网址,并且所有传入流量都将通过公共 IP 连接传输。出站流量会通过您的 VPC 路由,该 VPC 可以配置为仅允许专用 IP 流量,如图 1 所示。
Figure1
与 github.com 的通信会解析为公共 IP 地址,因此无法从部署为“私享”或“公开+私享”的 Looker 实例访问。
在此 Codelab 中,您将使用从 Looker PSA 调用的内部 TCP 代理负载平衡器和互联网网络端点组 (NEG) 向 GitHub 执行南向 HTTPS 连接。
学习内容
- 网络要求
- 使用测试连接从 Looker 建立与 GitHub 的连接
所需条件
- 具有所有者权限的 Google Cloud 项目
- GitHub 账号和代码库
- GitHub 个人访问令牌(传统版)
- 启用了“公共 + 专用”或“仅专用”的现有 Looker PSA 实例
2. 您将构建的内容
您将部署一个内部 TCP 代理负载平衡器和互联网 NEG,并将其配置为使用 github.com 的解析 IP 地址,以便利用 Cloud NAT 将流量出站到由 Looker 解析的 github.com 组织。
3. 网络要求
以下是网络要求的细分:
组件 | 说明 |
VPC ($vpc_network) | 自定义模式 VPC |
转发规则子网 | 用于为区域级内部 TCP 代理负载平衡器分配 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]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network
启用所有必要的服务:
gcloud services enable compute.googleapis.com
7. VPC 网络组件
VPC 网络
本教程的前提条件是 PSA Looker 实例已存在,因此关联的 VPC 已创建。
在 Cloud Shell 中,创建转发规则子网:
gcloud compute networks subnets create psa-fr-subnet --network $vpc_network --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
在 Cloud Shell 中,创建区域代理专用子网:
gcloud compute networks subnets create $region-proxyonly-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=$vpc_network \
--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 $vpc_network-cloud-router --network $vpc_network --region $region
在 Cloud Shell 中,创建 Cloud NAT 网关,为 TCP 代理负载平衡器启用互联网出站流量:
gcloud compute routers nats create $vpc_network-natgw \
--router=$vpc_network-cloud-router \
--endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
--nat-custom-subnet-ip-ranges=$region-proxyonly-subnet \
--auto-allocate-nat-external-ips \
--region=$region
预留负载均衡器的 IP 地址
在 Cloud Shell 中,为负载平衡器预留一个内部 IP 地址,稍后将用作 github.com 的 DNS A 记录:
gcloud compute addresses create internet-neg-lb-ip \
--region=$region \
--subnet=psa-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
8. 互联网 NEG
有两种方法可以配置互联网 NEG 引用的外部端点 :INTERNET_FQDN_PORT 或 INTERNET_IP_PORT。如果选择 INTERNET_IP_PORT(选项 1)格式,则只能使用可路由的公共互联网 IP 地址;如果选择 INTERNET_FQDN_PORT(选项 2)格式,则 FQDN 可以解析为可路由的公共互联网 IP 地址或专用 IP 地址,具体取决于端点的范围:区域还是全球。
选项 1:使用 IP 地址设置互联网 NEG
互联网 NEG 需要 Github.com 的已解析 IP 地址,因此为了获得最佳性能,请打开本地终端并执行 dig 命令,以获取 github.com 的 IP 地址。
本地终端示例会生成解析后的 IP 地址 140.82.113.4
bash-3.2$ dig github.com ; <<>> DiG 9.10.6 <<>> github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64801 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;github.com. IN A ;; ANSWER SECTION: github.com. 60 IN A 140.82.113.4 ;; Query time: 409 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Sep 26 15:50:45 CDT 2024 ;; MSG SIZE rcvd: 65
创建一个互联网 NEG,并将 –network-endpoint-type 设置为 internet_ip_port。
在 Cloud Shell 中,创建一个用于 github.com 的互联网 NEG:
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_IP_PORT \
--network=$vpc_network \
--region=$region
在 Cloud Shell 中,使用 github.com 的解析 IP 地址和端口 443 更新互联网 NEG github-internet-neg:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=[your-resolved-ip],port=443" \
--region=$region
示例:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=140.82.113.4,port=443" \
--region=$region
方法 2:使用 FQDN 设置互联网 NEG
您还可以创建互联网 NEG,并将 –network-endpoint-type 设置为 internet_FQDN_port。
在 Cloud Shell 中,创建一个用于 github.com 的互联网 NEG:
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=$vpc_network \
--region=$region
在 Cloud Shell 中,使用 FQDN github.com 更新互联网 NEG github-internet-neg:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="fqdn=github.com,port=443" \
--region=$region
9. 创建 GitHub 服务
创建负载平衡器组件
在 Cloud Shell 中,执行以下操作:
gcloud compute backend-services create psa-backend-svc --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend psa-backend-svc --network-endpoint-group=github-internet-neg --network-endpoint-group-region=$region --region=$region
在 Cloud Shell 中,创建目标 TCP 代理以将请求路由到后端服务:
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=psa-backend-svc \
--region=$region
使用以下语法创建转发规则(内部 TCP 代理负载平衡器)。
在 Cloud Shell 中,执行以下操作:
gcloud compute forwarding-rules create psa-github-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=$vpc_network \
--subnet=psa-fr-subnet \
--address=internet-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=443
10. GitHub DNS 区域
在下一部分中,您将为 GitHub.com 创建 DNS 响应政策,其中包含由内部 TCP 代理负载平衡器 IP 地址组成的 A 记录。
之后,DNS 对等互连将与 Looker PSA 共享 github.com 区域,从而允许通过内部负载平衡器与互联网 NEG 和 Cloud NAT 结合使用来连接到 github。
在 Cloud Shell 中,创建响应政策区域:
gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"
在 Cloud Shell 中,创建包含 TCP 代理负载平衡器 IP 地址 [insert-your-ip-address] 的 DNS A 记录:
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="[insert-your-ip-address]"
示例:
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="172.16.20.2"
更新 DNS 对等互连
在本部分中,您将使用语法 "gcloud services peered-dns-domains create" 为专用服务连接创建对等 DNS 网域,该连接会将来自服务提供方 VPC 网络的给定命名空间中的记录请求发送到服务使用方 VPC 网络进行解析。
在 Cloud Shell 中,创建一个 peered-dns-domain,Looker 将针对 github.com 对其进行查询:
gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.
11. 测试与 GitHub 的连接情况
在以下步骤中,您将使用 Looker 控制台创建一个项目,以验证与 github.com 的 HTTPS 连接。
12. 创建一个新项目
启用开发者模式
在 Looker 控制台中,前往:
启用开发者模式(页面左下角),选择后系统会显示横幅“您目前处于开发者模式”。
创建一个新项目
在 Cloud 控制台中,前往:
开发 → 项目
选择“New LookML Project”(新的 LookML 项目)
提供项目名称,选择“Blank Project”(空白项目),然后选择“Create Project”(创建项目)。
选择“配置 Git”
配置 Git
使用您的 HTTPS GitHub 详细信息更新代码库网址,确保在网址后附加 .git,然后选择“继续”。
示例:
使用您的 GitHub 用户名和个人访问令牌(传统版)更新所选内容,然后选择“测试并完成设置”。
选择“Git 操作”
选择“测试 Git 连接”
验证 Git 连接测试
13. 清理
在一个 Cloud Shell 终端中,删除实验组件:
gcloud compute forwarding-rules delete psa-github-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete psa-backend-svc --region=$region -q
gcloud compute routers nats delete $vpc_network-natgw --router=$vpc_network-cloud-router --router-region=$region -q
gcloud compute routers delete $vpc_network-cloud-router --region=$region -q
gcloud compute network-endpoint-groups delete github-internet-neg --region=$region -q
gcloud compute addresses delete internet-neg-lb-ip --region=$region -q
gcloud compute networks subnets delete psa-fr-subnet $region-proxyonly-subnet --region=$region -q
gcloud services peered-dns-domains delete github-com --network=$vpc_network -q
gcloud dns --project=$project response-policies rules delete github --response-policy="github-com" -q
gcloud dns response-policies update github-com --networks= -q
gcloud dns response-policies delete github-com
14. 恭喜
恭喜!您已成功使用 Looker 控制台配置并验证了与 GitHub 的连接。
Cosmopup 认为 Codelab 很棒!