VPC

写在前面~~

在这之前推一个在写文章的时候找到的好资料,点击图中的图标还有详细的描述哦。

https://lucid.app/lucidchart/703f6119-4838-4bbb-bc7e-be2fb75e89e5/view?page=eNbqbEM6f5NI#

截屏2021-02-28 下午7.50.03

1.VPC(Virtual Private Cloud)是什么

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

如下图所示,互联网的流量想进到VPC里来时,首先就需要经过Internet Gateway,然后再通过与Internet Gateway绑定的路由表来转发到对应的子网(subnet),每个子网有不同的NACL(Network Access Control List),通过这些NACL来判断流量是否被允许进入,最后转发到对应的机器上。上述的一些概念我们会在下面一一介绍。

需要注意的是:

  • VPC内可以创建多个子网,一个VPC可以跨越多个可用区(AZ)

  • 一个路由表可以对应多个子网,

  • 每一个子网上可以分配自己规划的IP地址,我们可以在选择的子网上启动EC2实例,一个子网只能在一个可用区(AZ)内

  • 创建一个Internet Gateway并且绑定到VPC上,让EC2实例可以访问互联网

  • 安全组(Security Group)用来针对实例

  • 网络控制列表(Network Access Control List)用来针对子网

  • 安全组(Security Group)是有状态的,而网络控制列表(Network Access Control List)是无状态的

    • 有状态:如果入向流量被允许,则出向的响应流量会被自动允许

    • 无状态:入向规则和出向规则需要分别单独配置,互不影响

截屏2021-02-28 下午1.27.18

2.互联网网关(Internet gateway)

互联网网关是一种横向扩展、支持冗余且高度可用的 VPC 组件,可实现 VPC 与互联网之间的通信。

3.路由表(route table)

我们的 VPC 中的每个子网必须与一个路由表关联,而一个路由表可以关联多个子网,路由表用来控制子网的路由。

  • 一个VPC下只能有一个主路由表,当一个子网没有显式地与路由表关联时,它默认会隐式地与主路由表关联。

  • 路由表中的路由可以指向很多目标,比如下图,我们可以指定0.0.0.0/0,目标为Internet Gateway,这表示所有指向互联网的流量都转发到Internet Gateway上,当然我们也可以指定其他的AWS 服务,如下图选项所示。

  • local表示一个用于在 VPC 内部通信的本地路由,比如同一个VPC下且配置了这个路由表的EC2要跟另一台EC2通信,就可以通过这个来转发而不用走互联网。

截屏2021-02-28 下午4.08.48
截屏2021-02-28 下午4.21.59

4.子网(subnet)

我们需要在指定的VPC下指定子网,如下图,每个VPC有关联的CIDR,意味着我们在这个VPC下,可以分配给该VPC下服务这个范围内的IP地址,这一部分算是计算机网络基础就不在此赘述,简单的介绍可以看下面两个链接。

需要注意的是VPC下的子网CIDR范围不能超过VPC的CIDR大小,且子网的IPv4 块的大小必须介于 /16 网络掩码和 /28 网络掩码之间。

CIDR介绍

CIDR计算

截屏2021-02-28 下午4.54.08

4.1如何区分私有子网和公共子网?

公共子网指的是该子网绑定的路由表中,0.0.0.0/0指向的目标可以直接访问互联网,比如指向一个Internet gateway,那么这个子网就是一个公共子网。

相对的,0.0.0.0/0指向的目标不能直接访问互联网,比如这个子网的路由表没有配置0.0.0.0/0,或者只能间接地访问互联网,比如0.0.0.0/0指向的是NAT Gateway/Instance, 那么这个子网就是私有子网。

截屏2021-02-28 下午5.50.47

5.弹性IP(Elastic IP)

这个概念在EC2一章已经介绍过啦,今天再来复习一遍。

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

6.终端节点(Endpoints)

终端节点(Endpoints)是虚拟设备,它是以能够自动水平扩展、高度冗余、高度可用的VPC组件设计而成,不需要为它的带宽限制和故障而有任何担忧。

接口终端节点由 PrivateLink 提供支持,它使用弹性网络接口 (ENI) 作为发往服务的流量的入口点。 网关终端节点充当路由表中路由的目标,用于处理以服务为目标的流量。 网关仅支持Amazon S3 和Dynamo DB

VPC终端节点能建立VPC和一些AWS服务之间的高速、私密的“专线”。这个专线叫做PrivateLink,使用了这个技术,你无需再使用Internet网关、NAT网关、VPN或AWS Direct Connect连接就可以访问到一些AWS资源了!

举个例子:VPC内的服务(比如EC2)需要访问S3的资源,只需要通过VPC终端节点和更改路由表,就可以通过AWS内网访问到这些服务。在这个情况下,VPC内的服务(EC2)甚至不需要连接任何外网。如下图所示

vpc endpoints

7.NAT网关/实例

  • NAT的全程是“Network Address Translation”,中文解释是“网络地址转换”,它可以让整个机构只使用一个公有的IP地址出现在Internet上。

  • NAT是一种把内部私有地址(192.168.1.x,10.x.x.x等)转换为Internet公有地址的协议,它一定程度上解决了公网地址不足的问题。

7.1 NAT Instance

在实际的场景下,我们经常需要将数据库、EC2放到私网,但是实例中的服务又必须要访问互联网,这个时候NAT Instance就可以帮我们解决这个问题,以私有子网内的EC2请求互联网为例,我们的请求会被先被路由表路由到公共子网内的NAT Instance中,然后通过NAT Instance服务来访问互联网。

  • 每项 EC2 实例都会默认执行源/目标检查。这意味着实例必须为其发送或接收的数据流的源头或目标。但是,NAT 实例必须能够在源或目标并非其本身时发送和接收数据流。因此,创建NAT实例之后,一定要关闭源/目标检查(Source/Destination Check)

  • NAT实例需要创建在公有子网内

  • 私有子网需要创建一条默认路由(0.0.0.0/0),指到NAT实例

  • NAT实例的瓶颈在于实例的大小,需要自己创建弹性伸缩组(Auto Scaling Group),自定义脚本来达到NAT实例的高可用(比如部署在多个可用区)

  • 我们更推荐使用NAT Gateway的形式来实现功能,如果我们真的想要使用NAT Instance,可以在社区AMI来搜索它。

    截屏2021-02-28 下午5.38.36
截屏2021-02-28 下午5.33.49

7.2 NAT Gateway

当我们使用,就不用再创建NAT Instance了,也就没有实例大小的烦恼,NAT Gateway会自动扩容。

  • NAT Gateway需要关联到公共子网,它自动分配一个公网IP地址(EIP)

  • 私有子网需要创建一条默认路由(0.0.0.0/0)到NAT网关

  • 不需要更改源/目标检查(Source/Destination Check)

7.3 堡垒机

堡垒机(Bastion Host)又叫做跳板机(Jump Box),主要用于运维人员远程登陆服务器的集中管理。运维人员首先登陆到这台堡垒机(公网),然后再通过堡垒机管理位于内网的所有服务器。

需要与NAT Instance区分,私有子网中的流量会发送到NAT Instance里,而堡垒机只是用来登录、管理。

8. 对等连接(Peering)和Transit Gateway

8.1 Peering Connect

VPC对等连接(VPC Peering)是两个VPC之间的连接,通过VPC Peering,我们就可以使用私有地址让两个VPC之间相互通信,就像它们在同一个VPC内一样。

我们可以给自己、其他AWS账号的VPC、不同区域的VPC来建立Peering Connect.

如下图所示,VPC A和VPC B之间建立了对等连接,那么VPC A中网段10.0.0.0/16内的实例就可以和VPC B中网段172.31.0.0/16内的实例进行互相通信,仿佛它们是处于同一个内网一样。

如果两个VPC出现了地址覆盖/重复,那么这两个VPC不能做Peering

  • 例如10.0.0.0/16的VPC与10.0.0.0/24的VPC是不能做对等连接的

  • VPC Peering没有传递性

    • 即如果VPC A与VPC B进行了对等连接

    • VPC B与VPC C进行了对等连接

    • VPC A是不能与VPC C进行直接通信的,必须再建立VPC A和VPC C的对等连接才可以

img

8.2 Transit Gateway

我们先来看一个情况,当我们需要创建多个VPC之间的连接时,需要非常多的Peering,Transit Gateway就是为了解决这一个问题。

需要注意的是,Transit Gateway 需要保证所有的VPC在一个region下面。

截屏2021-03-07 下午7.21.13.png

通过Transit Gateway,我们就可以简单地来管理多个VPC啦。

截屏2021-02-28 下午6.47.06

9.Network ACLs与Security Group

  • 在你的默认VPC内会有一个默认的网络ACL(NACL),它会允许所有入向和出向的流量

  • 对于所有VPC内的子网,每一个子网都需要关联一个网络ACL。如果没有关联任何网络ACL,那么子网会关联默认的网络ACL

  • 一个网络ACL可以关联多个子网,但一个子网只能关联一个网络ACL

  • 网络ACL包含了一系列(允许或拒绝)的规则,网络ACL会按顺序执行,一旦匹配就结束,不会再继续往下匹配

  • 网络ACL有入向和出向的规则,每一条规则都可以配置允许或者拒绝, 还记得我们的安全组吗,它只支持显式的允许。

  • 网络ACL是无状态的(安全组是有状态的)

    • 被允许的入向流量的响应流量必须被精准的出向规则所允许(反之亦然)

    • 一般至少需要允许临时端口(TCP 1024-65535)

截屏2021-02-28 下午7.05.06

临时端口

客户端来说,每次发起 TCP 连接请求时,都需要分配一个空闲的本地端口(临时端口),去连接远端的服务器。由于这个本地端口是独占的,所以客户端最多只能发起 65535 个连接。

服务器端来说,其通常监听在固定端口上(比如 80 端口),等待客户端的连接。根据五元组(源IP地址、目的IP地址、协议号、源端口、目的端口)结构,我们知道,客户端的 IP 和端口都是可变的。如果不考虑 IP 地址分类以及资源限制,服务器端的理论最大连接数,可以达到 2 的 48 次方(IP 为 32 位,端口号为 16 位),远大于 65535。

所以,综合来看,客户端最大支持 65535 个连接,而服务器端可支持的连接数是海量的。

你可能感兴趣的:(VPC)