在第一章我们提到,Transit Gateway
将将网状的结构变成星型结构,大大简化了组网的复杂度(注意VPC的CIDR不能有重叠):
本节我们将基于Transit Gateway
将三个VPC打通,三个VPC的网段分别为10.0.0.0/16
, 10.1.0.0/16
, 10.2.0.0/16
:
当新的VPC连接到TGW上时,TGW会自动把它的CIDR加到自己的路由表(TGW route table
)上,所以每个attachment能将数据包发送到其他两个attachment:
Destination | Target | Route type |
---|---|---|
VPC A CIDR |
Attachment for VPC A |
propagated |
VPC B CIDR |
Attachment for VPC B |
propagated |
VPC C CIDR |
Attachment for VPC C |
propagated |
在配置完Transit Gateway attachment
后,为每个VPC配置路由表,它们之间便可以互相访问:
例如,此时如果VPC A
想访问VPC C
,在走到TGW的路由表后,发现10.2.0.0/16
要转到att-c
,于是tgw可以将流量送到VPC C
创建三个VPC,它们网段分别为10.0.0.0/16
, 10.1.0.0/16
, 10.2.0.0/16
,分别命名为project1-vpc
,project2-vpc
,project3-vpc
保证每个VPC至少有一个公网,然后在每个VPC里分别创建一台EC2,命名为instance-1
, instance-2
, instance-3
。
将这三个EC2的安全组放开ICMP协议对10.0.0.0/8
网段的访问,这样它们之间具有互相ping的能力。
但是目前由于网络不通,它们之间还无法进行通讯。待实验完成后,它们之间可以互相ping通
进入VPC页面,在Transit Gateway
页面创建一个新的tgw:
输入tgw的名称和描述,其他选项保持默认,然后点击创建:
创建后,要等一分钟状态变为avaliable
。
上一节我们创建好了一个tgw,还需要往上面绑定三个VPC。
在Transit gateway attachment
页面进行添加:
选择上一节创建的tgw,这里选择VPC类型的Attachment
:
选择一开始创建的project1-vpc
及其子网:
当我们把VPC attach到tgw时,必须指定这个tgw使用一个或多个AZ;在每个az,要指定一个且最多一个子网。然后TGW会在这个子网里创建一个ENI(占用这个子网一个IP)。
只要指定了一个AZ,流量能被路由到该az的所有子网——不仅仅只是这个AZ
如果没有指定某个AZ,那么这个AZ就访问不到TGW
点击Create transit gateway attachement
重复上面步骤两次,为project2-vpc
和project3-vpc
添加Attachment。
将三个VPC绑定到tgw上后,此时它们之间还是不能互相访问,这是因为它们的路由表上还需要添加路由:
分别为三个VPC的子网上添加一条10.0.0.0/8
到tgw的路由
登录到project2-vpc
上的EC2,此时它可以访问到其他两个VPC的EC2:
查看Transit gateway
的路由表,发现只有一个路由表,这个路由表被三个attachment共用:
下一节我们将介绍基于Transit Gateway
的路由表来控制VPC之间是否能互相访问