GSP1317
概览
Network Connectivity Center (NCC) 可用于通过 VPC spoke 在 VPC 之间大规模建立连接。如果 VPC 是指 VPC spoke,则多个 VPC 网络可通过 NCC Hub 进行连接。
NCC 是 Google Cloud 中网络连接管理的中心辐射型控制平面模型。hub 资源提供一个集中式连接管理模型,可实现 spoke 互连。
在本实验中,您将学习如何使用 gcloud 命令来配置 NCC hub,以及如何在控制台中查看更改。NCC hub 将充当控制平面,负责在每个 VPC Spoke 之间构建路由配置。您还需要设置 Private Service Connect 以连接到 Cloud SQL。

学习内容
在本实验中,您将学习如何执行以下任务:
- 使用 NCC 实现全网状 VPC 连接。
- 设置 Private Service Connect。
- 通过 spoke 发送流量,以验证与 Cloud SQL 的连接。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
准备工作
在本实验中,您需要在这两个项目之间多次切换。确保您位于正确的项目中。使用 2 个 cloudshell 窗口(每个项目一个)会很有帮助。
启用 Network Connectivity API
在使用 Network Connectivity Center 执行任何任务之前,您需要先通过运行以下命令启用 Network Connectivity API:
gcloud services enable networkconnectivity.googleapis.com
验证现有 Google Cloud 资源
在本实验中,系统已为您构建了网络资源。现在花一分钟时间查看可用的 VPC 网络和虚拟机。您可以使用 Google Cloud 控制台或命令行来查看这些资源。
您会看到自己拥有:
- 2 个 VPC
- 已启用 Private Service Connect 的 Cloud SQL Postgres 实例
配置数据传输连接
如需设置数据传输连接,您可以使用 NCC 构建 hub 和 spoke,以允许通过 Google Cloud 将数据从一个站点传输到另一个站点。
任务 1. 创建 hub
- 运行以下命令以创建 NCC hub:
gcloud network-connectivity hubs create ncc-hub
- 描述新创建的 NCC hub。
gcloud network-connectivity hubs describe ncc-hub
点击检查我的进度,验证已完成以下目标:
创建 NCC hub。
任务 2. 将 VPC 配置为 NCC spoke
管理员可以排除子网路由,防止其从 VPC spoke 导出到 NCC hub 的路由表。您将创建一个基于汇总前缀的排除导出规则,以防 VPC1 的子网导出到 NCC hub 路由表中。
- 使用以下
gcloud 命令列出属于 VPC1 的所有子网。
gcloud config set accessibility/screen_reader false
gcloud compute networks subnets list --network=vpc1-ncc
- 将 VPC1 配置为 NCC spoke,然后使用
export-exclude-ranges 关键字来过滤该特定范围内的 /24 汇总路由,从而防止将这对 /25 子网导入到 hub 路由表中:
gcloud network-connectivity spokes linked-vpc-network create vpc1-spoke1 \
--hub=ncc-hub \
--vpc-network=vpc1-ncc \
--exclude-export-ranges=10.1.2.0/24 \
--global
- 列出 NCC hub 默认路由表的内容。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default --filter="NEXT_HOP:vpc1-ncc"
- 将 VPC2 配置为 NCC spoke:
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
- 列出 NCC hub 默认路由表的内容并检查输出结果。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
点击检查我的进度,验证已完成以下目标:
将 VPC 配置为 NCC spoke。
任务 3. 验证 IPv4 数据路径连接
- 依次点击 Compute Engine > 虚拟机实例,然后通过 SSH 连接到 vm1-vpc1-ncc。运行以下命令以启动 TCP 转储,从而跟踪来自 vm2-vpc2-ncc 的 ICMP 数据包。请注意,此虚拟机位于 VPC2 上。
vm1-vpc1-ncc
sudo tcpdump -i any icmp -v -e -n
- 建立 SSH 会话以连接到 vm2-vpc2-ncc,并与 vm1-vpc1-ncc 的 IP 地址建立
ping 连接。
vm2-vpc2-ncc
ping 10.1.1.2
任务 4. 设置 Private Service Connect
借助 Private Service Connect (PSC) 功能,您可以使用自己的内部 IP 地址在虚拟私有云 (VPC) 网络之间实现私密且安全的通信。
预留内部 IP 地址
- 在环境变量 REGION 所指定的 Google Cloud 区域中查找 VPC 子网的 CIDR 范围,并为 Private Service Connect 端点选择一个此 CIDR 范围内的可用 IP 地址。
gcloud compute networks subnets describe vpc2-ncc-subnet1 \
--region={{{project_0.default_region | REGION}}} \
--project={{{project_0.project_id|PROJECT_ID}}} \
--format="value(ipCidrRange)"
- 在上述派生的 VPC 子网 CIDR 范围内,为 Private Service Connect 端点预留一个内部 IP 地址。
将 [ADDRESS] 替换为之前的命令输出中 CIDR 范围内的 IP 地址。
gcloud compute addresses create cloudsql-psc \
--project={{{project_0.project_id|PROJECT_ID}}} \
--region={{{project_0.default_region | REGION}}} \
--subnet=vpc2-ncc-subnet1 \
--addresses=[ADDRESS]
注意:如果您看到以下错误消息:“Could not fetch resource: IP 'X.X.X.X' is already being used by another resource”(无法获取资源:IP 'X.X.X.X' 已被其他资源占用),请尝试使用同一 CIDR 范围内的其他 IP 地址。此外,请依次点击 Compute Engine > 虚拟机实例,并使用与 vm2-vpc2-ncc 和 cloudsql-client 虚拟机实例的内部 IP 不同的 IP 地址。
- 验证是否已预留内部 IP 地址,以及该 IP 地址是否显示为“已预留”状态。请留意 [ADDRESS/RANGE],后续步骤中需要用到它。
gcloud compute addresses list \
--project={{{project_0.project_id|PROJECT_ID}}} \
--filter="name=cloudsql-psc"
获取服务连接 URI
创建 Cloud SQL 实例并为该实例启用 Private Service Connect 后,获取服务连接 URI 并使用它来创建具有上述预留内部 IP 地址的 Private Service Connect 端点。
gcloud sql instances describe {{{project_0.startup_script.postgres-instance}}} \
--project={{{project_0.project_id|PROJECT_ID}}} \
--format="value(pscServiceAttachmentLink)"
创建 Private Service Connect
- 创建 Private Service Connect 端点并将其指向 Cloud SQL 服务连接 URI。
将 [Service_Attachment_URI] 替换为之前的命令输出中的服务连接 URI。
gcloud compute forwarding-rules create cloudsql-psc-ep \
--address=cloudsql-psc \
--project={{{project_0.project_id|PROJECT_ID}}} \
--region={{{project_0.default_region | REGION}}} \
--network=vpc2-ncc \
--target-service-attachment=[Service_Attachment_URI] \
--allow-psc-global-access
- 验证端点是否可以连接到服务连接。
gcloud compute forwarding-rules describe cloudsql-psc-ep \
--project={{{project_0.project_id|PROJECT_ID}}} \
--region={{{project_0.default_region | REGION}}} \
--format="value(pscConnectionStatus)"
配置 DNS 托管式区域
如需为 Cloud SQL 实例添加建议的 DNS 名称,最好在相应 VPC 网络中创建专用 DNS 区域。
gcloud dns managed-zones create cloudsql-dns \
--project={{{project_0.project_id|PROJECT_ID}}} \
--description="DNS zone for the Cloud SQL instances" \
--dns-name={{{project_0.default_region | REGION}}}.sql.goog. \
--networks=vpc2-ncc \
--visibility=private
为 Private Service Connect 添加 DNS 记录
- 获取 Cloud SQL 实例的建议 DNS 记录。
gcloud sql instances describe {{{project_0.startup_script.postgres-instance}}} \
--project={{{project_0.project_id|PROJECT_ID}}} \
--format="value(dnsName)"
在输出中,找到下一步中所需的 DNS 记录。
- 将建议的 DNS 记录添加到 DNS 托管式区域
将 [DNS_RECORD] 替换为建议的 DNS 记录,并将 [ADDRESS/RANGE] 替换为如上所述之前命令的输出。
gcloud dns record-sets create [DNS_RECORD] \
--project={{{project_0.project_id|PROJECT_ID}}} \
--type=A \
--rrdatas=[ADDRESS/RANGE] \
--zone=cloudsql-dns
点击检查我的进度,验证已完成以下目标:
设置 Private Service Connect。
任务 5. 通过 Private Service Connect 连接到 Cloud SQL
- 连接到
cloudsql-client 虚拟机实例。
gcloud compute ssh --zone {{{project_0.default_zone | ZONE}}} "cloudsql-client" \
--tunnel-through-iap --project {{{project_0.project_id|PROJECT_ID}}}
- 连接到该实例,替换
[DNS_RECORD],并使用 changeme 作为密码。
psql "sslmode=disable dbname=postgres user=postgres host=[DNS_RECORD]"
- 创建一个数据库:
CREATE DATABASE company;
- 现在,列出所有数据库:
\l
- 连接到员工数据库:
\c company
- 在公司数据库中创建表:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
first VARCHAR(255) NOT NULL,
last VARCHAR(255) NOT NULL,
salary DECIMAL (10, 2)
);
- 将数据插入公司数据库的员工表中:
INSERT INTO employees (first, last, salary) VALUES
('Max', 'Mustermann', 5000.00),
('Anna', 'Schmidt', 7000.00),
('Peter', 'Mayer', 6000.00);
- 查询员工表:
SELECT * FROM employees;
- 退出 Postgres 数据库和虚拟机并返回到 Cloud Shell:
\q
exit
点击检查我的进度,验证已完成以下目标:
通过 Private Service Connect 连接到 Cloud SQL。
任务 6. 删除资源
在生产环境中,您需要删除不使用的资源,以免产生费用。在本实验中,您将学习移除 spoke 和 hub 的简单步骤:
删除 spoke 和 hub
- 删除 NCC spoke:
gcloud network-connectivity spokes delete vpc1-spoke1 --global --quiet
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
- 删除 NCC hub:
gcloud network-connectivity hubs delete ncc-hub --quiet
- 删除 DNS 记录
gcloud dns record-sets delete [DNS_RECORD] \
--project={{{project_0.project_id|PROJECT_ID}}} \
--type=A \
--zone=cloudsql-dns
- 删除 DNS 托管式区域:
gcloud dns managed-zones delete cloudsql-dns \
--project={{{project_0.project_id|PROJECT_ID}}} \
--quiet
恭喜!
您已了解如何使用 Network Connectivity Center 为现有 Google Cloud 资源构建 hub 和 spoke,并验证了数据是否可以通过 NCC 使用 NIC 进行传输。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
本手册的最后更新时间:2025 年 6 月 12 日
本实验的最后测试时间:2025 年 6 月 12 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。