4. 创建第一个 Transit Gateway

Transit Gateway(以下简称 TGW)是区域级资源,创建动作本身并不复杂,真正容易踩坑的是三个地方:创建时是否自动生成默认路由表、默认路由表在后续挂载中扮演什么角色,以及标签与命名是否从一开始就具备可扩展性。本节以“为一家公司搭建第一个 TGW,用于连接 3 个 VPC 和 1 条 VPN”为例,把控制台与 CLI 两条路径都走一遍,并解释默认路由表的行为边界。

一、创建前需要先确定的参数

TGW 创建时只有少量必填项,但每一项都会影响后续运维。建议在动手前先明确下表内容。示例中的参数属于教学假设,实际使用时请替换为你的真实网段与命名。

参数示例值说明
名称标签 Nametgw-prod-cn-north-1区域 + 环境 + 资源类型
描述 DescriptionProd core TGW for 3 VPCs + 1 VPN写清用途,便于审计
Amazon ASN64512BGP 使用,VPN 对端不能与之冲突
默认路由表关联启用新挂载默认关联到默认路由表
默认路由表传播启用新挂载默认向默认路由表传播路由
DNS 支持启用跨 VPC 解析私有域名
VPN ECMP 支持启用多隧道负载均衡
多播支持关闭本场景不需要

其中“默认路由表关联”和“默认路由表传播”是本节的核心。它们决定 TGW 创建后是否自动生成一张默认路由表,以及后续挂载是否自动接入这张表。

二、控制台创建步骤

  1. 进入 VPC 控制台,左侧选择 Transit Gateway,点击 Create transit gateway。
  2. 在 Name tag 填入 tgw-prod-cn-north-1,Description 填入用途说明。
  3. Amazon side ASN 保持 64512。若你已有使用该 ASN 的 VPN 或 Direct Connect,需要改成其他私有 ASN(64512–65534 或 4200000000–4294967294)。
  4. 展开 Default route table association 与 Default route table propagation,两者都勾选 Enable。这一步会决定 TGW 是否自带一张默认路由表。
  5. 按需勾选 DNS support、VPN ECMP support,多播保持关闭。
  6. 点击 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 才会作为路由条目出现在默认路由表中。
  • 可被替换但不可删除:默认路由表可以被重命名、被其他路由表替代关联,但不能删除。若关闭默认关联/传播,它仍会保留,只是不再自动接收新挂载。
关闭默认路由表关联与传播后,新建的 VPC 挂载不会自动进入任何路由表,必须显式执行 associate-transit-gateway-route-table 和 enable-transit-gateway-route-table-propagation,否则跨 VPC 流量会被丢弃。

五、标签与命名规范

TGW 是长期存在的核心网络资源,命名和标签应在第一个 TGW 创建时就固定下来。推荐采用“资源类型-环境-区域”的 Name 格式,并用标签承载环境、负责人、成本中心等维度。示例规范如下:

标签键示例值用途
Nametgw-prod-cn-north-1控制台可读名称
Environmentprod / staging / dev环境隔离与筛选
Ownernetwork-team责任归属
CostCentercc-1024成本分摊
ManagedByterraform / manual区分 IaC 与手工创建

命名时避免使用 tgw1、test 这类无信息量的名称;区域代码建议与 AWS 区域一致(如 cn-north-1、us-east-1),这样在多区域组网时可以直接从名称判断归属。标签一旦确定,后续挂载、路由表、VPN 连接都应沿用同一套键,便于用标签筛选器统一查询。

六、创建后的验证清单

创建完成后,建议按以下顺序确认结果,避免把问题带到挂载阶段:

  1. TGW 状态为 available,ASN 与规划一致。
  2. 默认路由表存在,且 DefaultAssociationRouteTable 与 DefaultPropagationRouteTable 均为 true。
  3. Name 标签与命名规范一致,Environment、Owner 等标签已写入。
  4. DNS support 与 VPN ECMP support 状态符合预期。
创建第一个 Transit Gateway:参数 → 默认路由表 → 挂载行为 创建输入(控制台 / CLI) Name: tgw-prod-cn-north-1 Amazon ASN: 64512 DNS / VPN ECMP: enable 默认关联: enable 默认传播: enable Tags: Env / Owner / CostCenter 创建 Transit Gateway tgw-0a1b2c3d4e5f6a7b8 State: available ASN: 64512 Region: cn-north-1 生成 默认路由表 default DefaultAssociation: true DefaultPropagation: true 初始路由条目:空 不可删除,可重命名 仅影响新挂载 后续挂载行为(默认关联 / 传播开启时) VPC-A 挂载 自动关联 + 传播 VPC-B 挂载 自动关联 + 传播 VPC-C 挂载 自动关联 + 传播 VPN 挂载 自动关联 + 传播 CIDR 自动进入默认路由表

完成以上步骤后,你就拥有了第一个可用的 TGW。下一步才是把 VPC 挂载上去,并观察默认路由表如何随挂载自动填充路由条目。只要默认关联与传播保持开启,挂载动作本身就会完成路由接入;一旦关闭,就必须为每个挂载单独指定路由表,这也是后续多路由表隔离设计的起点。