跟着拉面学习AWS——EC2, IGW, RT, NAT, SG
长文多图预警,看结论可以直接拖到“总结”部分
本文承接上一篇文章介绍以下 AWS 基础概念或服务
在上一篇文章中我们创建了一个 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 间的连通。
Amazon EC2(Amazon Elastic Compute Cloud)是 AWS 提供的基本服务,可以理解为一台 VM(虚拟服务器)。
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”
选择第一个 AMI(Amazon Linux 版本)就可以,点击“select”
选 t2 的最小类型,点击“Next:Configure Instance Details ”
选择上一篇建好的 VPC “tstest”和 Subnet“ts-public-1”,注意 IAM Role 选择“AmazonSSMroleForInstancesQuickSetup”,这个在后面配置 SSM 时需要。点击“Next: Add Storage”。
图 4
说明:这里“Auto-assign Public IP”中选项是“Using subnet setting(Disable)”是指默认创建的 Subnet 不会为 Subnet 中新建的 Network interface 分配 Public IP,所以新建 EC2 的网卡中也没有分配 Public IP。
不需要改 Storage,点击“Next: Add Tags”
填加一个 Tag 方便后面查找,然后点击“Next:Configure Security Group”
我们新建一个 Security Group “tstest-pub1-sg”并加入一条规则,然后点击“Review and Launch”
说明:可以看到 Security Group 用来控制 EC2 的出站入站规则,控制 IP 和端口。
点击“Launch”
在出现的界面中选择一个 Key Pair,然后点击“Launch Instances”
说明:Key Pair 是 SSH Key 用来远程无密码登录 EC2 Linux 服务器,与“AWS ECS Fargate 容器调试”一文创建的 Key Pair 功能相同。本文后面用 SSM 网页登录 EC2,所以这里可以选择 Key Pair 也可以留空。
过一会儿后,可以查看 EC2 已处于运行状态,可以看到 EC2 只有 Private IP,Public IP 为空
到目前为止的关系图
说明:我们在“ts-public-1”的 Subnet 中创建了一个 EC2 “tstest-pub1”,这个 EC2 只有 Private IP,无法从外部直接访问。
SSM(System Manager)是 AWS 提供用来统一管理 AWS 资源架构的服务,可以给资源分组,定制任务,提供操作数据等。
我们这里利用 SSM 在 EC2 上配置 SSM agent,然后我们就可以通过网页登录 Linux 系统。
在 AWS 中控台搜索 SSM,进入 System Manager 界面。第一次使用的话会出现以下界面,点击“Get Started with Systems Manager”
进入 Quick Setup 界面后,点击“Edit all”
我们选择“Choose instances manually”,然后选择刚创建的 EC2 “tstest-pub1”,点击“Reset”
说明:这里 SSM 会在 EC2 上安装必要的软件用来监控。
然后我们点击左边列表“Managed Instances”,然后查看我们的 EC2 “SSM Agent ping status”状态为 Online。
说明:当使用 SSM 控制 EC2 时需要注意以下几点
提示:如果在创建 EC2 时选择了“AmazonSSMRoleForInstancesQuickSetup”做为 IAM Role,并且网络满足上面后两个条件,EC2 创建好 SSM 会自动配置 agent
在 EC2 界面左边列表选择“Instances”,选择 EC2 “tstest-pub1”,点击“Connect”
选择“Session Manager”,点击“Connect”
弹出新网页进入 EC2 命令行,sudo su 切换到 root 用户
准备工作就绪,接下来我们还会创建 EC2 并用网页登录,方法相同,就不再重复。
到目前为止的关系图
说明:我们在“ts-public-1”的 Subnet 中创建了一个 EC2 “tstest-pub1”,这个 EC2 只有 Private IP,无法从外部直接访问。
IGW(Internet gateway)是 AWS 提供的,用来实现 VPC 和 Internet 之间相互通信的高可用组件。
IGW 提供以下两项功能
在没有配置 IGW 之前,用 SSM 网页登录 EC2 “tstest-pub1”,然后用 wget 命令测试 internet 连接,如果可以连通到 internet,wget 命令可以下载到这个网站的默认首页
wget www.baidu.com
结果如下图,下载不了,表示连不通 internet
下面我们在 VPC 中加入 IGW(Internet Gateway),并配置路由把 Subnet “ts-public-1”变成 Public Subnet
进入 VPC 界面,选择“Internet Gateways”,点击“Create internet gateway”
填加 IGW 名称,点击“Create internet gateway”
创建成功,点击“Attache to a VPC”
选择我们建的 VPC,点击“Attach internet gateway”
结果如下
现在 VPC 中配置好 IGW 了。
RT(Route Table)与 Subnet 相关连,用来描述网络路由。
我们给 VPC 加了 IGW 之后,需要修改 Subnet 相关的路由,确保访问 Internet 的请求发送到 IGW。
每个 VPC 中有一个默认的主 RT,自动关联 VPC 内的每一个 Subnet。我们现在为 Subnet “ts-public-1”单独创建一个新的 RT。
在 VPC 界面,选择“Route Tables”,点击“Create route table”
填写 RT 名称,选择我们的 VPC,点击“Create”
然后我们把建好的 RT 和 Subnet “ts-public-1”相关联
选择我们的 RT,选中“Subnet Associations”,点击“Edit subnet associaions”
选择 Subnet “ts-public-1”,点击“Save”。我们把新 RT 和 Subnet 相关联。一个 RT 可以关联多个 Subnet。
把 RT 和 Subnet 关联后,下面添加到 IGW 的路由。
选择我们的 RT,选中“Routes”,点击“Edit routes”
新填加一条路由如下,点击“Save routes”
结果如下
说明:
现在 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
EIP(Elasitc IP)是 AWS 提供的静态公共 IP,可以从 internet 上访问到。
默认一个 VPC 只能申请 5 个,可以向 AWS Support 提请求增加数量。
我们先申请一个 EIP,然后把它关联到我们在 Public Subnet 的 EC2 上
在 VPC 界面,选择“Elastic IPs”,点击“Allocate Elastic IP address”
填入 Tag,方便查找,点击“Allocate”
提示:分配 EIP 后要和 EC2 或者网络接口相关联,不然空闲的 EIP 会收费,关联后则不收费
关联 EC2,点击“Associate This Elastic IP address”或者选 Action 中相同项
选择 instance,然后在下拉列表中选择 EC2 “tstest-pub1”,点击“Associate”
结果如下
我们再去测试 EC2 “tstest-pub1”,可以看到网页可以下载成功,说明现在已经可以连通到 internet。
在 EC2 的命令行中,用 root 用户运行下列命令,安装 telnet,方便后续测试
yum install telnet
小结:
我们用上面的相同方法,新建如下内容
EC2 “tstest-pri1”建好如下
现在关系图如下
我们用 SSM 网页登录 EC2 “tstest-pri1”测试,其无法访问 internet。
下面我们增加 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 与这些实例的连接。
在 VPC 界面选择“NAT Gateways”,点击“Create NAT gateway”
填入 NAT 名称,选择 Public Subnet,选择一个 EIP 或者点击“Alocate Elastic IP”分配一个新的。这里我把绑定到之前 EC2 的 EIP 释放了,在这里重用,然后点击“Create NAT gateway”
说明:NAT Gateway 需要建在 Public Subnet 中并且配置一个 EIP
创建成功如下图
下一步我们用上面同样的方法创建新 RT “ts-private-1-rt”,并与 Private Subnet“ts-private-1”相关联,并加入到 NAT 的路由。
在配置了到 NAT 路由后,可以发现 Private Subnet 中的 EC2 “tstest-pri1”也可以访问 internet 了
最后我们简单测一下 Security Group 的作用。
Security Group(SG)用来控制其关联的实例的 IP 和端口出入站规则。
我们在 EC2 “tstest-pri1”测试到 EC2 “tstest-pub1”的 22 端口是否可以访问。
结果显示超时,因为 EC2 “tstest-pub1”的 SG “tstest-pub1-sg”中没有允许任何 IP/端口访问 22 端口。
现在我们增加一条入站规则。
在 EC2 界面,选择“Security Groups”,选中“tstest-pub1-sg”,选择“Inbound Rules”,点击“Edit inbound rules”
这里列出了三条入站 Rule,只填加其中任一条即可
我们在 EC2 “tstest-pri1”测试到 EC2 “tstest-pub1”的 22 端口的访问成功了。
这里把上一篇的总结再汇总一下
实践中我们把应用程序,数据库放在 Private Subnet 中,阻止从 internet 访问。把堡垒机和 ALB(Application Load balancer)放在 Public Subnet,允许从 internet 访问。
一般我们会建两套 Public Subnet 和 Private Subnet,分别放在不同的 AZ 中,防止其中一个 AZ 出问题。这时如果配置 NAT,也需要在两个 Public Subnet 中各配置一个 NAT。
前面几篇关于 Fargate 的文章中,我们把 Task 运行在 Public Subnet 中,生产中这些 Task 也是运行在 Private Subnet 中,以阻止从 internet 访问。
当创建 Subnet 时,自动分配 Public IP 的功能是关闭的,此功能可以在 Subnet 界面打开。打开此功能后,在这个 Subnet 创建 EC2 时,其 Network Interface 会自动分配一个 Public IP。
篇幅的关系这里没有讲到 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干货”