AWS学习系列-基础概念和VPC网络

浏览量:598

亚马逊 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 之间由高带宽,极低延时的光纤网络相连,数据以加密形式传输。彼此都在 100 公里(60 英里)以内。参考

你可以理解为北京是一个Region: cn-north-1,其中朝阳区有个AZ:cn-north-1c,海淀区有个AZ:cn-north-1d

容灾备份时,重要的数据可以放到多AZ里,假如朝阳区机房停电或失火,业务立马转到海淀区的。

虚拟私有网络 VPC

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

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

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

如上图,指定 VPC 的IP段为 172.16.0.0/16, 其中又划分了两个网段, 172.16.10.10/32为公开网段,允许外部访问,可以设置我们的web服务, 172.16.20.10/32 为私有网段,可以部署我们的数据库等服务,保护我们的数据。

其中,IP段用CIDR表示法

CIDR

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

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

创建子网时要考虑你需要的资源数和具体业务,比如不同部门使用不同的网段,不同分公司使用不同的网段。设置不同应用使用不同网段。

IP/CIDR 掩码 主机数
a.b.c.d/32 255.255.255.255 1
a.b.c.0/28 255.255.255.240 16
a.b.c.0/24 255.255.255.000 256
a.b.0.0/16 255.255.000.000 65,536

Subnet

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

子网 Subnet 分为两种 Private Subnet 和 Public Subnet。

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

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

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

实战

AWS 账号可以用信用卡免费申请,并且提供了很多免费服务,有效期一年

需要说明大陆 Region 是独立的,政策原因,数据和国际站点不互通,可以用人民币支付,使用 https://aws.amazon.com/cn/ 注册,而通过 https://aws.amazon.com/ 注册的选不了中国大陆的Region,产生费用需要用美元支付

创建两个子网

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

一个是 Private Subnet,不能访问因特网,但可以访问内网 Public Subnet 中的实例

创建VPC

实际上,我们创建EC2实例后,默认可以访问外网,这是因为AWS已经为我们创建了默认的VPC和子网。参考

这里出于学习目的,新建一个VPC

region: 亚太地区 (东京) ap-northeast-1

IPv4 CIDR: 192.168.0.0/16

name: finley-vpc

创建互联网网关

name: finley-internet-gateway

并 attach 到 finley-vpc 上

记下这个igw开头的id,用于后面配置公有子网访问外网

创建三个子网

分别为 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 

编辑子网关联

创建第二个路由

name: finley-private

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

创建 EC2

EC2就是实例,虚拟化的服务器

EC2有CPU,内存,硬盘不同的配置规格,创建EC2时可以选择生成一个公网IP地址

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

VPC 选择 finley-vpc

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

实例名 公有 IPv4 地址 私有 IPv4 地址
finley-public-ec2 52.197.152.165 192.168.0.107
finley-private-ec2 192.168.2.197

EIP(Elastic IP)是AWS提供的静态公共IP。实例即便被删除IP也会保留,因为IP地址也是资源,如果EIP没有绑定实例会按小时收费,不用的时候可以释放掉

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

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

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

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

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

假如有天这个内网实例需要访问公网,可以通过绑定NAT的方式

注意: NAT是按小时收费的,不用时候及时释放

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

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

选择一个公有子网。这里选择了 finley-public

等状态变为 available

修改路由表

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

此时 finley-private-ec2 可以访问互联网了

总结

  • 首先我们选择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/%E6%97%A0%E7%B1%BB%E5%88%AB%E5%9F%9F%E9%97%B4%E8%B7%AF%E7%94%B1

留下评论