Skip to content

亚马逊 AWS(Amazon Web Service) 占据全球四成公有云市场份额(2021年统计),排名第一

包含的产品多余牛毛

很多国外用户都在使用AWS的产品,著名的有S3,EC2,所有有必要了解一下。

这里介绍最基础的产品,VPC(Virtual Private Cloud),虚拟私有云。

先看下一些基础概念

地域 Region

AWS 在世界各地有很多数据中心,一个 Region 就是多个数据中心的集群

目前在中国大陆地区有北京和宁夏两个 Region

可用区 AZ(Availability Zone)

每个 Region 中包含数个独立的,物理分隔开的 AZ(Availability Zone),每个 AZ 有独立的供电,制冷,安保。

同一 Region 内 AZ 之间由高带宽,极低延时的光纤网络相连,数据以加密形式传输。

ap-northeast-1 是 region 名称

ap-northeast-1a,ap-northeast-1c,ap-northeast-1d 是 AZ

你可以理解为北京Region cn-north-1,朝阳区有个AZ:cn-north-1c,海淀区有个AZ:cn-north-1d 同一Region下的AZ之间由高速网络连接,重要的数据可以放到多AZ里,假如朝阳区机房停电或失火,通过配置流量和数据可以使用海淀区的。 这就是简单的容灾备份。

虚拟私有网络 VPC

VPC(Amazon Virtual Private Cloud)是用户在 Region 中自定义的虚拟网络,是一个整体概念。

用户可以在一个 Region 中创建多个 VPC。

我们可以在 VPC 中选择 IP 网段,创建 Subnet,指定 Route Table,控制 ACL(Access Control list),设置网关等。

多业务系统隔离

如果在一个地域的多个业务系统需要通过VPC进行严格隔离,例如,生产环境和测试环境,那么也需要使用多个VPC。

同样可以通过使用高速通道、VPN网关、云企业网等产品实现同地域VPC间互通。

多地域部署系统

VPC是地域级别的资源,不支持跨地域部署。当有多地域部署系统的需求时,必须使用多个VPC。可以通过使用高速通道、VPN网关、云企业网等产品实现跨地域VPC间互通。

当 VPC 创建完成后主路由表 和 Main network ACL 会自动创建。

用户可以在公有云上创建一个或者多个VPC,每个部门一个VPC。对于需要连通的部门创建VPC连接。

IP段用CIDR表示

CIDR

无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。

遵从CIDR规则的地址有一个后缀说明前缀的位数,例如:192.168.0.0/16。这使得对日益缺乏的IPv4地址的使用更加有效。

也就是说,创建子网时要考虑你需要的资源数

IP/CIDR掩码主机数
a.b.c.d/32255.255.255.2551
a.b.c.0/28255.255.255.24016
a.b.c.0/24255.255.255.000256
a.b.0.0/16255.255.000.00065,536

Subnet

子网是 VPC 中的 IP 地址范围。在创建 VPC 之后,可以在每个可用区中添加一个或多个子网。

我们一般创建两种子网 Private Subnet 和 Public Subnet。

简单来说,不能直接访问 internet 的 Subnet 就是 Private Subnet,能直接访问 internet 的就是 Public Subnet。

当然 Private Subnet 也可以通过 NAT 的方式访问 internet

当我们在一个 VPC 中创建 Subnet 时需要给 Subnet 选择一个 AZ(Availability Zone),一个 Subnet 只能选择建在一个 AZ 中。

实战

实现图上的功能,创建两个子网

一个是 Public Subnet,可以访问因特网,另一个是 Private Subnet 一个是 Private Subnet,不能访问因特网

创建VPC

IPv4 CIDR: 192.168.0.0/16

name: finley-vpc

创建互联网网关

name: finley-internet-gateway

并attach到finley-vpc上

创建三个子网

分别为 public, private, public&private(私网通过NAT访问公网)

| subnet id | IPV4 CIDR | AZ | 用途 | :-----| :---- | :---- | | finley-public | 192.168.0.0/24 | ap-northeast-1a | 部署web服务器 | finley-private| 192.168.2.0/24 | ap-northeast-1d | 部署数据库 | finley-private&public | 192.168.1.0/24| ap-northeast-1c| 部署应用程序

创建两个路由表

路由表包含一组称为路由的规则,用于确定来自子网或网关的网络流量定向到何处。

路由表必须属于某VPC

一个公有子网,一个私有子网但可通过NAT访问公网

name: finley-public

编辑路由表

# 第一条表示到192.168.*.*的请求会发送至VPC中
192.168.0.0/16	local

# 第二条表示到其它IP的请求会发送至IGW
0.0.0.0/0	igw-0d1092780f692f46f
# 第一条表示到192.168.*.*的请求会发送至VPC中
192.168.0.0/16	local

# 第二条表示到其它IP的请求会发送至IGW
0.0.0.0/0	igw-0d1092780f692f46f

编辑子网关联

创建第二个路由

name: finley-private

编辑子网关联,选择finley-private&public

创建EC2

创建两个EC2,一个名为finley-public-ec2,一个finley-private-ec2

VPC选择finley-vpc

申请弹性IP,得到公网IP:52.197.152.165并关联给finley-public-ec2

实例名公有 IPv4 地址私有 IPv4 地址
finley-public-ec252.197.152.165192.168.0.107
finley-private-ec2192.168.2.197

EIP(Elastic IP)是AWS提供的静态公共IP,可以从internet上访问到。实例即便被删除IP也会保留

SSH ssh -i "aws-ty-2022.pem" ubuntu@52.197.152.165 登录实例

aws-ty-2022.pem 私钥是之前申请过的

检查网络配置,安装nginx或httpd,浏览器打开52.197.152.165,访问成功

bash
ubuntu@ip-192-168-0-93:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 192.168.0.93  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::4c3:76ff:feef:971  prefixlen 64  scopeid 0x20<link>
        ether 06:c3:76:ef:09:71  txqueuelen 1000  (Ethernet)
        RX packets 2795  bytes 2887062 (2.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1519  bytes 178671 (178.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions
ubuntu@ip-192-168-0-93:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 192.168.0.93  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::4c3:76ff:feef:971  prefixlen 64  scopeid 0x20<link>
        ether 06:c3:76:ef:09:71  txqueuelen 1000  (Ethernet)
        RX packets 2795  bytes 2887062 (2.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1519  bytes 178671 (178.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions

finley-private-ec2 只有一个私网地址,由于我们选择private子网

会得到一个私网地址,如192.168.2.197,即使有公网IP,也无法通过互联网访问

可以通过finley-public-ec2登录这个私有子网的实例

# 在本机执行
## 上传私钥到public ec2
scp ~/.ssh/aws.pem 52.197.152.165:~
## 登录public ec2
ssh -i ~/.ssh/aws.pem 52.197.152.165
# 在 public ec2 上执行
chmod 400 aws.pem
## 登录private-ec2
ssh -i ~/.ssh/aws.pem 192.168.2.197
# 进到私网实例,确实无法访问互联网
wget www.baidu.com
# 在本机执行
## 上传私钥到public ec2
scp ~/.ssh/aws.pem 52.197.152.165:~
## 登录public ec2
ssh -i ~/.ssh/aws.pem 52.197.152.165
# 在 public ec2 上执行
chmod 400 aws.pem
## 登录private-ec2
ssh -i ~/.ssh/aws.pem 192.168.2.197
# 进到私网实例,确实无法访问互联网
wget www.baidu.com

通过NAT网关使私有子网访问互联网

注意NAT是按小时收费的,用完及时释放

NAT 网关是一种网络地址转换 (NAT) 服务。可以使用 NAT 网关,以便私有子网中的实例可以连接到 VPC 外部的服务,但外部服务无法启动与这些实例的连接。

路由器将互联网流量从私有子网中的实例发送到 NAT 网关。NAT 网关通过使用自身的弹性 IP 地址作为源 IP 地址,将流量发送到互联网网关。

创建NAT网关

NAT网关要创建在公有子网当中, 选择一个公有子网,创建成功后等待状态变为可用

修改路由表,等状态变为available

目的地目标
192.168.0.0/16本地
0.0.0.0/02nat-gateway-id

此时finley-private-ec2可以访问互联网了,是通过NAT关联的IP

通过终端节点让私有网络访问aws服务(S3)

VPC 终端节点使您能够在 Virtual Private Cloud (VPC) 与支持的服务和之间建立连接,而无需使用互联网网关、NAT 设备、VPN 连接或 AWS Direct Connect 连接。

因此,VPC 不会对公有 Internet 公开。

实现私有地址访问公有服务,这里我们让私有子网中的实例访问S3服务,首先创建终端节点

实际上是添加了一条路由表信息

访问S3并下载文件成功

VPC peering 对等连接

VPC 对等连接是两个 VPC 之间的网络连接

可以在自己的 VPC 之间创建 VPC 对等连接,或者在自己的 VPC 与其他AWS账户中的 VPC 之间创建连接

VPC 可位于不同区域内(也称为区域间 VPC 对等连接)。

例如,如果您有多个AWS账户,则可以通过在这些账户中的 VPC 间建立对等连接来创建文件共享网络。

您还可以使用 VPC 对等连接来允许其他 VPC 访问您某个 VPC 中的资源。

总结

  • 首先我们选择Region,随后所有创建的内容都是存在此Region中
  • 创建VPC,一个虚拟网络,在里面设置IP段,VPC是一个逻辑结构,并不和AZ(Availability Zone)直接相关
  • 在VPC中创建Subnet,需指定IP段,并且指定所在的AZ,一个Subnet只能指定一个AZ,一个AZ可以容纳多个Subnet
  • VPC中Subnet默认是可以相互访问的
  • 新建的Subnet默认就是Private Subnet
  • IGW(Internet gate way)是一个独立的组件配置在VPC上,使得VPC可以访问internet
  • 在Private Subnet中配置了到IGW的路由后,就变成Public Subnet
  • Public Subnet中的EC2还要再配置一个Public IP或者EIP就可以访问Internet
  • 如果EC2可以访问internet,其关联的Security Group入站规则如果允许从internet访问,那么这个EC2就可以从internet中直接访问到
  • 实践中我们把应用程序,数据库放在Private Subnet中,阻止从internet访问。把堡垒机和ALB(Application Load balancer)放在Public Subnet,允许从internet访问
  • 配置了NAT路由的Private Subnet中EC2可以访问internet,但不能被internet访问到,因为这个EC2并没有IP,流量是通过NAT转换了,NAT有IP
  • NAT gateway需要一个EIP(Elastic IP)并且把NAT配置在Public Subnet中
  • 有时候Private Subnet中的EC2虽然不能访问外部internet,也需要访问特定服务如S3,RDS,这时候可以创建End Point
  • 创建End Point需要选择Service种类,VPC,路由表,实际上会在选择的路由表上添加一条记录,前缀是vpce-
  • 每个Subnet都必须关联一个路由表,创建的每个Subnet都会自动关联 VPC 的主路由表
  • 创建Security Group时,只需指定VPC。之后可以把SG与EC2, RDS, VPC Endpoint相关连,用来控制这些服务的出入站IP和端口
  • 所有 IPv4 流量 (0.0.0.0/0),IPv6 流量 (::/0)

参考

https://aws.amazon.com/cn/vpc/faqs/

https://help.aliyun.com/document_detail/54095.html

https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/VPC_Subnets.html

https://www.bilibili.com/video/BV1wk4y1r7gX

https://www.iloveaws.cn/3707.html

https://zh.wikipedia.org/zh-hans/无类别域间路由