Amazon Virtual Private Cloud (Amazon VPC)允许你在已定义的虚拟网络内启动AWS资源。这个虚拟网络与你在数据中心中运行的传统网络极其相似,并会为你提供使用AWS的可扩展基础设施的优势。

简单来说,VPC就是一个AWS用来隔离你的网络与其他客户网络的虚拟网络服务。在一个VPC里面,用户的数据会逻辑上地与其他AWS租户分离,用以保障数据安全。

可以简单地理解为一个VPC就是一个虚拟的数据中心,在这个虚拟数据中心内我们可以创建不同的子网(公有网络和私有网络),搭建我们的网页服务器,应用服务器,数据库服务器等等服务。

VPC有如下特点:

  • VPC内可以创建多个子网
  • 可以在选择的子网上启动EC2实例
  • 在每一个子网上分配自己规划的IP地址
  • 每一个子网配置自己的路由表
  • 创建一个Internet Gateway并且绑定到VPC上,让EC2实例可以访问互联网
  • VPC对你的AWS资源有更安全的保护
  • 部署针对实例的安全组(Security Group)
  • 部署针对子网的网络控制列表(Network Access Control List)
  • 一个VPC可以跨越多个可用区(AZ)
  • 一个子网只能在一个可用区(AZ)内
  • 安全组(Security Group)是有状态的,而网络控制列表(Network Access Control List)是无状态的
    • 有状态:如果入向流量被允许,则出向的响应流量会被自动允许
    • 无状态:入向规则和出向规则需要分别单独配置,互不影响
    • 具体的区别挨踢小茶会在后续的章节详细讲解
  • VPC的子网掩码范围是从/28到/16,不能设置在这个范围外的子网掩码
  • VPC可以通过Virtual Private Gateway (VGW) 来与企业本地的数据中心相连
  • VPC可以通过AWS PrivateLink访问其他AWS账户托管的服务(VPC终端节点服务)

默认VPC

  • 在每一个区域(Region),AWS都有一个默认的VPC
  • 在这个VPC里面所有子网都绑定了一个路由表,其中有默认路由(目的地址 0.0.0.0/0)到互联网
  • 所有在默认VPC内启动的EC2实例都可以直接访问互联网
  • 在默认VPC内启动的EC2实例都会被分配公网地址和私有地址

如下图所示,我们在某一个区域内有一个VPC,这个VPC的网络是172.31.0.0/16

在这个VPC内有2个子网,分别是172.31.0.0/20 和 172.31.16.0/20。这两个子网内都有一个EC2实例,每一个实例拥有一个该子网的私有地址(172.31.x.x)以及一个AWS分配的公网IP地址(203.0.113.x)。

这两个实例关联了一个主路由表,该路由表拥有一个访问172.31.0.0/16 VPC内流量的路由条目;还有一个目的为 0.0.0.0/0 的默认路由条目,指向Internet网关。

因此这两个实例都可以通过Internet网关访问外网。

RFC1918私有地址范围

IETF RFC1918定义了私有网络的地址范围,这些私有网络一般仅用于企业和集团内部,并且这些地址在因特网上是不能路由的。

在我们进行VPC的网络设置以及子网的设置时,都必须使用这些私有网络地址。

私有地址里面的IPv4地址如下:

  • 10.0.0.0/8,地址范围是10.0.0.0 – 10.255.255.255
  • 172.16.0.0/12,地址范围是172.16.0.0 – 172.31.255.255
  • 192.168.0.0/16,地址范围是192.168.0.0 – 192.168.255.255

但是因为VPC的子网掩码范围是还会限制只能是从/28到/16,因此你不能设置一个网络是172.16.0.0/12的VPC或者是192.168.0.0/29的VPC。

关于子网掩码的基础和计算,本文就不具体介绍了,可以找一下CCNA基础的资料

EC2-Classic

在2013年12月4日之前,AWS提供了一种叫做EC2-Classic的网络,可以算是EC2-VPC的前身。

在EC2-Classic内,你所运行的EC2实例会和其他客户的EC2实例共享同一个扁平的网络,而不是隔离的虚拟网络。

在2013年12月4日之后创建的AWS账户,账户中只会有VPC。

这一部分大概了解即可,如果需要更详细的信息,可以查看EC2-Classic与 EC2-VPC 的区别

VPC Peering

VPC Peering可是两个VPC之间的网络连接,通过此连接,你可以使用IPv4地址在两个VPC之间传输流量。这两个VPC内的实例会和如果在同一个网络一样彼此通信。

  • 可以通过AWS内网将一个VPC与另一个VPC相连
  • 同一个AWS账号内的2个VPC可以进行VPC Peering
  • 不同AWS账号内的VPC也可以进行VPC Peering
  • 不支持VPC Transitive Peering
    • 如果VPC A和VPC B做了Peering
    • 而且VPC B和VPC C做了Peering
    • 那么VPC A是不能和VPC C进行通信的
    • 要通信,只能将VPC A和VPC C进行Peering

如下图,VPC A和VPC B进行了Peering之后,子网10.0.0.0/16和172.31.0.0/16会被打通,并且可以无阻地互相访问。

弹性 IP (Elastic IP)

弹性IP是专门用来分配AWS服务的IPv4地址,通过申请弹性IP地址,你可以将一个固定的公网IP分配给一个EC2实例。在这个实例无论重启,关闭,甚至终止之后,你都可以回收这个弹性IP地址并且在需要的时候分配给一个新的EC2实例。

默认情况下,AWS分配的公网IP地址都是浮动的,这意味着如果你关闭再启动你的EC2实例,这个地址也会被释放并且重新分配。但是弹性IP地址是和你的AWS账号绑定的,除非你手动释放掉这个地址,否则这个地址可以一直被你拥有。

如果弹性IP地址绑定的EC2 是stop状态,也是要收费的,只有绑定在running状态的EC2才是免费的。 其实弹性IP只要不被有效使用就需要收费,这是为了避免资源浪费~。

知识点

每个子网 CIDR 块中的前四个 IP 地址和最后一个 IP 地址无法供您使用,而且无法分配到一个实例。

比如对于一个10.0.0.0/16的VPC,如果有10.0.0.0/24的子网和10.0.1.0/24的子网,那么

  • 10.0.0.0是网络地址
  • 10.0.0.1是AWS预留的地址,用于VPC路由器
  • 10.0.0.2是AWS预留的地址,该地址被用于VPC内的DNS服务器(但对于10.0.1.0/24这个子网,10.0.1.2这个地址不会被使用,但是仍然会被保留)
  • 10.0.0.3是AWS预留的地址,供将来使用
  • 10.0.0.255是广播地址,但VPC内不支持广播,只支持单播

实战:创建VPC

创建EC2关联子网

手动指定子网私有IP

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据