Looker PSA 南向 HTTPS 互联网 NEG

1. 简介

只有使用 专用服务访问通道 进行专用连接的 Looker (Google Cloud Core) 实例支持专用 IP 和公共 IP 配置。

同时具有 专用 IP(专用服务访问通道)连接和公共 IP 连接 的 Looker (Google Cloud Core) 实例具有公共网址,所有入站流量都将通过公共 IP 连接。出站流量通过您的 VPC 路由,您可以将 VPC 配置为仅允许专用 IP 流量,如图 1 所示。

Figure1

9f587c14791dd92e.png

与 github.com 的通信解析为公共 IP 地址,因此无法从部署为专用或公共 + 专用的 Looker 实例访问。

在此 Codelab 中,您将使用从 Looker PSA 调用的内部 TCP 代理负载平衡器和互联网网络端点组 (NEG) 对 GitHub 执行南向 HTTPS 连接。

学习内容

  • 网络要求
  • 使用“测试连接”从 Looker 建立与 GitHub 的连接

所需条件

5348de53f0a78a50.png

2. 构建内容

您将部署一个内部 TCP 代理负载平衡器和互联网 NEG,该 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 拓扑

c5871e5418d37f13.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]
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

创建公共 NAT 网关

区域级内部 TCP 代理负载平衡器使用 NAT 网关进行互联网出站流量,配置选项为 –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB,因此同一 NATGW 不支持 GCE/GKE 互联网出站流量。部署另一个 NAT GW,其 –endpoint-types=ENDPOINT_TYPE_VM 用于 GCE/GKE 互联网出站流量。

在 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"

7b41b2f44609e5ed.png

更新 DNS 对等互连

在本部分中,您将使用语法 "gcloud services peered-dns-domains create",该语法会为专用服务连接创建对等互连的 DNS 网域,该连接会将来自服务提供方 VPC 网络中给定命名空间的记录请求发送到使用方 VPC 网络以进行解析。

在 Cloud Shell 中,创建一个对等互连的 DNS 网域,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 控制台中,前往:

启用开发模式(页面左下角),选择后,系统会显示横幅“您正处于开发模式”。

70c9ded749decfbe.png

创建一个新项目

在 Cloud 控制台中,前往:

开发 → 项目

e8ae11e0392a776d.png

选择“新建 LookML 项目”

65a3c2573e97e1e9.png

提供项目名称,选择“空白项目”,然后选择“创建项目”。

9185808e001fa540.png

选择“配置 Git”

42f5e51ce70642ad.png

配置 Git

使用 HTTPS GitHub 详细信息更新“代码库网址”,确保在网址后附加 .git,然后选择“继续”。

f5c448f6659b8fc1.png

示例:

4065ab1d196589f.png

使用您的 GitHub 用户名和 个人访问令牌(经典),然后选择“测试并完成设置”。

1dc44d63c555a9ae.png

选择“Git 操作”

b5903668a50a99ca.png

选择“测试 Git 连接”

51b722e84f2df38c.png

验证 Git 连接测试

8fb7386b739f60be.png

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 非常棒!

c911c127bffdee57.jpeg

后续操作

延伸阅读和视频

参考文档