GSP161

概览
有了虚拟专用网 (VPN),您的虚拟机 (VM) 和子网便不再受地理位置的限制!支持多区域和多可用区的 VPN,可以为业务遍布全球的组织提供具备高可用性、可伸缩性和安全性的网络解决方案。本实验主要测试网络连接和速度,旨在演示以下方面:
- 当某个区域或可用区出现服务故障或中断时,流量可无缝路由至无故障的其他区域或可用区,以确保连接持续性。
- 如果端点位置靠近用户所在区域,网络路径会缩短,以减少延迟并提升整体性能。
- 多区域 VPN 可以根据网络状况和用户位置来智能路由流量,以确保使用最快、最高效的路径。
在本实验中,您将使用 gcloud
CLI 向现有网络添加虚拟机,然后测试各虚拟机之间的连接性和延迟时间。
前提条件
虽然并非必需,但要了解如何创建网络并应用防火墙规则,建议先完成创建自定义网络并应用防火墙规则实验。本实验假定您已了解这些概念。
学习内容
- 将虚拟机添加到现有 VPN 子网
- 确认虚拟机之间的连接性
- 测量可用区之间的延迟时间
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 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
。
如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID:
Your Cloud Platform project in this session is set to YOUR_PROJECT_ID
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
-
点击授权。
-
现在,输出的内容应如下所示:
输出:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = <project_ID>
输出示例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Note: For full documentation of gcloud
, in Google Cloud, refer to the gcloud CLI overview guide.
设置区域和可用区
某些 Compute Engine 资源位于区域和可用区内。区域是指某个地理位置,您可以在其中运行自己的资源。每个区域包含一个或多个可用区。
在 Cloud Shell 中运行以下 gcloud
命令,设置实验的默认区域和可用区:
gcloud config set compute/zone "{{{project_0.default_zone | Zone}}}"
export ZONE=$(gcloud config get compute/zone)
gcloud config set compute/region "{{{project_0.default_region | Region}}}"
export REGION=$(gcloud config get compute/region)
点击左侧菜单中的 VPC 网络查看您的整个网络。taw-custom-network
有三个子网且应用了防火墙规则。
查看网络和子网的设置。
接下来,我们将在每个子网中创建一个虚拟机,并确保您能连接到这些虚拟机。
任务 1. 连接虚拟机并检查延迟时间
在此任务中,您将在每个可用区中创建一个虚拟机。每个虚拟机都将使用防火墙规则允许网络流量通过所需的网络标记。
- 运行以下命令,在 subnet- 子网中创建一个名为
us-test-01
的实例:
gcloud compute instances create us-test-01 \
--subnet subnet-{{{project_0.default_region | Region}}} \
--zone {{{project_0.default_zone | ZONE}}} \
--machine-type e2-standard-2 \
--tags ssh,http,rules
务必记下外部 IP,稍后我们会在实验中用到它。
输出:
Created [https://www.googleapis.com/compute/v1/projects/cloud-network-module-101/zones/{{{project_0.default_zone | ZONE}}}/instances/us-test-01].
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
us-test-01 {{{project_0.default_zone | ZONE}}} e2-standard-2 10.0.0.2 104.198.230.22 RUNNING
- 接下来,在相关子网中创建
us-test-02
和 us-test-03
虚拟机:
gcloud compute instances create us-test-02 \
--subnet subnet-{{{project_0.default_region_2 | REGION}}} \
--zone {{{project_0.default_zone_2 | ZONE}}} \
--machine-type e2-standard-2 \
--tags ssh,http,rules
gcloud compute instances create us-test-03 \
--subnet subnet-{{{project_0.default_region_3 | REGION}}} \
--zone {{{project_0.default_zone_3 | ZONE}}} \
--machine-type e2-standard-2 \
--tags ssh,http,rules
点击检查我的进度,验证已完成以下目标:
在指定可用区内创建三个实例,用于 traceroute 和性能测试目的。
验证您可以连接到所创建的虚拟机
接下来,进行一些练习来测试是否可以连接到您创建的虚拟机。使用 ping 来测试主机的可达性,并测量从来源主机向目标计算机发送消息的往返时间。
-
返回控制台并找到 Compute Engine。
-
点击 us-test-01
实例对应的 SSH 按钮。这将在新窗口中打开与该实例的 SSH 连接。
-
在 us-test-01
的 SSH 窗口中,输入以下命令,对 us-test-02
使用 ICMP(互联网控制消息协议)回显(在命令中添加该虚拟机的外部 IP 地址):
ping -c 3 <us-test-02-external-ip-address>
您可以在 Compute Engine 浏览器标签页的“外部 IP”字段下找到虚拟机的外部 IP。
注意:您的 IP 地址与图片所示不同。
- 运行以下命令,对
us-test-03
使用 ICMP 回显(在命令中添加该虚拟机的外部 IP 地址):
ping -c 3 <us-test-03 的外部 IP 地址>
输出示例:
PING 35.187.149.67 (35.187.149.67) 56(84) bytes of data.
64 bytes from 35.187.149.67: icmp_seq=1 ttl=76 time=152 ms
64 bytes from 35.187.149.67: icmp_seq=2 ttl=76 time=152 ms
64 bytes from 35.187.149.67: icmp_seq=3 ttl=76 time=152 ms
- 接下来,验证
us-test-02
和 us-test-03
实例也能通过 SSH 连接到其他实例。尝试对 us-test-01
使用 ICMP 回显。
使用 ping 测量延迟时间
延迟时间是指数据包在来源和目标之间往返所需的时间,通常以毫秒 (ms) 来衡量。
- 使用 ping 来测量这些区域之间的延迟时间 - 请打开
us-test-01
的 SSH 窗口并运行以下命令:
ping -c 3 us-test-02.{{{project_0.default_zone_2 | ZONE}}}
命令输出:
PING us-test-02.{{{project_0.default_zone_2 | ZONE}}}.c.cloud-network-module-101.internal (10.2.0.2) 56(84) bytes of data.
64 bytes from us-test-02.{{{project_0.default_zone_2 | ZONE}}}.c.cloud-network-module-101.internal (10.2.0.2): icmp_seq=1 ttl=64 time=105 ms
64 bytes from us-test-02.{{{project_0.default_zone_2 | ZONE}}}.c.cloud-network-module-101.internal (10.2.0.2): icmp_seq=2 ttl=64 time=104 ms
64 bytes from us-test-02.{{{project_0.default_zone_2 | ZONE}}}.c.cloud-network-module-101.internal (10.2.0.2): icmp_seq=3 ttl=64 time=104 ms
返回的延迟时间是往返时间 (RTT),即数据包从 us-test-01
传输到 us-test-02
所需的时间。
为测试连接性,ping 会使用 ICMP 回显请求和回显回复消息。
注意:要留意的事项
各区域之间的延迟时间是多少?从“us-test-02”到“us-test-03”的连接有什么特别之处?
注意:内部 DNS:如何向虚拟机实例提供 DNS?
每个实例都有一个元数据服务器,此服务器也用作该实例的 DNS 解析器。DNS 查找是按实例名称执行的。元数据服务器本身会存储本地网络的所有 DNS 信息,并查询 Google 的公共 DNS 服务器以获取本地网络之外的任何地址。
实例的内部完全限定域名 (FQDN) 的格式为 hostName.[ZONE].c.[PROJECT_ID].internal。
您始终可以使用此 FQDN 从一个实例连接到另一实例。如果您只想使用“主机名”等信息连接到实例,则需从 Compute Engine 随附的内部 DNS 解析器获取相应信息。
任务 2. Traceroute 和性能测试
Traceroute 是一款用于跟踪两台主机之间的路径的工具。Traceroute 是初步识别多种不同网络问题的好帮手。支持工程师或网络工程师在诊断网络问题时经常会使用 traceroute。
注意:功能
Traceroute 可显示主机之间的所有第 3 层(路由层)跃点。此功能通过向远程目的地发送多个数据包并增加 TTL(存留时间)值(从 1 开始)来实现。TTL 字段是 IP 数据包中的一个字段,通过每个路由器时都会减 1。如果 TTL 达到 0,数据包将被丢弃,并向发送方返回一条 ICMP 消息“已超出 TTL”。此方法用于防止路由循环;数据包不会无限循环下去,因为 TTL 字段最终会递减到 0。默认情况下,操作系统会将 TTL 值设置为较大的值(64、128、255 等),因此只有在异常情况下,TTL 值才会达到 0。
Traceroute 首先发送 TTL 值为 1 的数据包,然后发送 TTL 值为 2 的数据包,以此类推,使得这些数据包在路径中的第一个/第二个(以此类推)路由器处过期。这样,它便能获取返回的 ICMP TTL 超出消息的来源 IP/主机,以显示中间跃点的名称/IP。当 TTL 足够大时,数据包会到达目的地,而目的地也会作出响应。
发送的数据包类型取决于具体的实现。在 Linux 上,UDP 数据包会发送到更高的未使用端口。因此,最终目的地会返回“ICMP 端口无法访问”来作出响应。Windows 和 mtr 工具默认使用 ICMP 回显请求(例如 ping),因此最终目的地会返回 ICMP 回显回复。
尝试在一个虚拟机上设置 traceroute,看看它是如何工作的。
-
在此步骤中,请使用 us-test-01
和 us-test-02
虚拟机,并通过 SSH 连接到这两个虚拟机。
-
在 us-test-01
的 SSH 窗口中安装以下性能工具:
sudo apt-get update
sudo apt-get -y install traceroute mtr tcpdump iperf whois host dnsutils siege
- 接下来,将
traceroute
和 www.icann.org
一起使用,看看会是什么效果:
traceroute www.icann.org
在输出结果中,每一行代表一个跃点。
- 第一列:显示跃点数量。
- 第二列:显示跃点的 IP 地址(或在可用的情况下显示主机名)。
- 其余列:显示发送到该跃点的其他数据包的 RTT。
-
现在,更换目标和来源再试一下:
-
要停止 traceroute,请在 SSH 窗口中按 Ctrl+c 并返回命令行。
注意:要留意的事项
您从不同的 traceroute 中发现了什么?
Traceroute 和性能测试。
任务 3. 使用 iperf 测试性能
iperf
可用于测量网络吞吐量和延迟时间。使用 iperf
测试两台主机之间的性能时,需要将一台主机配置为 iperf 服务器以接受连接。
注意:以下命令会在各区域之间传输千兆字节的流量,这需要支付互联网出站流量费用。使用这些命令时请注意这一点。如果您未使用列入许可名单的项目,或者不在免费试用期,可以跳过本部分,或者仅重点浏览一下。(费用预计不到 1 美元。)
- 通过 SSH 连接到
us-test-02
并安装性能工具:
sudo apt-get update
sudo apt-get -y install traceroute mtr tcpdump iperf whois host dnsutils siege
- 通过 SSH 连接到
us-test-01
并运行以下命令:
iperf -s #run in server mode
- 通过 SSH 连接到
us-test-02
并运行此 iperf
:
iperf -c us-test-01.{{{project_0.default_zone | ZONE}}} #run in client mode
您将看到类似于以下内容的输出:
Client connecting to eu-vm, TCP port 5001
TCP window size: 45.0 KByte (default)
[ 3] local 10.20.0.2 port 35923 connected with 10.30.0.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 298 MBytes 249 Mbits/sec
- 在
us-test-01
上,完成后按 Ctrl + C 退出服务器端。
区域内的虚拟机之间
接下来,在与 us-test-01
不同的可用区中部署另一个实例 (us-test-04
)。您会发现,在一个区域内,出站流量带宽上限限制为每个核心 2 Gbps。
- 在 Cloud Shell 中,创建
us-test-04
:
gcloud compute instances create us-test-04 \
--subnet subnet-{{{project_0.default_region | REGION}}} \
--zone {{{project_0.default_zone | ZONE}}} \
--tags ssh,http
- 通过 SSH 连接到
us-test-04
并安装性能工具,如下所示:
sudo apt-get update
sudo apt-get -y install traceroute mtr tcpdump iperf whois host dnsutils siege
区域之间所能达到的最大带宽要低得多,主要是由于存在 TCP 窗口大小和单一流性能限制。您可以使用其他参数(例如 UDP)增加主机之间的带宽。
- 通过 SSH 连接到
us-test-02
并运行以下命令:
iperf -s -u #iperf server side
- 通过 SSH 连接到
us-test-01
并运行以下命令:
iperf -c us-test-02.{{{project_0.default_zone_2 | ZONE}}} -u -b 2G #iperf client side - send 2 Gbits/s
这样应该能提高欧盟和美国之间的速度。您可以通过并行运行大量 TCP iperf
来进一步提高速度。我们来测试一下。
- 在
us-test-01
的 SSH 窗口中,运行以下命令:
iperf -s
- 在
us-test-02
的 SSH 窗口中,运行以下命令:
iperf -c us-test-01.{{{project_0.default_zone | ZONE}}} -P 20
该组合带宽应该非常接近可实现的最大带宽。
点击检查我的进度,验证已完成以下目标:
测试性能。
- 测试更多的组合。如果您笔记本电脑的操作系统为 Linux,您也可以在笔记本电脑上进行测试。(您还可以尝试 iperf3,它适用于许多操作系统,但这不在本实验的讨论范围内。)
如您所见,要达到最大带宽,仅运行单个 TCP 流(例如文件复制)是不够的,您需要并行运行多个 TCP 会话。原因在于 TCP 参数(例如窗口大小)和功能(例如缓慢启动)。
有关此主题以及所有其他 TCP/IP 主题的详细信息,请参阅 TCP/IP 图解。
bbcp 等工具允许您通过并行传输和可配置的窗口大小,来尽快复制文件。
结束实验
完成实验后,请点击结束实验。您使用的账号和资源会从实验平台中移除。
系统会提示您为实验体验评分。请选择相应的评分星级,输入评论,然后点击提交。
星级的含义如下:
- 1 颗星 = 非常不满意
- 2 颗星 = 不满意
- 3 颗星 = 一般
- 4 颗星 = 满意
- 5 颗星 = 非常满意
如果您不想提供反馈,可以关闭该对话框。
如果要留言反馈、提出建议或做出更正,请使用支持标签页。
恭喜
您学习了如何使用 gcloud
在现有网络上构建虚拟机,并使用各种工具来测试网络的连接性和延迟时间。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 8 月 23 日
上次测试实验的时间:2024 年 8 月 23 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。