VPC是网络隔离的专有网络,优势是与其他租户的网络完全隔离,可自定义网段,也是混合云网络互通的必选方案。对于专有网络出入网是最重要的,出网是指VPC内访问外网(SNAT),多用于抓取类业务;入网是指VPC内的应用对外提供服务(DNAT)。本文将详细讲解典型搭建一个有出入网能力的VPC网络的两种方案以及优劣势,并且提供利用Terraform编写模板实现自动化搭建的方法。
一、简单的EIP:这是非常简单也很容易理解的方法,为VPC内的ECS绑定EIP(弹性IP),此时ECS就具备了出入网的能力,限制是一个EIP只能绑定到一台ECS上。一般用于系统简单、ECS数量较少的场景。架构图及资源定义如下:
二、NAT网关:这种方案比较复杂,也有多个实现途径,比如出网可以使用自定义路由自建SNAT网关,也可以使用NAT网关服务自带的SNAT功能。对于入网可以使用SLB提供访问VPC内应用服务的能力,也可以使用NAT网关服务自带的端口转发的能力。NAT网关服务提供了共享带宽包的功能,多个IP可共享同一个带宽,当不同业务间带宽错峰效应明显时,使用NAT网关共享带宽包节省带宽成本,使得资源最大化利用。几种NAT网关的架构图及资源定义如下:
2.1 使用NAT网关及自带的SNAT和DNAT,适用于中小型应用,有外网访问需求,需要使用多个公网IP对外提供服务。
2.2 使用NAT网关自带的SNAT提供出网,使用SLB提供入网能力,适用于中大型应用,公网访问流量较大的场景。
2.3 使用自建的NAT网关提供出网,使用SLB提供入网能力,适用于希望自建NAT网关的场景。
下面将以 2.1 NAT网关自带的SNAT和DNAT功能详细介绍利用Terraform实现搭建VPC网络的模板编写。其他资源的详细参数及模板编写可参见官方的examples,这里包含了大量的模板。
- Terraform的资源定义格式为:resource "资源名" "别名",其中资源名是固定的,别名可以自定义。如
resource "alicloud_vpc" "default" {
name = "tf_test_foo"
cidr_block = "10.1.0.0/21"
}
- 下图可以看到各个资源及关键解释,模板参见这里。
也欢迎各位大咖贡献example示例到官方仓库中。