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内不支持广播,只支持单播