简介
长文多图预警,看结论可以直接拖到“总结”部分
本文及下一篇文章介绍以下AWS基础概念或服务。
- Region
- AZ(Availability Zone)
- VPC(Virtual Private Cloud)
- Subnet
- Security Group
- VPC Endpoint
- EC2
- IGW(Internet Gateway)
- Route Table(RT)
- EIP (Elistic IP)
- NAT gateway
- SSM (System manager)
- Security Group(SG)
以上概念除EC2,SSM和VPC Endpoint外,都是AWS中的基础概念,在大多数AWS应用中都会遇到这些内容。
比如之前几篇关于 Fargate 的文章中就反复提到了 VPC, Subnet,Security Grup 等概念。
然而在生产环境中,按功能分离,权责分离的原则,VPC 的创建,Subnet 的划分,Security Group 的设定,很多时候是由专门的小组来完成的。
一般用户可能只会直接利用已经配好的环境进行操作,导致对上述基本概念并不是很清楚。
这非常不利于以后进一步学习利用 AWS 服务。
本文及随后的文章,面向对 AWS 有兴趣或者刚入门 AWS 的朋友,力图解释清楚这些概念之间的关系。
通过实战创建 VPC,Subnet,Security group 等常用组件来加深理解。
在 Pulic Subnet, Private Subnet 中分别创建 EC2,然后通过SSM登录到 EC2 中实际测试不同的网络配置。
本文包含以下内容,主要是搭建环境。测试部分将在下一篇文章里介绍。
- Region
- AZ(Availability Zone)
- VPC(Virtual Private Cloud)
- Subnet
- Security Group
- VPC Endpoint
实战步骤
1. Region, AZ, VPC, Subnet 之间的关系
首先我们先了解一下 Region 和 AZ(Availability Zone)的概念。
AWS 服务分布在世界各地,Region 是 AWS 服务中一个划分区域的概念,也是一个具体的地理位置。
一个 Region 就是多个数据中心的集群,到 2021 年为止 AWS 全球有 25 个 Region。
每个 Region 中包含数个独立的,物理分隔开的 AZ(Availability Zone),每个 AZ 有独立的供电,制冷,安保。
同一 Region 内 AZ 之间由高带宽,极低延时的光纤网络相连,数据以加密形式传输。
每个 AZ 下包含一个或多个数据中心。每个数据中心有独立的供电,制冷,网络。
Region 与 AZ 的关系如下图
VPC(Amazon Virtual Private Cloud)是用户在 Region 中自定义的虚拟网络,是一个整体概念。用户可以在一个 Region 中创建多个 VPC。
我们可以在 VPC 中选择 IP 网段,创建 Subnet,指定 Route Table,控制 ACL(Access Control list),设置网关等。
大部分 AWS 服务都需要以 VPC 为基础进行构建,比如最常用的 EC2,ALB,及无服务器服务 ECS Fargate。
当我们在一个 VPC 中创建 Subnet 时需要给 Subnet 选择一个 AZ(Availability Zone),一个 Subnet 只能选择建在一个 AZ 中。
Region,VPC,AZ,Subnet 关系如下图所示
说明:
- 在图中的 Region 中建了一个 VPC
- 在 VPC 中又建了两个 Subnet
- Subnet 1 建在 Availability Zone A 中
- Subnet 2 建在 Availability Zone B 中
2. 选择 Region
因为国内政策法规原因,AWS 在中国的服务与 AWS Global 服务略有不同。
AWS Global 的 Region 之间是通过主干网相连的,AWS 中国区的服务没有通过主干网与 AWS Global 相连,只有中国区内部两个 Region,北京和宁夏是相连接的。
中国区的服务相比 Global 区的服务要少一些,不过还在不断增加中。
如果是中国区帐号,可以在 AWS 中国控制台右上角帐号旁边点击地区,选北京或者宁夏区。
如果是 Global 帐号,可以在 AWS Global 控制台右上角帐号旁边点击地区,选择国际区。
选择好 Region 后,之后的所有操作,创建的服务都在此 Region 内。
3. 创建 VPC
在 AWS 中国区控制台选择 VPC,在 VPC 界面选择左边列表中的“Your VPCs”,然后点击“Create VPC”。
提示:我们也可以在 VPC Dashboard 中选择“Start VPC Wizard”来创建 VPC,“Start VPC Wizard”在创建中会一起创建 Subnet,而我们为演示选择分步创建 Subnet
添加 VPC 名称“tstest”,和 VPC 选择的 IP 网段,可以加 Tag 标明这个是测试环境
说明:
可以看到我们在创建 VPC 时并不需要添写 AZ(Availability Zone)信息,VPC 只与 Region 有关。
VPC 创建很快完成,Main route table 和 Main network ACL 为 AWS 自动创建。
之后我们一般添加自己的 Route Table 和 Network ACL 进行网络控制。
4. 创建 Subnet
VPC 创建完成之后,下一步我们来创建 Subnet。
Subnet 是 VPC 中的子网络,建立在特定的 AZ(Availability Zone)中。
Subnet 是最终承载大部分 AWS 服务的组件,比如 EC2, ECS Fargate,RDS。
如下图所示,两个 EC2 是分别运行在两个 Subnet 中,这两个 Subnet 分别处在不同的 AZ 中。
Subnet 分为两种 Private Subnet 和 Public Subnet。
简单来说,不能直接访问 internet 的 Subnet 就是 Private Subnet,能直接访问 internet 的就是 Public Subnet。
当然 Private Subnet 也可以通过 NAT 的方式访问 internet,这点我们后面再谈。
下面我们先建一个 2 个 Subnet
VPC 界面选择“Subnets”,点击“Create Subnet”
选择上面建好的 VPC“tstest”,给 Subnet1 名称,选择 AZ,设置子网网段,然后点击“Add new subnet”
填写第二个 Subnet 的信息,然后点击“Create subnet”
两个 Subnet 创建成功
我们先把上面的信息记下来
我们在 AWS 中国北京区(cn-north-1)中创建了 VPC“tstest”,然后在 VPC 中建了两个 Subnet,这两个 Subnet 选择了同一个 AZ(cn-north-1a)。
现在这两个 Subnet 虽然一个叫 Private 另一个叫 Public,但其实两个都是 Private Subnet,因为这两个 Subnet 还都不能访问外网。
我们将在下一篇中,在另一个 AZ 中再新建两个 Subnet,并讲述如何把 Private Subnet 变为 Public Subnet
5. 创建 Security Group(SG)
Security Group(SG)通过控制IP和端口来控制出站入站规则,可以用于EC2,RDS及下面将要用到的VPC Endpoint。
我们先创建一个Security Group,用来控制VPC Endpoint。
在AWS控制台选择VPC,进入VPC界面。选择“Security Groups”,点击“Create security group”
填加Security Group名称“tstestVPCendpoint”,选择我们建好的VPC。
填加一条入站规则,打开443端口,允许从10.0.0.0/8的IP访问。出站规则保持原样即可。
点击“Create security group”
创建成功
6. 创建 VPC Endpoint
VPC Endpoint用来直接连接VPC与AWS相关服务,比如RDS AIP, S3。
当系统安全要求比较高时,EC2处于的Subnet可能被限制,无法访问internet,这时EC2就无法访问AWS的一些服务,比如SSM。
这时我们可以利用VPC Endpoint把VPC和所需要访问的服务连接起来,然后EC2就可以不经internet访问到所需的服务。
下面我们配置到SSM的VPC Endpoint为下一步测试做准备。
进入VPC控制界面
选择“Endpoints”,点击“Create Endpoint”
选择“AWS Services”
- 搜索“com.amazonaws.cn-north-1.ssm”,选择我们创建的VPC
- Subnets里选择“ts-private-1”
- 在Security Group中选择上面建的“tstestVPCendpoint”
- 点击“Create endpoint”
提示:本文测试环境是中国AWS,在AWS Global中AWS Services的名称可能略有不同
结果报错了,提示我们要启用DNS支持和DNS hostname,我们需要修改VPC,启用DNS。报错界面不需要关闭,新开一个VPC页面。
选择“Your VPCs”,点击我们的VPC id
进入我们的VPC界面后,点击“Action”中的“Edit DNS hostnames”
勾选“Enable”,点击“Save changes”
提示:你需要在Action中点击“Edit DNS hostnames”并启用
现在回到刚才创建VPC Endpoint报错的页面,点击“Retry”
创建成功
新endpoint处于“pending”状态,过一段时间会变成“avaiable”
我们重复上面的步骤添加以下VPC endpoint
- com.amazonaws.cn-north-1.ssm
- com.amazonaws.cn-north-1.ec2messages
- com.amazonaws.cn-north-1.ssmmessages
- cn.com.amazonaws.cn-north-1.ec2
创建完成,结果如下
说明:设置以上VPC Endpoint是为了使SSM(System manager)可以配置EC2,然后就可以在网页上登录EC2服务器进行操作
我们将在下一篇文章中创建EC2,配置EIP,利用SSM登录EC2进行测试。
总结
- 首先我们选择Region,随后所有创建的内容都是存在此Region中
- 创建VPC,一个虚拟网络,在里面设置IP段,VPC是一个逻辑结构,并不和AZ(Availability Zone)直接相关
- 在VPC中创建Subnet,需指定IP段,并且指定所在的AZ,一个Subnet只能指定一个AZ,一个AZ可以容纳多个Subnet
- 创建Security Group时,只需指定VPC。之后可以把SG与EC2, RDS, VPC Endpoint相关联,用来控制这些服务的出入站IP和端口
引申
VPC, Subnet 如何在 AWS 资源中使用(关联)
在创建了 VPC 和 Subnet 后,我们一般会把 AWS 资源和 Subnet 直接相连。
比如新建 EC2 时需要选择 EC2 所在的 Subnet,在定好 Subnet 之后,也就定好了 EC2 所在的 AZ,VPC。
在运行 ECS 时,如果是 EC2 模式则与上面例子相同,如果是 Fargat 模式,我们需要在 Service 中为 task 实例定义运行时所在的 Subnet。
在运行 RDS 时,需要选择 Subnet Group,Subnet Group 中包含多个 Subnet,RDS 实例最终也会运行在 Subnet 中。
在使用 Lambda 函数时,我们也可以把 Lambda 函数运行在指定的 Subnet 中,比如 Private Subnet,用来提供安全性。
在使用 EKS(k8s)时,集群中的 EC2 也要指定运行的 Subnet。
VPC,Subnet 紧密地集成于 AWS 的各种服务中,只能真正搞清楚了这些概念,才能更有效地组织利用 AWS 的服务。
后记
VPC,AZ, Subnet 等一些概念十分基础,一说起来感觉自己都懂,仔细一想就各种问题。
这种情况不只针对 AWS 新手,对于像我这种跟 AWS 打了多年交道的“老手”来说也存在。
上次为了做 AWS 培训,重新看了一遍概念,设计了现场实验环节。从建 VPC,Subnet, NAT 到在双 AZ 环境创建 EC2,并设置 ALB 测试访问。
自我感觉内容充实,实验易懂。
结果培训完效果并不是很好,主要原因居然是干货太多,现场操作太频繁,把大家彻底整蒙圈了。
这次准备写几篇文章专门讲解这些概念,同时配以实验来加深理解。这回可以慢慢看,不会被频繁操作整蒙了。