由于aws(亚马逊云平台)在很多业务需求上,都有对应的产品或者整体的解决方案存在,并且在服务上云之后基本不需要使用者有任何物理资源。而据了解不少企业和公司都有将部分服务向各种私有或公有云迁移的趋势。我所在的业务组选择了aws作为公有云,而这几日我也开始了服务上云的一些实践。
1. 初始VPC
之前未有服务部署上云的经验,自然不太了解VPC为何物。经一番调研终于大致对这个词有了一定概念,VPC全程Virtual Private Cloud,翻译过来就是虚拟私有云,它是公有云上自定义的安全的、完整的逻辑隔离网络空间,是一块可我们自定义的网络空间,与我们在IDC运行的传统网络相似,托管在VPC内的是我们在私有云上的服务器资源,如云主机、云存储、云数据库等等。
而创建一个可以与Internet网络互通的VPC,大致有这么几步:选择VPC的网络地址范围 -> 在可用区中创建子网 -> 创建到Internet的路由 -> 授权往返VPC的流量。
2. 创建VPC
2.1 选择网络地址范围 CIDR
CIDR叫无类别域间路由,用来标识VPC的网络地址范围,下面看以下CIDR的栗子:
172.30.0.0/16 16是掩码,用来表示最后4位的ip地址
每个VPC都通过一个CIDR来指定IPv4的范围,最大/16(可指定65536个可用地址),最小为/28(可指定16个可用地址),注意CIDR地址不应与其它VPC的地址重叠。
刚创建好的VPC是一个封闭的网络从外面是进不来,里面也是出不去的,很多aws的服务都是在VPC里启动运行的。
2.2 设计子网
每个aws的VPC都位于一个区域内,每个账户可创建多个aws的VPC。而子网则用于划分VPC内的空间,每个子网位于一个可用区内。
以宁夏区为例,共有三个可用区,这里就需要给每个可用区设置一个子网,注意:每个子网的CIDR都必须在VPC的CIDR块子集下,且每个字网的CIDR都是不可重叠的。
官方实践建议:
VPC地址段选择/16,子网地址段选择至少/24,每个VPC至少要跨两个可用区创建多个子网,根据Internet可访问性,划分子网为公有子网和私有子网(tips:分配给私有子网的ip地址需要远远多于分配给公有子网的ip地址,因为大多数计算资源都是在私有子网里进行的)。
2.3 设置路由表
路由表 (Route tables) 包含一系列规则,确定VPC的网络流量导向何处。每个VPC有一个主 (默认)路由表,也可以创建自定义路由表,所有子网都必须有一个关联的路由表。
如下图,是默认本地路由,其target指向的是local。需要注意的是,默认本地路由是不可修改的,也就是说不管怎么设置,VPC内所有子网都是可通的。所以子网之间不可做隔离 (VPC之间是可以隔离的)。
官方实践建议:
为了提高安全性,建议给每个子网使用自定义的路由表。
2.4 Internet网关
Internet网关是一种横向扩展、支持冗余且高度可用的VPC组件;实现了VPC中的实例与Internet之间的通信 (即与外网联通);并在VPC路由表中为导向Internet的流量提供目标。
注意:刚创建完的Internet网关状态是detached的,需要附加到某个VPC才可变成attached。
创建完网关之后,就需要修改路由表,如下图,意味着所有非VPC本地流量的网络流量全部发送给Internet。
当一个子网附加了如上图发送给Internet的路由表时,这个子网就变成了公有子网 (public subnet)。
2.5 NAT网关
有些子网是需要被Internet访问的 (公有子网),而更多的资源 (如数据库等)是不希望被Internet访问到的。这时候就需要NAT网关使私有子网中的实例连接到Internet或其它aws服务,同时也能阻止Internet发起与这些实例的连接,如下图。
2.6 安全组
安全组是VPC里的虚拟防火墙,可控制到aws资源的入站和出战流量,流量可由任何IP协议、端口或IP地址重定向。
以下是安全组示例1,以下展示了安全组的入站规则,所有网络请求仅可访问该服务的80端口。
以下是安全组示例2,以下展示了后段服务器的安全组示例,仅允许前端访问,所以定义了仅允许来自web层服务器安全组的ID对2345端口的自定义应用请求,所以仅web层服务才可访问该后端服务。
2.7 网络访问控制列表ACL
ACL是位于子网边界的防火墙,默认情况下允许所有入站和出站流量,可以针对入站和出站流量设置明确规则。一般当服务器受到某个ip地址的攻击,就可以显性拒绝该ip地址的访问。
如下图,VPC为实例提供了多层安全防护。
3. 实践流程
总结一下创建VPC的基本流程:
step 1. 创建VPC,设置CIDR,注意不要与其它VPC重叠
step 2. 创建子网,可以设置为公有子网和私有子网(创建好之后都是私有子网)
step 3. 创建Internet网关,并attach到VPC
step 4. 创建路由表 (公有路由表)
step 5. 将路由表关联到子网 (公有)
至此,公有子网变成了名副其实的公有子网。
step 6. 创建NAT网关
step 7. 创建路由表,关联至NAT (私有路由表)
step 8. 将路由表关联到子网 (私有,如step 5)