通俗解读“AWS VPC 子网”

阅读数:663 2018 年 6 月 12 日

话题:AWSDevOps架构

关键要点:

  • AWS VPC 现在是运行云 VM 的默认方案。
  • 你的 VPC 依然可以像传统的本地部署网络一样,只是会有更多的自动化和缩放功能。
  • VPC 可以包含所有公共子网或公 / 私子网的组合。

Amazon VPC 是 AWS 云主机的核心,它是一个比较难理解的复杂概念,尤其是对于那些缺乏基础设施运维经验的开发者来说。开发者是云项目涉及最多的队伍成员,但在大多数的项目里,他们还是缺乏基础设施运维知识。

在本文中,我们将讨论 AWS 中可用的、不同类型的 VPC 设置。然后,我们将一起理解 VPC 中的技术用语,并将这些技术用语翻译成非专业用语,以便于大家更容易理解 VPC。

AWS 通过引进“EC2 经典版”开始了“虚拟网络”之旅,这是 AWS 在“虚拟网络”中创建 EC2 实例的第一代方法。然而最终,AWS 不再支持 EC2 经典版。AWS 停止支持 EC2 经典版转而引进“EC2 VPC”(也就是 AWS VPC 网络)。

AWS 抛弃“EC2 经典版”的原因之一是:你的 AWS 网络是与其他 AWS 租户共享的。这意味着“虚拟网络”并不是你的私人网络(针对你的账户来说)。对于那些在本地托管服务器时习惯于独立运维自己网络的团队来说,这种限制有点违背实际需求。这一需求促使 AWS 提出了他们的第二代“虚拟网络”:EC2-VPC。

当你在 AWS 账户中启动一个实例时,默认情况下它将在一个默认的 VPC 上启动,并获得公共 IP 和私有 IP。这是怎么实现的呢?

什么是 EC2-VPC?

Amazon VPC 使你能够在你自己的逻辑隔离区域里(AWS 云中)定义一个虚拟网络,即所谓的虚拟私有云(VPC)。你可以在你的 VPC 中启动 AWS 资源(例如实例)。你的 VPC 和一个传统的网络非常相似,你可以在自己的数据中心中操作(有了使用 AWS 可伸缩基础设施的好处之后)。

如果你的 AWS 账户是在 2013 年 12 月 04 日之后创建的,它仅支持 EC2-VPC。在这种情况下,AWS 会为你在每个 AWS 区域中创建一个默认的 VPC。因此,除非你自己创建了一个非默认的 VPC,并在启动一个实例时指定它,否则 AWS 将在默认的 VPC 中启动你的实例。

在默认的 VPC 创建过程中会发生什么?

AWS 创建默认的 VPC时,它会:

  • 创建 IPv4 CIDR 块大小为 /16 的 VPC(172.31.0.0/16),最多可提供 65,536 个私有 IPv4 地址。
  • 在每个可用区中创建一个大小为 /20 的默认子网,还将为每个子网提供多达 4,096 个地址,其中一些被预留下来供我们使用。
  • 创建一个Internet 网关,并将其连接到你的默认 VPC。
  • 为你的默认 VPC 创建一个主路由表,设置将所有的 IPv4 流量发送到 Internet 网关的规则。设置将所有前往 Internet 的 IPv4 流量发送到 Internet 网关的规则。
  • 创建一个默认安全组并将其与你的默认 VPC 相关联。
  • 创建一个默认的网络访问控制列表(ACL),并将其与你的默认 VPC 相关联。
  • 将你的 AWS 账户的默认 DHCP 选项与你的默认 VPC 相关联。

VPC 可以有公共子网或私有子网。你可以从这儿了解更多关于这些场景的信息。

子网是 VPC 的关键组件。VPC 可以包含所有公共子网或公 / 私子网的组合。私有子网是一个没有路由到 Internet 网关的子网。通过虚拟专用网关路由流量,子网可以配置成仅限 VPN 的子网。你可以从这儿了解更多关于启用 VPN 的信息。

EC2 实例启动时,VPC 如何连上子网?

如上所述,分配到你账户的 VPC 是一个逻辑隔离的网络。每个计算资源(换句话说,就是 AWS EC2 实例)将会在“一个”VPC 中启动。

在 VPC 中启动实例:

当你启动一个实例并指定一个 VPC 时,首先要做的是,确定启动该实例需要的子网。如果没有选择子网,AWS 将在选定的 VPC 中选择默认子网。一旦确定出你的子网,下一步是确定一个可用区。用户可以自己选择这个区域,或让 AWS 为其选择一个区域。

一旦在 VPC/ 子网 / 可用区中创建了一个实例,该子网 IPv4 地址范围内的一个主私有 IP 地址将被分配给该实例的默认网络接口(eth0)。每个实例还被赋予一个私有的(内部)DNS 主机名(解析后是该实例的私有 IP 地址)。如果你没有指定主私有 IP 地址,我们将为你选择一个子网范围内的可用 IP 地址。

当你将一个实例启动到一个已经启用了公共 IP 地址属性的子网时,一个公共 IP 地址将被分配给为该实例创建的主网络接口(eth0)。一个公共 IP 地址通过网络地址转换(NAT)映射到主私有 IP 地址。当你停止 EC2 实例并重新启动时,之前分配的公共地址将会发生变化。

当我们讨论 IP 地址时,需要理解的一个细节是,公共 IP 地址不同于 AWS 弹性 IP 地址(EIP)。分配给一个实例的公共 IP 地址来自于 Amazon 的公共 IPv4 地址池。当你停止和启动(或终止)一个实例时(但不是在重启期间),分配给该实例的公共 IP 地址将会发生变化。EIP 先被分配给一个用户账户,再被分配给一个实例。除非你将它从实例中分离或将其从你的帐户中释放出来,否则 EIP 将保持不变。在使用 EIP 时,你需要知道,如果这个 IP 没有分配给正在运行的实例,你也需要付费。你可以从这儿了解更多的细节。



除非你有配置或搭建数据中心网络的前期经验,否则理解所有这些潜在的工作细节会让你觉得难于上青天。如果你不信,那请继续读下去。

既然我们已经了解了 VPC 的内部工作原理,以及如何启动一个实例,现在就让我们试着理解技术定义,然后尝试用办公大楼的类比将这些定义转换为非专业术语。

以下是我们目前讨论的 AWS 资源的技术定义:

VPC 定义

Amazon VPC 允许你在 AWS 云中获得一个逻辑隔离的部分,你可以在你定义的虚拟网络中启动 AWS 资源。你对你的虚拟网络环境有完全控制权,包括你自己的 IP 地址范围的选择、子网的创建以及路由表和网络网关的配置。你可以在 VPC 中同时使用 IPv4 和 IPv6,以确保安全方便地访问资源和应用程序。

区域和可用区

Amazon EC2 托管在全球多个位置。这些位置由区域和可用区构成。每个区域 都是一个独立的地理区域。每个区域都有多个相互隔离的位置,称为可用区。

子网

子网是“网络的一部分”,换句话说,它是整个可用区的一部分。每个子网必须完全托管在一个可用区中,并且不能跨区。

IP 地址

一组由时间间隔来分离的独特的数字:通过使用互联网协议在网络上进行通信来识别每台计算机。AWS 中的每个实例都有 2 个 IP 地址,一个私有 IP 地址和一个公共 IP 地址。

安全组

一个安全组相当于一个虚拟防火墙,它可以控制一个或多个实例的流量。当你启动一个实例时,你将一个或多个安全组与实例关联起来。你可以为每个安全组设置规则,以控制进出它的相关实例的流量。

非专业术语

为了使这些概念更容易理解,我们将使用一个办公大楼进行类比:

  • 把你的办公室想象成一个多层建筑
  • 每个楼层都有多个套房
  • 每个部门(比如人力资源部门,工薪部门)可以在同一层楼或多层楼
  • 每个套房都有几个房间
  • 每个房间都有几张员工们用于办公的办公桌

区域:把办公楼想象成一个区域。就像 AWS 区域如何包含其他组件一样,办公大楼是一个包含许多东西的建筑主体。

可用区:把每一层想象成一个可用区。就像一个区域可以有多个可用区一样,我们的建筑也不止一层。

VPC:办公室里的每个部门都像一个 VPC。如同 VPC 中跨区域的可用区,办公室的每个部门都可以跨越不同的楼层。

子网:每个套间代表一个子网。就像每个子网在一个可用区的情况一样,每个套间都只是该层的一部分,并且它不会跨楼层。

IP 地址:套间中的一个桌子代表一个 IP 地址。

当公司给员工分配办公桌时,他们首先会判断:

  • 这个员工属于哪个部门
  • 然后确定部门跨哪些楼层
  • 然后确定哪些套间有可用的桌子
  • 向员工分配一个可用的办公桌

同样,当人们启动 AWS EC2 实例时:

  • 我们需要选择这个实例应该部署到哪个 VPC 上
  • 然后我们选择用哪个可用区(如果未选择,就是默认可用区)
  • 接着我们选择子网(如果未选择,就是默认子网)
  • 最后这个子网的 IP 被分配给我们的 EC2 实例(作为私有 IP)

其他相关的术语

在学习 AWS VPC 和启动 EC2 实例时,你需要理解的术语其实不多。

安全组:

一个安全相当于一个虚拟防火墙,它控制一个或多个实例的流量。当你启动一个实例时,你将一个或多个安全组与实例关联起来。你可以为每个安全组设置规则,以控制进出它的相关实例的流量。

针对“安全组”,我们可以联想到办公室的门禁卡。根据你预期的安全系数,你可以在 AWS 中中应用不同级别的安全组。同样类比到办公大楼。你可以将门禁卡设为入楼级别、入层级别或应用到其他一些安全措施上。

开放安全组的公共 VPC:

在这种情况下,你将实例放入 VPC 之后,VPC/ 实例关联的安全组将允许开放所有端口,这是一种非常糟糕的做法。类比到我们的办公楼,就是一栋没有任何门禁的建筑。每个人都可以到任何楼层或套间。

公共 VPC 与受限安全组:

在这种情况下,你在 VPC 中启动实例时,VPC/ 实例关联的安全组将限制开放端口,这是一个很好的举措。类比到我们的办公大楼,类似一个有访问卡的建筑。只有拥有门禁卡的人才能进入大楼,并在里面四处走动。

私有 VPC:

私有 VPC 是一个只有私有子网的 VPC。如果没有特殊工具或 VPC 窥视,那么在一个私有的 VPC 中,这些资源都是不可访问的。

虽然这不是一个完美的类比,但我们可以把你办公楼里的“洗手间”想象成私有 VPC(换句话说,就是带私有子网的 VPC)。不能进入大楼的人就不能进入洗手间。

总而言之,VPC+ 可用区 + 子网 + 私有 / 公共 IP 地址 + 安全组的组合就是 AWS 资源,这些 AWS 资源组成了基础设施,以提供用户在安全可伸缩环境中运行 EC2 实例所需的支持。了解这些资源的工作原理将帮助用户正确配置和利用这些资源。

关于作者:

Prasad Vara 是 INVOKE Cloud(专注于云计算成本优化解决方案)的联合创始人。Prasad 以软件开发人员的身份开始了他的职业生涯,并在经营数百万美元项目的过程中收获了十多年的经营经验。他既是 DevOps 也是云的狂热者。工作之余,他喜欢跑步或骑自行车。

查看英文原文:AWS VPC Subnets – In Layperson’s Terms

感谢冬雨对本文的审校。