当您使用AWS资源(例如EC2实例)时 ,会将它们分配给默认VPC 。 但是,通过使用AWS,可以轻松设置自己的VPC。 在这篇文章中,我描述了如何设置基本配置。 在此设置中,我们为服务器提供了一个公共子网,必须从外界( DMZ )进行访问,而为我们的(EC2)服务器提供一个私有子网,我们希望与外界隔离。 但是,为了能够从我们的私有子网访问Internet,我们将设置一个NAT实例 ,我将在另一篇文章中进行介绍。
下图显示了我要在本文中创建的设置:
这些是我将要设置VPC的步骤:
- 创建一个VPC
- 创建子网
- 创建Internet网关
- 创建自定义路由表
创建一个VPC
第一步是创建VPC。 我没有使用向导,而是通过菜单:
并选择手动创建VPC:
填写VPC的名称和CIDR块以分配给该VPC:
单击“是,创建”后,我们看到已创建VPC。 接下来是在我们的VPC中创建两个子网。
创建子网
在VPC仪表板中,单击创建子网的选项:
创建后,子网如下所示:
请记住,一个子网仅映射到一个可用性区域。 默认情况下,它具有一个路由表,该路由表将使两个子网之间的通信成为可能。 但是,要从我们的公共子网访问Internet,我们需要一个Internet网关(它是使用向导自动创建的,但是由于不使用向导,因此必须手动进行操作)。
创建Internet网关
为了使公共访问成为可能,我们需要创建一个Internet网关。 在控制台中这也很简单。 转到Internet网关,单击“创建Internet网关”,然后填写IGW的名称:
默认情况下,创建的IGW是分离的,我们必须将其附加到我们的VPC(请注意,每个VPC只能有一个IGW)。 要附加它,只需单击“附加到VPC”,然后选择VPC:
下一步是创建一个新的路由表,将我们的公共子网附加到IGW。
创建自定义路由表
要将IGW连接到我们的公共子网,我们需要一个路由表来定义路由。 我们通过单击“创建路由表”并在我们的VPC中创建它来执行此操作:
创建表后,我们需要添加一条路由以允许传出流量到我们的IGW。 为此,我们向自定义路线表添加新路线:
选择我们的IGW作为目标并输入目标'0.0.0.0/0',以允许分配的子网中的所有IP地址访问IGW。 创建路由后,我们需要将公共子网与该路由表相关联,因为默认情况下,没有子网与我们的自定义路由表相关联:
因此,将我们的公共子网分配给路由表:
现在,我们有一个公共子网作为我们的DMZ,还有一个私有子网。 现在让我们在两个子网中部署EC2实例并对其进行测试!
我创建了一个运行AWS Linux的标准EC2 micro.t2实例 。 重要的是在我们刚刚创建的VPN中创建实例,为其分配公共子网,并自动为其分配一个公共IP:
接下来接受默认值,直到安全组步骤为止。 将“ HTTP”作为允许的协议添加到默认安全组:
单击下一步并启动实例。 当要求提供密钥对时,请创建一个新的密钥对,并且不要忘记下载它:
启动我们的网络服务器时,我们创建一个名为“ MyAppServer”的新实例,该实例将驻留在我们的专用子网中:
使用与先前实例相同的安全组(请注意,可以在子网不能使用的可用区中使用安全组)。 还使用与先前实例(MyNewKeyPair)相同的密钥对。
现在,我们的VPC中有两个实例在各自的子网中运行:
我们可以在WebServer实例的属性中看到它已经收到了公共IP地址,因此让我们尝试通过SSH访问它。 我为此在Mac上使用Terminal。 确保您下载的pem文件位于正确的SSH密钥位置,并且具有正确的访问权限。 我只是像这样创建一个新文件:
cd ~
nano MyNewKeyPair.pem
** paste pem content of downloaded key file **
[ctrl]-o
[ctrl]-x
chmod 600 MyNewKeyPair.pem
有了这个pem文件之后,我们现在可以建立到Web服务器的ssh连接 。 复制实例的公共IP地址并执行以下命令:
ssh ec2-user@52.7.40.73 -i MyNewKeyPair.pem
这将导致成功的连接,如下所示:
The authenticity of host ‘52.7.40.73 (52.7.40.73)’ can’t be established.
RSA key fingerprint is 0c:5e:48:9a:44:79:af:bd:18:85:68:53:aa:52:a4:5f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘52.7.40.73’ (RSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
18 package(s) needed for security, out of 46 available
Run “sudo yum update” to apply all updates.
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[ec2-user@ip-10-0-1-92 ~]$
现在,当我们执行“ sudo yum update”时,它将通过互联网获取以下软件包来更新必要的软件包:
Installed:
kernel.x86_64 0:3.14.42-31.38.amzn1
Updated:
aws-amitools-ec2.noarch 0:1.5.7-1.0.amzn1 aws-apitools-common.noarch 0:1.1.0-1.9.amzn1
aws-cfn-bootstrap.noarch 0:1.4-9.4.amzn1 aws-cli.noarch 0:1.7.29-1.13.amzn1
0.1.a1.11.amzn1
python27-configobj.noarch 0:4.7.2-7.15.amzn1 python27-devel.x86_64 0:2.7.9-4.115.amzn1
python27-jmespath.noarch 0:0.7.1-1.8.amzn1 python27-libs.x86_64 0:2.7.9-4.115.amzn1
python27-setuptools.noarch 0:12.2-1.30.amzn1 rpm.x86_64 0:4.11.2-2.64.amzn1
rpm-build-libs.x86_64 0:4.11.2-2.64.amzn1 rpm-libs.x86_64 0:4.11.2-1.25.amzn1
rubygem20-bigdecimal.x86_64 0:1.2.0-1.25.amzn1 rubygem20-psych.x86_64 0:2.0.0-1.25.amzn1
rubygems20.noarch 0:2.0.14-1.25.amzn1 time.x86_64 0:1.7-38.9.amzn1
tzdata.noarch 0:2015b-1.33.amzn1 tzdata-java.noarch 0:2015b-1.33.amzn1
unzip.x86_64 0:6.0-2.9.amzn1 yum.noarch 0:3.4.3-137.57.amzn1
yum-metadata-parser.x86_64 0:1.1.4-8.12.amzn1
Complete!
[ec2-user@ip-10-0-1-92 ~]$
现在让我们看一下我们的ApplicationServer实例。 正如我们在控制台中看到的那样,该实例没有公共IP地址,也没有弹性IP地址。 它拥有的唯一IP地址是私有地址:
因此,如果我们要SSH进入该实例,则必须从Web服务器启动SSH连接。 我们可以使用与登录网络服务器相同的步骤(我们需要首先创建一个密钥对,然后像这样打开SSH):
[ec2-user@ip-10-0-1-92 ~]$ nano MyNewKeyPair.pem
[ec2-user@ip-10-0-1-92 ~]$ chmod 600 MyNewKeyPair.pem
[ec2-user@ip-10-0-1-92 ~]$ ssh ec2-user@10.0.2.37 -i MyNewKeyPair.pem
Last login: Sun May 31 07:22:39 2015 from 10.0.1.92
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
[ec2-user@ip-10-0-2-37 ~]$
现在,我们已经登录了我们的应用服务器。 如果现在运行命令“ sudo yum update”,我们将看到以下内容:
这是有道理的,因为我们的专用子网未连接到Internet网关,因此无法访问Internet。 为了使子网能够访问Internet,我们应该在VPC中添加一个NAT。 我将在另一篇文章中演示如何做到这一点。
翻译自: https://www.javacodegeeks.com/2015/06/setting-up-your-own-vpc-with-aws.html