一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下

一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第1张图片

B站实操视频更新

跟着拉面学习AWS——EC2, IGW, RT, NAT, SG

简介

长文多图预警,看结论可以直接拖到“总结”部分

本文承接上一篇文章介绍以下 AWS 基础概念或服务

  • EC2
  • IGW(Internet Gateway)
  • Route Table(RT)
  • EIP (Elistic IP)
  • NAT gateway
  • SSM (System manager)
  • Security Group(SG)

在上一篇文章中我们创建了一个 VPC,两个 Subnet,配置了从 VPC 到 SSM 的 endproint。

本文中我们先创建 EC2,然后在 VPC 中添加 IGW,再添加 Route table 把 Subnet 转变为 Public Subnet。

然后分配 EIP 并关联 EC2,测试 Public Subnet 中的 EC2 可访问 internet。

接下来创建 NAT gateway,设置 Private Subnet 的路由使得 Private Subnet 中的 EC2 也可以访问 internet。

最后修改 Security Group(SG)测试 EC2 间的连通。

目录

  • 环境(配置)
  • 实战步骤
    1. 创建测试用 EC2
    2. 通过 SSM 配置 EC2
    3. 网页上登录 EC2
    4. 改为 Public Subnet
      • 添加 IGW(Internet gateway)
      • 设置 RT(Route Table)
    5. 为 EC2 增加 EIP(Elasitc IP)
    6. 利用 NAT 使 Private Subnet 中的 EC2 访问 internet
    7. Security Group
  • 总结
  • 引申
  • 后记
  • 更正

环境(配置)

  • AWS 中国或 Global 帐号,可在官网申请,一年内使用指定资源免费

实战步骤

1. 创建测试用 EC2

创建 EC2

Amazon EC2(Amazon Elastic Compute Cloud)是 AWS 提供的基本服务,可以理解为一台 VM(虚拟服务器)。

图 0
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第2张图片

EC2 支持 Windows 和 Linux 两个环境,linux 中还分 Amazon Linux 及 Ubuantu,Redhat 等其它 Linux 版本。

实际上,目前很多公司的上云项目,就是把原来本地 VM 上的项目直接搬到了 EC2 上。

本文中,我们利用最小的 Amzon Linux 版本 EC2 进行网络测试。

上一篇建好的 Subnet 信息抄写如下,我们将在每个 Subnet 中各建一个 EC2

Subnet Region AZ 网段
ts-private-1 cn-north-1 cn-north-1a 10.0.1.0/24
ts-public-1 cn-north-1 cn-north-1a 10.0.2.0/24

在 AWS 中控台,选择 EC2,进入 EC2 界面。选择“Instances”,点击“Lanuch instances”

图 1
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第3张图片

选择第一个 AMI(Amazon Linux 版本)就可以,点击“select”

图 2
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第4张图片

选 t2 的最小类型,点击“Next:Configure Instance Details ”

图 3
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第5张图片

选择上一篇建好的 VPC “tstest”和 Subnet“ts-public-1”,注意 IAM Role 选择“AmazonSSMroleForInstancesQuickSetup”,这个在后面配置 SSM 时需要。点击“Next: Add Storage”。

图 4
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第6张图片
说明:这里“Auto-assign Public IP”中选项是“Using subnet setting(Disable)”是指默认创建的 Subnet 不会为 Subnet 中新建的 Network interface 分配 Public IP,所以新建 EC2 的网卡中也没有分配 Public IP。

不需要改 Storage,点击“Next: Add Tags”

图 5
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第7张图片

填加一个 Tag 方便后面查找,然后点击“Next:Configure Security Group”

图 6
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第8张图片

我们新建一个 Security Group “tstest-pub1-sg”并加入一条规则,然后点击“Review and Launch”

图 7
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第9张图片

说明:可以看到 Security Group 用来控制 EC2 的出站入站规则,控制 IP 和端口。

点击“Launch”

图 8
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第10张图片

在出现的界面中选择一个 Key Pair,然后点击“Launch Instances”

图 9
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第11张图片

说明:Key Pair 是 SSH Key 用来远程无密码登录 EC2 Linux 服务器,与“AWS ECS Fargate 容器调试”一文创建的 Key Pair 功能相同。本文后面用 SSM 网页登录 EC2,所以这里可以选择 Key Pair 也可以留空。

过一会儿后,可以查看 EC2 已处于运行状态,可以看到 EC2 只有 Private IP,Public IP 为空

图 10
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第12张图片

到目前为止的关系图

图 11
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第13张图片

说明:我们在“ts-public-1”的 Subnet 中创建了一个 EC2 “tstest-pub1”,这个 EC2 只有 Private IP,无法从外部直接访问。

2. 通过 SSM 配置 EC2

SSM(System Manager)是 AWS 提供用来统一管理 AWS 资源架构的服务,可以给资源分组,定制任务,提供操作数据等。

我们这里利用 SSM 在 EC2 上配置 SSM agent,然后我们就可以通过网页登录 Linux 系统。

在 AWS 中控台搜索 SSM,进入 System Manager 界面。第一次使用的话会出现以下界面,点击“Get Started with Systems Manager”

图 12
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第14张图片

进入 Quick Setup 界面后,点击“Edit all”

图 13
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第15张图片

我们选择“Choose instances manually”,然后选择刚创建的 EC2 “tstest-pub1”,点击“Reset”

图 14
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第16张图片

说明:这里 SSM 会在 EC2 上安装必要的软件用来监控。

然后我们点击左边列表“Managed Instances”,然后查看我们的 EC2 “SSM Agent ping status”状态为 Online。

图 15
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第17张图片

说明:当使用 SSM 控制 EC2 时需要注意以下几点

  • EC2 的 instance profile 需要设成“AmazonSSMRoleForInstancesQuickSetup”,这个 profile 用来赋予 EC2 使用 SSM 核心功能的权限

图 16
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第18张图片

  • EC2 能访问 internet,或者 EC2 所在的 VPC 存在到 SSM 的 endpoint(上一篇文章中建的 VPC endpoint)
  • 如果用 VPC endpoint,需确保这个 VPC endpoint 配置的 Security group 的入站规则允许源 EC2 的 IP 或 SG 访问 443 端口

提示:如果在创建 EC2 时选择了“AmazonSSMRoleForInstancesQuickSetup”做为 IAM Role,并且网络满足上面后两个条件,EC2 创建好 SSM 会自动配置 agent

3. 网页上登录 EC2

在 EC2 界面左边列表选择“Instances”,选择 EC2 “tstest-pub1”,点击“Connect”

图 17
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第19张图片

选择“Session Manager”,点击“Connect”

图 18
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第20张图片

弹出新网页进入 EC2 命令行,sudo su 切换到 root 用户

图 19
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第21张图片

准备工作就绪,接下来我们还会创建 EC2 并用网页登录,方法相同,就不再重复。

到目前为止的关系图

图 11
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第22张图片

说明:我们在“ts-public-1”的 Subnet 中创建了一个 EC2 “tstest-pub1”,这个 EC2 只有 Private IP,无法从外部直接访问。

4. 改为 Public Subnet

添加 IGW(Internet gateway)

IGW(Internet gateway)是 AWS 提供的,用来实现 VPC 和 Internet 之间相互通信的高可用组件。

IGW 提供以下两项功能

  • Subnet 中的流量通过 IGW 访问 Internet
  • 为配置了 Public IP 的 Instance 提供网址转换

在没有配置 IGW 之前,用 SSM 网页登录 EC2 “tstest-pub1”,然后用 wget 命令测试 internet 连接,如果可以连通到 internet,wget 命令可以下载到这个网站的默认首页

wget www.baidu.com

结果如下图,下载不了,表示连不通 internet

图 21
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第23张图片

下面我们在 VPC 中加入 IGW(Internet Gateway),并配置路由把 Subnet “ts-public-1”变成 Public Subnet

进入 VPC 界面,选择“Internet Gateways”,点击“Create internet gateway”

图 22

填加 IGW 名称,点击“Create internet gateway”

图 23
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第24张图片

创建成功,点击“Attache to a VPC”

图 24
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第25张图片

选择我们建的 VPC,点击“Attach internet gateway”

图 25
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第26张图片

结果如下

图 26
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第27张图片

现在 VPC 中配置好 IGW 了。

设置 RT(Route Table)

RT(Route Table)与 Subnet 相关连,用来描述网络路由。

我们给 VPC 加了 IGW 之后,需要修改 Subnet 相关的路由,确保访问 Internet 的请求发送到 IGW。

每个 VPC 中有一个默认的主 RT,自动关联 VPC 内的每一个 Subnet。我们现在为 Subnet “ts-public-1”单独创建一个新的 RT。

在 VPC 界面,选择“Route Tables”,点击“Create route table”

图 27
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第28张图片

填写 RT 名称,选择我们的 VPC,点击“Create”

图 28
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第29张图片

然后我们把建好的 RT 和 Subnet “ts-public-1”相关联

选择我们的 RT,选中“Subnet Associations”,点击“Edit subnet associaions”

图 29
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第30张图片

选择 Subnet “ts-public-1”,点击“Save”。我们把新 RT 和 Subnet 相关联。一个 RT 可以关联多个 Subnet。

图 30
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第31张图片

​ 把 RT 和 Subnet 关联后,下面添加到 IGW 的路由。

选择我们的 RT,选中“Routes”,点击“Edit routes”

图 31
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第32张图片

新填加一条路由如下,点击“Save routes”

  • Destination: 0.0.0.0/0
  • Target: tstestIGW

图 32
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第33张图片

结果如下

图 33
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第34张图片

说明:

  • 第一条表示到 10.0.*.*的请求会发送至 VPC 中
  • 第二条表示到其它 IP 的请求会发送至 IGW

现在 Subnet “ts-public-1”已经成为 Public Subnet。但是,如果在 EC2 上测试还是会连不上 Internet,我们还需要为 EC2 加上一个 Public IP 或者 EIP。

EC2 Public IP 来源于 EC2-VPC 公共 IP 池。每次停止 EC2 再启动后,EC2 的 Public IP 会重新分配,变成一个新的 IP。

注意:如果直接 Restart EC2(不是停止,再启动)则 Public IP 不会变

EIP 是不会因为 EC2 停止后再启动而改变的,下面我们给 EC2 配置一个 EIP

5. 为 EC2 增加 EIP(Elasitc IP)

EIP(Elasitc IP)是 AWS 提供的静态公共 IP,可以从 internet 上访问到。

默认一个 VPC 只能申请 5 个,可以向 AWS Support 提请求增加数量。

我们先申请一个 EIP,然后把它关联到我们在 Public Subnet 的 EC2 上

在 VPC 界面,选择“Elastic IPs”,点击“Allocate Elastic IP address”

图 34

填入 Tag,方便查找,点击“Allocate”

图 35
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第35张图片

提示:分配 EIP 后要和 EC2 或者网络接口相关联,不然空闲的 EIP 会收费,关联后则不收费

关联 EC2,点击“Associate This Elastic IP address”或者选 Action 中相同项

图 36
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第36张图片

选择 instance,然后在下拉列表中选择 EC2 “tstest-pub1”,点击“Associate”

图 37
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第37张图片

结果如下

图 38
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第38张图片

我们再去测试 EC2 “tstest-pub1”,可以看到网页可以下载成功,说明现在已经可以连通到 internet。

图 39
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第39张图片

在 EC2 的命令行中,用 root 用户运行下列命令,安装 telnet,方便后续测试

yum install telnet

小结:

  • 新建的 Subnet 就是 Private Subnet
  • 在 Private Subnet 中配置了到 IGW 的路由后,就变成 Public Subnet
  • Public Subnet 中的 EC2 还要再配置一个 Public IP 或者 EIP 就可以访问 Internet
  • 如果 EC2 可以访问 internet,其关联的 Security Group 入站规则如果允许从 internet 访问,那么这个 EC2 就可以从 internet 中直接访问到。

6. 利用 NAT 使 Private Subnet 中的 EC2 访问 internet

我们用上面的相同方法,新建如下内容

  1. Security Group “tstest-pri1-sg”
  2. 在”Subnet “ts-private-1”中创建 EC2 “tstest-pri1”并与 Security Group “tstest-pri1-sg”关联

EC2 “tstest-pri1”建好如下

图 40
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第40张图片

现在关系图如下

图 20
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第41张图片

我们用 SSM 网页登录 EC2 “tstest-pri1”测试,其无法访问 internet。

图 41
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第42张图片

下面我们增加 NAT 组件,并给 Private Subnet 创建 RT,在其中增加到 NAT 的路由,使得 Private Subnet 中的 EC2 可以访问 internet。

NAT(network address translation),AWS 有 NAT instance 和 NAT gateway 提供地址转换功能。

NAT instance 需要启动一个专门的 EC2,我们这里用轻量级的 NAT gateway。

NAT gateway 允许 Private Subnet 中的实例连接到 Internet,但不允许 Internet 与这些实例的连接。

创建 NAT Gateway

在 VPC 界面选择“NAT Gateways”,点击“Create NAT gateway”

图 42

填入 NAT 名称,选择 Public Subnet,选择一个 EIP 或者点击“Alocate Elastic IP”分配一个新的。这里我把绑定到之前 EC2 的 EIP 释放了,在这里重用,然后点击“Create NAT gateway”

图 43
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第43张图片

说明:NAT Gateway 需要建在 Public Subnet 中并且配置一个 EIP

创建成功如下图

图 44
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第44张图片

下一步我们用上面同样的方法创建新 RT “ts-private-1-rt”,并与 Private Subnet“ts-private-1”相关联,并加入到 NAT 的路由。

图 45
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第45张图片

在配置了到 NAT 路由后,可以发现 Private Subnet 中的 EC2 “tstest-pri1”也可以访问 internet 了

图 46
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第46张图片

7. Security Group

最后我们简单测一下 Security Group 的作用。

Security Group(SG)用来控制其关联的实例的 IP 和端口出入站规则。

我们在 EC2 “tstest-pri1”测试到 EC2 “tstest-pub1”的 22 端口是否可以访问。

图 47

结果显示超时,因为 EC2 “tstest-pub1”的 SG “tstest-pub1-sg”中没有允许任何 IP/端口访问 22 端口。

现在我们增加一条入站规则。
在 EC2 界面,选择“Security Groups”,选中“tstest-pub1-sg”,选择“Inbound Rules”,点击“Edit inbound rules”

图 48
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第47张图片

这里列出了三条入站 Rule,只填加其中任一条即可

  1. 把发起请求的 EC2 所在的 SG 添入允许的源
  2. 把发起请求的 EC2 所在的 IP 段添入允许的源
  3. 把发起请求的 EC2 的具体 IP 添入允许的源

图 49
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第48张图片

我们在 EC2 “tstest-pri1”测试到 EC2 “tstest-pub1”的 22 端口的访问成功了。

图 50
一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第49张图片

总结

这里把上一篇的总结再汇总一下

  1. 首先我们选择 Region,随后所有创建的内容都是存在此 Region 中
  2. 创建 VPC,一个虚拟网络,在里面设置 IP 段,VPC 是一个逻辑结构,并不和 AZ(Availability Zone)直接相关
  3. 在 VPC 中创建 Subnet,需指定 IP 段,并且指定所在的 AZ,一个 Subnet 只能指定一个 AZ,一个 AZ 可以容纳多个 Subnet。VPC 中 Subnet 默认是可以相互访问的
  4. 创建 Security Group 时,只需指定 VPC。之后可以把 SG 与 EC2, RDS, VPC Endpoint 相关连,用来控制这些服务的出入站 IP 和端口
  5. IGW 是一个独立的组件配置在 VPC 上,使得 VPC 可以访问 internet
  6. 配置了到 IGW 路由的 Subnet 就是 Public Subnet,Public Subnet 中的 EC2 可以访问 interent,但需要给 EC2 配一个公共 IP 或者 EIP
  7. NAT gateway 需要一个 EIP(Elastic IP)并且把 NAT 配置在 Public Subnet 中
  8. Privte Subnet 不能直接访问 interent,配置了到 NAT 路由的 Private Subnet 中 EC2 可以访问 internet,但不能被 internet 访问到

引申

  1. 实践中我们把应用程序,数据库放在 Private Subnet 中,阻止从 internet 访问。把堡垒机和 ALB(Application Load balancer)放在 Public Subnet,允许从 internet 访问。

  2. 一般我们会建两套 Public Subnet 和 Private Subnet,分别放在不同的 AZ 中,防止其中一个 AZ 出问题。这时如果配置 NAT,也需要在两个 Public Subnet 中各配置一个 NAT。

  3. 前面几篇关于 Fargate 的文章中,我们把 Task 运行在 Public Subnet 中,生产中这些 Task 也是运行在 Private Subnet 中,以阻止从 internet 访问。

  4. 当创建 Subnet 时,自动分配 Public IP 的功能是关闭的,此功能可以在 Subnet 界面打开。打开此功能后,在这个 Subnet 创建 EC2 时,其 Network Interface 会自动分配一个 Public IP。

  5. 篇幅的关系这里没有讲到 Network Interface。给 EC2 配置 EIP,实际上是给 EC2 上的 Network Interface 配置 EIP。 我们也可以给 EC2 增加多个 Network Interface。

后记

一开始想的很好,这样的基础文章应该很容易写,一篇就够了。

因为是面向新入门的读者,所以想把实战中用到的每个概念都提到,这样读者就不需要碰到一个词不懂,就得去查。

结果越写越多,越写越累,最后不得不拆成两篇,还总感觉一开始想的内容没加进去。

这两篇文章字多图也多,也比较枯燥。但我自认为把基础的概念都覆盖了,应该可以清楚描述这些概念之前的关系,而且里面的实验也比较细,照着做应该问题不大。

VPC 相关内容又多又杂,这两篇文章也只讲了其中一小部分。希望能给刚入门的朋友提供一个大的框架,方便以后深入学习。

更正

“一文搞懂 AWS Region, VPC, VPC endpoint,AZ, Subnet 基础篇上”中,VPC endpoint 连接的是 RDS Api,不是直接连 RDS。

					喜欢请点赞,欢迎转发

					微信公众号“全是AWS干货”

一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下_第50张图片

你可能感兴趣的:(AWS,aws,ec2,云端)