4. 创建第一个 Transit Gateway
Transit Gateway(以下简称 TGW)是区域级资源,创建动作本身并不复杂,真正容易踩坑的是三个地方:创建时是否自动生成默认路由表、默认路由表在后续挂载中扮演什么角色,以及标签与命名是否从一开始就具备可扩展性。本节以“为一家公司搭建第一个 TGW,用于连接 3 个 VPC 和 1 条 VPN”为例,把控制台与 CLI 两条路径都走一遍,并解释默认路由表的行为边界。
一、创建前需要先确定的参数
TGW 创建时只有少量必填项,但每一项都会影响后续运维。建议在动手前先明确下表内容。示例中的参数属于教学假设,实际使用时请替换为你的真实网段与命名。
| 参数 | 示例值 | 说明 |
|---|---|---|
| 名称标签 Name | tgw-prod-cn-north-1 | 区域 + 环境 + 资源类型 |
| 描述 Description | Prod core TGW for 3 VPCs + 1 VPN | 写清用途,便于审计 |
| Amazon ASN | 64512 | BGP 使用,VPN 对端不能与之冲突 |
| 默认路由表关联 | 启用 | 新挂载默认关联到默认路由表 |
| 默认路由表传播 | 启用 | 新挂载默认向默认路由表传播路由 |
| DNS 支持 | 启用 | 跨 VPC 解析私有域名 |
| VPN ECMP 支持 | 启用 | 多隧道负载均衡 |
| 多播支持 | 关闭 | 本场景不需要 |
其中“默认路由表关联”和“默认路由表传播”是本节的核心。它们决定 TGW 创建后是否自动生成一张默认路由表,以及后续挂载是否自动接入这张表。
二、控制台创建步骤
- 进入 VPC 控制台,左侧选择 Transit Gateway,点击 Create transit gateway。
- 在 Name tag 填入
tgw-prod-cn-north-1,Description 填入用途说明。 - Amazon side ASN 保持
64512。若你已有使用该 ASN 的 VPN 或 Direct Connect,需要改成其他私有 ASN(64512–65534 或 4200000000–4294967294)。 - 展开 Default route table association 与 Default route table propagation,两者都勾选 Enable。这一步会决定 TGW 是否自带一张默认路由表。
- 按需勾选 DNS support、VPN ECMP support,多播保持关闭。
- 点击 Create transit gateway。状态从
pending变为available通常需要 1–3 分钟。
创建完成后,在 TGW 详情页的 Route tables 标签下会看到一张名为 default 的路由表,其 Default association route table 与 Default propagation route table 均显示为 Yes。这就是“默认路由表行为”的直接体现。
三、CLI 创建步骤
CLI 创建与控制台等价,只是把参数显式写出。以下命令可直接复制执行,注意替换区域与标签值。
aws ec2 create-transit-gateway \
--description "Prod core TGW for 3 VPCs + 1 VPN" \
--options AmazonSideAsn=64512,\
DefaultRouteTableAssociation=enable,\
DefaultRouteTablePropagation=enable,\
DnsSupport=enable,\
VpnEcmpSupport=enable,\
MulticastSupport=disable \
--tag-specifications 'ResourceType=transit-gateway,Tags=[
{Key=Name,Value=tgw-prod-cn-north-1},
{Key=Environment,Value=prod},
{Key=Owner,Value=network-team}]' \
--region cn-north-1
返回结果中会包含 TransitGatewayId(形如 tgw-0a1b2c3d4e5f6a7b8)和 State。随后用以下命令确认默认路由表是否生成:
aws ec2 describe-transit-gateway-route-tables \
--filters Name=transit-gateway-id,Values=tgw-0a1b2c3d4e5f6a7b8 \
--region cn-north-1
若输出中存在 "DefaultAssociationRouteTable": true 与 "DefaultPropagationRouteTable": true 的路由表,说明默认路由表已按预期创建。若两者均为 false,则 TGW 不会自动生成默认路由表,后续每个挂载都必须手动关联和传播。
四、默认路由表行为的关键边界
默认路由表不是“万能路由表”,它的行为有三个明确边界,理解它们可以避免后续排障时误判。
- 只影响新挂载:默认关联/传播设置只在挂载创建时生效。若某个 VPC 挂载时选择了自定义路由表,它不会因为默认路由表存在而被自动纳入。
- 不自动产生路由条目:默认路由表本身是空的。只有当挂载启用了传播,VPC 的 CIDR 才会作为路由条目出现在默认路由表中。
- 可被替换但不可删除:默认路由表可以被重命名、被其他路由表替代关联,但不能删除。若关闭默认关联/传播,它仍会保留,只是不再自动接收新挂载。
associate-transit-gateway-route-table 和 enable-transit-gateway-route-table-propagation,否则跨 VPC 流量会被丢弃。
五、标签与命名规范
TGW 是长期存在的核心网络资源,命名和标签应在第一个 TGW 创建时就固定下来。推荐采用“资源类型-环境-区域”的 Name 格式,并用标签承载环境、负责人、成本中心等维度。示例规范如下:
| 标签键 | 示例值 | 用途 |
|---|---|---|
| Name | tgw-prod-cn-north-1 | 控制台可读名称 |
| Environment | prod / staging / dev | 环境隔离与筛选 |
| Owner | network-team | 责任归属 |
| CostCenter | cc-1024 | 成本分摊 |
| ManagedBy | terraform / manual | 区分 IaC 与手工创建 |
命名时避免使用 tgw1、test 这类无信息量的名称;区域代码建议与 AWS 区域一致(如 cn-north-1、us-east-1),这样在多区域组网时可以直接从名称判断归属。标签一旦确定,后续挂载、路由表、VPN 连接都应沿用同一套键,便于用标签筛选器统一查询。
六、创建后的验证清单
创建完成后,建议按以下顺序确认结果,避免把问题带到挂载阶段:
- TGW 状态为
available,ASN 与规划一致。 - 默认路由表存在,且
DefaultAssociationRouteTable与DefaultPropagationRouteTable均为true。 - Name 标签与命名规范一致,Environment、Owner 等标签已写入。
- DNS support 与 VPN ECMP support 状态符合预期。
完成以上步骤后,你就拥有了第一个可用的 TGW。下一步才是把 VPC 挂载上去,并观察默认路由表如何随挂载自动填充路由条目。只要默认关联与传播保持开启,挂载动作本身就会完成路由接入;一旦关闭,就必须为每个挂载单独指定路由表,这也是后续多路由表隔离设计的起点。