通俗解读“AWS VPC子网”

1,795 阅读11分钟
原文链接: www.infoq.com

关键要点:

  • 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

感谢冬雨对本文的审校。