引言:理解路由策略在云网络中的核心作用

在阿里云的云原生网络环境中,路由策略是实现网络流量智能调度的核心机制。无论是小型应用还是大型企业级架构,合理的路由配置都能显著提升网络性能、可靠性和安全性。路由策略本质上决定了数据包在网络中的传输路径,它像交通指挥系统一样,引导流量避开拥堵、选择最优路径,并在故障时自动切换。

阿里云的路由策略主要应用于专有网络(VPC)、云企业网(CEN)和VPN网关等场景。通过路由策略,您可以实现:

  • 流量分流:将不同业务流量导向不同后端服务
  • 故障转移:在链路异常时自动切换到备用路径
  • 成本优化:根据带宽成本选择传输路径
  • 安全隔离:通过路由控制实现网络分区

本文将从基础配置入手,逐步深入到高级应用场景,并通过完整的代码示例和配置步骤,帮助您全面掌握阿里云路由策略的设置方法。

一、基础配置:VPC路由表管理

1.1 路由表的基本概念

VPC(专有网络)是阿里云网络的基础单元,每个VPC都有一个默认路由表。路由表包含多条路由条目,每条路由条目由目标网段(Destination)、下一跳类型(NextHopType)和下一跳实例(NextHopId)组成。

路由条目示例:

  • 目标网段:192.168.1.0/24
  • 下一跳类型:ECS实例
  • 下一跳实例:i-2ze4567890abcdef

1.2 创建自定义路由表

在阿里云控制台创建自定义路由表的步骤:

  1. 登录阿里云VPC控制台
  2. 在左侧导航栏选择路由表
  3. 点击创建路由表按钮
  4. 配置参数:
    • 名称:自定义(如rt-app-server)
    • VPC:选择目标VPC
    • 描述:可选描述信息

通过阿里云CLI创建路由表:

# 安装并配置阿里云CLI(aliyuncli)
# 首先需要配置AccessKey和地域

# 创建路由表
aliyuncli vpc CreateRouteTable \
  --VpcId vpc-2ze4567890abcdef \
  --RouteTableName rt-app-server \
  --Description "应用服务器路由表"

# 输出示例:
{
  "RouteTableId": "rtb-2ze4567890abcdef"
}

1.3 添加路由条目

路由条目是路由策略的核心。添加路由条目时需要明确目标网段和下一跳。

控制台操作:

  1. 进入目标路由表详情页
  2. 点击添加路由条目按钮
  3. 配置:
    • 目标网段:10.0.1.0/24
    • 下一跳类型:ECS实例
    • 下一跳:选择具体ECS实例

通过API添加路由条目:

# 使用阿里云Python SDK(aliyun-python-sdk-vpc)
from aliyunsdkcore.client import AcsClient
from aliyunsdkvpc.request.v20160428 import CreateRouteEntryRequest

client = AcsClient('<access_key_id>', '<access_key_secret>', 'cn-hangzhou')

request = CreateRouteEntryRequest()
request.set_RouteTableId("rtb-2ze4567890abcdef")
request.set_DestinationCidrBlock("10.0.1.0/24")
request.set_NextHopType("Instance")
request.set_NextHopId("i-2ze4567890abcdef")

response = client.do_action_with_exception(request)
print(response)

1.4 路由条目类型详解

阿里云支持多种下一跳类型,每种类型对应不同的网络场景:

下一跳类型 适用场景 配置要点
ECS实例 云服务器间通信 需确保ECS与路由表在同一VPC
VPN网关 混合云连接 需提前创建VPN连接
专线网关 物理专线接入 需配置专线网关
ENI弹性网卡 多网卡实例 需绑定弹性网卡
黑洞 丢弃流量 用于安全隔离
本地网关 本地数据中心 用于混合云

二、路由策略的高级配置

2.1 自定义路由策略

自定义路由策略允许您基于源IP、目的IP、协议端口等条件进行精细化流量控制。这在多业务线场景下非常有用。

场景示例:某公司有Web服务和数据库服务,希望将Web流量通过负载均衡器转发,数据库流量直接路由到数据库服务器。

配置步骤:

  1. 创建自定义路由策略
# 创建自定义路由策略
aliyuncli vpc CreateCustomRouteEntry \
  --RouteTableId rtb-2ze4567890abcdef \
  --DestinationCidrBlock 10.0.2.0/24 \
  --RouteEntryName "web-traffic" \
  --Description "Web流量路由"
  1. 添加策略条件
# 使用策略引擎添加条件
from aliyunsdkvpc.request.v20160428 import AssociateRouteTableRequest

request = AssociateRouteTableRequest()
request.set_RouteTableId("rtb-2ze4567890abcdef")
request.set_VSwitchId("vsw-2ze4567890abcdef")
request.set_RouteEntryId("rte-2ze4567890abcdef")

# 设置策略条件(源IP、目的IP、协议端口)
request.set_SourceCidrBlock("192.168.1.0/24")
request.set_DestinationCidrBlock("10.0.2.0/24")
request.set_Protocol("TCP")
request.set_SourcePortRange("80,443")

response = client.do_action_with_exception(request)

2.2 路由策略优先级管理

路由策略优先级决定了策略的执行顺序。优先级数值越小,优先级越高(0为最高优先级)。

优先级规则:

  • 相同优先级的策略,按创建时间顺序执行
  • 不同优先级的策略,按数值从小到大执行
  • 建议为关键业务设置更高优先级(更小的数值)

配置示例:

# 创建高优先级路由策略(用于关键业务)
aliyuncli vpc CreateCustomRouteEntry \
  --RouteTableId rtb-2ze4567890abcdef \
  --DestinationCidrBlock 10.0.3.0/24 \
  --Priority 10 \
  --RouteEntryName "critical-business" \
  --Description "关键业务路由,优先级10"

# 创建普通优先级路由策略
aliyuncli vpc CreateCustomRouteEntry \
  --RouteTableId rtb-2ze4567890abcdef \
  --DestinationCidrBlock 10.0.4.0/24 \
  --Priority 100 \
  --RouteEntryName "normal-business" \
  --Description "普通业务路由,优先级100"

2.3 路由策略的条件匹配

阿里云路由策略支持多种条件匹配规则,包括:

  • 源IP地址:基于源IP段进行路由决策
  • 目的IP地址:基于目的IP段进行路由决策
  1. 协议类型:TCP、UDP、ICMP等
  • 端口范围:支持单个端口、端口范围、端口列表

复杂条件匹配示例:

# 创建支持多条件的路由策略
request = CreateRouteEntryRequest()
request.set_RouteTableId("rtb-2ze4567890abcdef")
request.set_DestinationCidrBlock("10.0.5.0/24")
request.set_NextHopType("Instance")
request.set_NextHopId("i-2ze4567890abcdef")

# 设置多条件匹配
conditions = [
    {
        "Type": "SourceCidrBlock",
        "Value": "192.168.1.0/24"
    },
    {
        "Type": "Protocol",
        "Value": "TCP"
    },
    {
        "Type": "DestinationPortRange",
        "Value": "8080-8090"
    }
]

# 将条件转换为JSON字符串
import json
request.set_Conditions(json.dumps(conditions))

response = client.do_action_with_exception(request)

2.4 路由策略的监控与日志

监控路由策略的执行情况对于排查问题和优化配置至关重要。

启用流量日志:

# 创建流量日志(Flow Log)
aliyuncli vpc CreateFlowLog \
  --FlowLogName route-monitor \
  --VpcId vpc-2ze4567890abcdef \
  --TrafficType "All" \
  --LogStoreType "SLS" \
  --ProjectName "your-sls-project" \
  --LogStoreName "route-logs"

查询路由策略命中情况:

# 使用阿里云监控API查询路由策略命中次数
from aliyunsdkcms.request.v20190101 import QueryMetricListRequest

request = QueryMetricListRequest()
request.set_MetricName("RouteEntryHitCount")
request.set_Period("60")
request.set_StartTime("2024-01-01 00:00:00")
request.set_EndTime("2024-01-01 23:59:59")
request.set_Dimensions([{"RouteTableId": "rtb-2ze4567890abcdef"}])

response = client.do_action_with_exception(request)
print(response)

三、云企业网(CEN)路由策略

3.1 CEN路由基础

云企业网(Cloud Enterprise Network)是阿里云的全球网络连接服务,支持跨VPC、跨地域的网络互联。CEN的路由策略比VPC更复杂,需要处理多地域、多VPC的路由传播和学习。

CEN路由核心概念:

  • 路由传播:VPC路由自动发布到CEN
  • 路由学习:CEN路由自动学习其他VPC的路由
  • 路由过滤:控制哪些路由可以被传播或学习

3.2 配置CEN路由传播

场景:将VPC中的特定网段通过CEN传播到其他地域的VPC。

控制台配置:

  1. 进入CEN实例详情页
  2. 选择路由信息标签
  3. 点击路由传播配置
  4. 选择要传播的VPC和网段

通过CLI配置:

# 创建CEN实例
aliyuncli cen CreateCen \
  --CenName "global-network" \
  --Description "跨地域网络连接"

# 绑定VPC到CEN
aliyuncli cen AttachCenInstance \
  --CenId cen-2ze4567890abcdef \
  --ChildInstanceId vpc-2ze4567890abcdef \
  --ChildInstanceType VPC \
  --ChildInstanceRegionId cn-hangzhou

# 配置路由传播
aliyuncli cen PublishRouteEntries \
  --CenId cen-2ze4567890abcdef \
  --ChildInstanceId vpc-2ze4567890abcdef \
  --ChildInstanceType VPC \
  --ChildInstanceRegionId cn-hangzhou \
  --RouteEntries "10.0.1.0/24,10.0.2.0/24"

3.3 CEN路由过滤策略

路由过滤用于控制CEN中路由的传播范围,防止不必要的路由泄露。

配置路由过滤:

# 创建路由过滤策略
from aliyunsdkcen.request.v20170912 import CreateCenRouteFilterRequest

request = CreateCenRouteFilterRequest()
request.set_CenId("cen-2ze4567890abcdef")
request.set_FilterName("production-filter")
request.set_FilterType("Publish")
request.set_RouteTypes("Custom")
request.set_AffixCidr("10.0.0.0/8")

# 设置过滤规则
filter_rules = [
    {
        "Action": "Permit",
        "DestinationCidrBlock": "10.0.1.0/24"
    },
    {
        "Action": "Deny",
        "DestinationCidrBlock": "10.0.2.0/24"
    }
]

request.set_RouteFilterRules(filter_rules)

response = client.do_action_with_exception(request)

3.4 CEN跨地域路由优化

场景:跨国企业需要在不同地域的VPC间实现低延迟通信。

优化策略:

  1. 使用云企业网加速:启用全球加速功能
  2. 配置智能路由:基于延迟选择最优路径
  3. 设置备份路径:主路径故障时自动切换

配置示例:

# 启用CEN全球加速
aliyuncli cen AssociateCenGeographicSpan \
  --CenId cen-2ze4567890abcdef \
  --GeographicRegionAId "china" \
  --GeographicRegionBId "asia-pacific"

# 配置智能路由(需要企业版CEN)
aliyuncli cen CreateCenRouteService \
  --CenId cen-2ze4567890abcdef \
  --RouteServiceId "route-service-001" \
  --RouteServiceType "IntelligentRouting" \
  --RouteServiceConfig '{"algorithm":"latency-based"}'

四、VPN网关路由策略

4.1 VPN网关路由基础

VPN网关用于连接VPC和本地数据中心(IDC)。VPN网关路由决定了从VPC到IDC的流量如何转发。

VPN网关路由类型:

  • 静态路由:手动配置的路由条目
  • 动态路由:通过BGP协议自动学习路由

4.2 配置静态路由

场景:VPC(10.0.0.0/16)需要访问IDC的特定网段(192.168.1.0/24)。

配置步骤:

  1. 创建VPN网关
# 创建VPN网关
aliyuncli vpc CreateVpnGateway \
  --VpcId vpc-2ze4567890abcdef \
  --VpnGatewayName "idc-gateway" \
  --VpnType "Normal" \
  --VpcSubnet "10.0.1.0/24" \
  --Bandwidth 10
  1. 添加静态路由
# 添加VPN网关静态路由
from aliyunsdkvpc.request.v20160428 import CreateVpnRouteEntryRequest

request = CreateVpnRouteEntryRequest()
request.set_VpnGatewayId("vpn-2ze4567890abcdef")
request.set_RouteDest("192.168.1.0/24")
request.set_NextHop("vco-2ze4567890abcdef")
request.set_Weight(10)
request.set_RouteEntryName("idc-route")

response = client.do_action_with_exception(request)
  1. 验证路由配置
# 查询VPN网关路由表
aliyuncli vpc DescribeVpnRouteEntries \
  --VpnGatewayId vpn-2ze4567890abcdef

# 输出示例:
{
  "RouteEntries": [
    {
      "RouteDest": "192.168.1.0/24",
      "NextHop": "vco-2ze4567890abcdef",
      "Weight": 10,
      "RouteEntryName": "idc-route",
      "State": "Available"
    }
  ]
}

4.3 动态路由(BGP)配置

动态路由通过BGP协议自动学习IDC的路由,适合IDC网段频繁变化的场景。

配置BGP参数:

# 配置VPN连接的BGP参数
aliyuncli vpc ModifyVpnConnectionAttribute \
  --VpnConnectionId vco-2ze4567890abcdef \
  --LocalSubnet "10.0.0.0/16" \
  --RemoteSubnet "192.168.0.0/16" \
  --EnableBgp True \
  --BgpConfig '{"LocalAsn":65001,"LocalBgpIp":"10.0.1.2","RemoteBgpIp":"192.168.1.1"}'

查看BGP路由:

# 查询BGP路由信息
aliyuncli vpc DescribeBgpGroups \
  --VpnConnectionId vco-2ze4567890abcdef

# 查询BGP对等体
aliyuncli vpc DescribeBgpPeers \
  --VpnConnectionId vco-2ze4567890abcdef

4.4 VPN网关路由健康检查

配置健康检查确保VPN链路的可靠性。

# 配置VPN网关健康检查
from aliyunsdkvpc.request.v20160428 import CreateHealthCheckRequest

request = CreateHealthCheckRequest()
request.set_VpnGatewayId("vpn-2ze4567890abcdef")
request.set_HealthCheckSourceIp("10.0.1.2")
request.set_HealthCheckTargetIp("192.168.1.1")
request.set_HealthCheckInterval(10)
request.set_HealthCheckThreshold(3)

response = client.do_action_with_exception(request)

五、专线网关路由策略

5.1 专线网关路由基础

专线网关用于连接VPC和本地数据中心(物理专线)。专线网关路由支持静态路由和BGP动态路由。

专线网关路由特点:

  • 高带宽:支持1Gbps-100Gbps
  • 低延迟:物理专线延迟通常<1ms
  • 高可靠性:支持双链路冗余

5.2 配置静态路由

场景:通过物理专线连接VPC和IDC,IDC网段为192.168.0.0/16。

配置步骤:

  1. 创建专线网关
# 创建专线网关
aliyuncli vpc CreateDirectConnectGateway \
  --VpcId vpc-2ze4567890abcdef \
  --DirectConnectGatewayName "idc-专线网关" \
  --Spec "Large" \
  --Type "VPC"
  1. 添加静态路由
# 添加专线网关静态路由
from aliyunsdkvpc.request.v20160428 import CreateDirectConnectGatewayRouteEntryRequest

request = CreateDirectConnectGatewayRouteEntryRequest()
request.set_DirectConnectGatewayId("dcg-2ze4567890abcdef")
request.set_DestinationCidrBlock("192.168.0.0/16")
request.set_NextHopType("Instance")
request.set_NextHopId("dc-2ze4567890abcdef")
request.set_Weight(100)

response = client.do_action_with_exception(request)

5.3 BGP动态路由配置

配置BGP对等体:

# 创建BGP对等体
aliyuncli vpc CreateBgpPeer \
  --DirectConnectGatewayId dcg-2ze4567890abcdef \
  --BgpPeerName "idc-bgp" \
  --PeerAsn 65000 \
  --LocalAsn 65001 \
  --AuthKey "your-auth-key" \
  --BgpIp "10.0.1.2"

查看BGP路由:

# 查询BGP路由表
aliyuncli vpc DescribeBgpGroups \
  --DirectConnectGatewayId dcg-2ze4567890abcdef

5.4 专线网关路由冗余配置

场景:配置双专线实现高可用。

配置步骤:

  1. 创建两个专线网关(主备)
  2. 配置不同的权重
  3. 设置健康检查
# 配置主备路由(不同权重)
# 主路由(权重100)
request1 = CreateDirectConnectGatewayRouteEntryRequest()
request1.set_DirectConnectGatewayId("dcg-primary")
request1.set_DestinationCidrBlock("192.168.0.0/16")
request1.set_NextHopType("Instance")
request1.set_NextHopId("dc-primary")
request1.set_Weight(100)

# 备路由(权重10)
request2 = CreateDirectConnectGatewayRouteEntryRequest()
request2.set_DirectConnectGatewayId("dcg-backup")
request2.set_DestinationCidrBlock("192.168.0.0/16")
request2.set_NextHopType("Instance")
request2.set_NextHopId("dc-backup")
request2.set_Weight(10)

# 执行配置
client.do_action_with_exception(request1)
client.do_action_with_exception(request2)

六、高级应用场景详解

6.1 场景一:多业务线流量隔离

需求:某公司有Web、App、DB三个业务线,需要实现网络隔离,同时保证必要的通信。

解决方案:使用自定义路由表和路由策略实现流量隔离。

架构设计:

  • Web业务使用路由表rt-web(允许访问App)
  • App业务使用路由表rt-app(允许访问DB)
  • DB业务使用路由表rt-db(仅允许App访问)

配置代码:

# 1. 创建三个路由表
route_tables = {
    "rt-web": "Web业务路由表",
    "rt-app": "App业务路由表", 
    "rt-db": "DB业务路由表"
}

for name, desc in route_tables.items():
    request = CreateRouteTableRequest()
    request.set_VpcId("vpc-2ze4567890abcdef")
    request.set_RouteTableName(name)
    request.set_Description(desc)
    client.do_action_with_exception(request)

# 2. 配置rt-web路由表(允许访问App网段)
request = CreateRouteEntryRequest()
request.set_RouteTableId("rtb-web")
request.set_DestinationCidrBlock("10.0.2.0/24")  # App网段
request.set_NextHopType("Instance")
request.set_NextHopId("lb-app")  # App负载均衡
client.do_action_with_exception(request)

# 3. 配置rt-app路由表(允许访问DB网段)
request = CreateRouteEntryRequest()
request.set_RouteTableId("rtb-app")
request.set_DestinationCidrBlock("10.0.3.0/24")  # DB网段
request.set_NextHopType("Instance")
request.set_NextHopId("lb-db")  # DB负载均衡
client.do_action_with_exception(request)

# 4. 配置rt-db路由表(仅允许App访问)
# 通过安全组实现精细化控制,路由表仅配置默认路由
request = CreateRouteEntryRequest()
request.set_RouteTableId("rtb-db")
request.set_DestinationCidrBlock("0.0.0.0/0")  # 默认路由
request.set_NextHopType("Instance")
request.set_NextHopId("nat-gateway")  # NAT网关用于出网
client.do_action_with_exception(request)

6.2 场景二:混合云故障转移

需求:本地数据中心(IDC)与阿里云VPC通过专线连接,当专线故障时,自动切换到VPN备份链路。

解决方案:配置不同权重的路由,结合健康检查实现自动切换。

架构设计:

  • 主链路:专线(权重100)
  • 备链路:VPN(权重10)
  • 健康检查:检测IDC可达性

配置代码:

# 1. 配置主路由(专线)
request1 = CreateDirectConnectGatewayRouteEntryRequest()
request1.set_DirectConnectGatewayId("dcg-primary")
request1.set_DestinationCidrBlock("192.168.0.0/16")
request1.set_NextHopType("Instance")
request1.set_NextHopId("dc-primary")
request1.set_Weight(100)
client.do_action_with_exception(request1)

# 2. 配置备路由(VPN)
request2 = CreateVpnRouteEntryRequest()
request2.set_VpnGatewayId("vpn-backup")
request2.set_RouteDest("192.168.0.0/16")
request2.set_NextHop("vco-backup")
request2.set_Weight(10)
client.do_action_with_exception(request2)

# 3. 配置健康检查
health_check = CreateHealthCheckRequest()
health_check.set_VpnGatewayId("vpn-backup")
health_check.set_HealthCheckSourceIp("10.0.1.2")
health_check.set_HealthCheckTargetIp("192.168.1.1")
health_check.set_HealthCheckInterval(5)
health_check.set_HealthCheckThreshold(3)

# 4. 配置告警通知
from aliyunsdkcms.request.v20190101 import PutResourceMetricRuleRequest

alarm_rule = PutResourceMetricRuleRequest()
alarm_rule.set_RuleName("专线故障切换告警")
alarm_rule.set_MetricName("DirectConnectHealthCheck")
alarm_rule.set_Period(60)
alarm_rule.set_EvaluationCount(3)
alarm_rule.set_Threshold(0)
alarm_rule.set_ComparisonOperator("=")
alarm_rule.set_SuppressDuration(60)
alarm_rule.set_AlarmActions('[{"Type":"MNS","Arn":"your-mns-topic"}]')

client.do_action_with_exception(alarm_rule)

6.3 场景三:多地域全球业务部署

需求:跨国业务需要在北美、欧洲、亚太三个地域部署,实现就近访问和全球负载均衡。

解决方案:使用CEN连接多地域VPC,配置智能路由和DNS解析。

架构设计:

  • 北美VPC:10.1.0.0/16
  • 欧洲VPC:10.2.0.0/16
  • 亚太VPC:10.3.0.0/16
  • CEN实例连接三个地域

配置代码:

# 1. 创建CEN实例
cen_request = CreateCenRequest()
cen_request.set_CenName("global-business")
cen_request.set_Description("跨国业务网络")
cen_response = client.do_action_with_exception(cen_request)
cen_id = json.loads(cen_response)["CenId"]

# 2. 绑定三个地域的VPC
vpcs = [
    {"id": "vpc-na", "region": "us-west-1"},
    {"id": "vpc-eu", "region": "eu-west-1"},
    {"id": "vpc-ap", "region": "ap-southeast-1"}
]

for vpc in vpcs:
    attach_request = AttachCenInstanceRequest()
    attach_request.set_CenId(cen_id)
    attach_request.set_ChildInstanceId(vpc["id"])
    attach_request.set_ChildInstanceType("VPC")
    attach_request.set_ChildInstanceRegionId(vpc["region"])
    client.do_action_with_exception(attach_request)

# 3. 配置路由传播(每个VPC传播自己的网段)
for vpc in vpcs:
    publish_request = PublishRouteEntriesRequest()
    publish_request.set_CenId(cen_id)
    publish_request.set_ChildInstanceId(vpc["id"])
    publish_request.set_ChildInstanceType("VPC")
    publish_request.set_ChildInstanceRegionId(vpc["region"])
    # 根据VPC ID确定要传播的网段
    if "na" in vpc["id"]:
        route_entries = "10.1.0.0/16"
    elif "eu" in vpc["id"]:
        route_entries = "10.2.0.0/16"
    else:
        route_entries = "10.3.0.0/16"
    publish_request.set_RouteEntries(route_entries)
    client.do_action_with_exception(publish_request)

# 4. 配置智能路由(基于延迟)
# 注意:智能路由需要企业版CEN
smart_routing = CreateCenRouteServiceRequest()
smart_routing.set_CenId(cen_id)
smart_routing.set_RouteServiceId("smart-routing-001")
smart_routing.set_RouteServiceType("IntelligentRouting")
smart_routing.set_RouteServiceConfig(json.dumps({
    "algorithm": "latency-based",
    "fallback": "cost-based"
}))
client.do_action_with_exception(smart_routing)

6.4 场景四:游戏服务器流量调度

需求:游戏服务器需要根据玩家地理位置调度到最近的服务器节点,同时实现房间隔离。

解决方案:结合路由策略和负载均衡,实现基于地理位置的流量调度。

架构设计:

  • 全球部署多个游戏服务器集群
  • 使用CEN连接所有集群
  • 路由策略根据源IP段调度到最近集群
  • 负载均衡器处理房间级别的流量分发

配置代码:

# 1. 创建路由表(按地域)
regions = ["cn-hangzhou", "ap-southeast-1", "us-west-1"]
route_tables = {}

for region in regions:
    request = CreateRouteTableRequest()
    request.set_VpcId(f"vpc-{region}")
    request.set_RouteTableName(f"rt-game-{region}")
    route_response = client.do_action_with_exception(request)
    route_tables[region] = json.loads(route_response)["RouteTableId"]

# 2. 配置基于源IP的路由策略
# 中国玩家调度到杭州
request = CreateRouteEntryRequest()
request.set_RouteTableId(route_tables["cn-hangzhou"])
request.set_DestinationCidrBlock("0.0.0.0/0")  # 默认路由
request.set_NextHopType("Instance")
request.set_NextHopId("slb-game-cn")
# 设置源IP条件(中国IP段)
request.set_SourceCidrBlock("1.0.0.0/8,2.0.0.0/7, ...")  # 中国IP段
client.do_action_with_exception(request)

# 东南亚玩家调度到新加坡
request = CreateRouteEntryRequest()
request.set_RouteTableId(route_tables["ap-southeast-1"])
request.set_DestinationCidrBlock("0.0.0.0/0")
request.set_NextHopType("Instance")
request.set_NextHopId("slb-game-ap")
request.set_SourceCidrBlock("1.0.0.0/8, ...")  # 东南亚IP段
client.do_action_with_exception(request)

# 3. 配置房间级别的路由(通过ENI实现)
# 每个房间绑定一个弹性网卡,路由指向对应ENI
for room_id in range(100):
    eni_request = CreateNetworkInterfaceRequest()
    eni_request.set_VpcId("vpc-hangzhou")
    eni_request.set_SubnetId("vsw-game")
    eni_request.set_Name(f"room-{room_id}")
    eni_response = client.do_action_with_exception(eni_request)
    eni_id = json.loads(eni_response)["NetworkInterfaceId"]
    
    # 添加房间路由
    room_route = CreateRouteEntryRequest()
    room_route.set_RouteTableId(route_tables["cn-hangzhou"])
    room_route.set_DestinationCidrBlock(f"10.1.{room_id}.0/24")  # 房间网段
    room_route.set_NextHopType("NetworkInterface")
    room_route.set_NextHopId(eni_id)
    client.do_action_with_exception(room_route)

七、路由策略的监控与故障排查

7.1 监控指标

关键监控指标:

  • 路由条目数量:防止路由表溢出
  • 路由命中率:评估路由策略有效性
  • 路由收敛时间:故障切换速度
  • 路由震荡次数:网络稳定性指标

配置监控:

# 创建监控告警规则
from aliyunsdkcms.request.v20190101 import PutResourceMetricRuleRequest

# 监控路由条目数量
rule = PutResourceMetricRuleRequest()
rule.set_RuleName("路由条目超限告警")
rule.set_MetricName("RouteEntryCount")
rule.set_Period(60)
rule.set_EvaluationCount(1)
rule.set_Threshold(50)  # 超过50条告警
rule.set_ComparisonOperator(">")
rule.set_SuppressDuration(300)
rule.set_AlarmActions('[{"Type":"MNS","Arn":"your-mns-topic"}]')
rule.set_ResourceName("rtb-2ze4567890abcdef")

client.do_action_with_exception(rule)

7.2 日志分析

启用VPC流日志:

# 创建流日志
aliyuncli vpc CreateFlowLog \
  --FlowLogName route-analysis \
  --VpcId vpc-2ze4567890abcdef \
  --TrafficType "All" \
  --LogStoreType "SLS" \
  --ProjectName "network-logs" \
  --LogStoreName "route-traffic"

查询路由日志(SLS查询语法):

-- 查询未命中路由的流量
* | where __tag__:__route_hit__ = 'false'
| select src_addr, dst_addr, protocol, count() as total
| order by total desc
| limit 10

-- 查询路由策略命中次数
* | select route_entry_id, count() as hit_count
| group by route_entry_id
| order by hit_count desc

7.3 常见故障排查

问题1:路由不生效

排查步骤:

  1. 检查路由条目状态
aliyuncli vpc DescribeRouteTables \
  --RouteTableId rtb-2ze4567890abcdef
  1. 检查路由条目下一跳实例状态
aliyuncli ecs DescribeInstances \
  --InstanceIds '["i-2ze4567890abcdef"]'
  1. 检查安全组规则
aliyuncli ecs DescribeSecurityGroups \
  --SecurityGroupId sg-2ze4567890abcdef

问题2:路由震荡

解决方案:

  • 增加路由抑制时间
  • 调整BGP Keepalive时间
  • 检查链路质量
# 配置路由抑制
from aliyunsdkvpc.request.v20160428 import ModifyVpnGatewayAttributeRequest

request = ModifyVpnGatewayAttributeRequest()
request.set_VpnGatewayId("vpn-2ze4567890abcdef")
request.set_VpnRouteConfig(json.dumps({
    "route_suppression": {
        "enable": True,
        "hold_time": 30  # 抑制时间30秒
    }
}))
client.do_action_with_exception(request)

八、最佳实践与性能优化

8.1 路由条目数量优化

最佳实践:

  1. 聚合路由:使用CIDR聚合减少路由条目
  2. 使用标签:为路由条目添加标签便于管理
  3. 定期清理:删除无效路由条目

路由聚合示例:

# 原始路由(分散)
original_routes = [
    "10.0.1.0/24",
    "10.0.2.0/24",
    "10.0.3.0/24",
    "10.0.4.0/24"
]

# 聚合后路由
aggregated_routes = ["10.0.0.0/16"]  # 聚合为一条

# 配置聚合路由
for route in aggregated_routes:
    request = CreateRouteEntryRequest()
    request.set_RouteTableId("rtb-2ze4567890abcdef")
    request.set_DestinationCidrBlock(route)
    request.set_NextHopType("Instance")
    request.set_NextHopId("lb-aggregated")
    client.do_action_with_exception(request)

8.2 路由策略性能优化

优化建议:

  1. 优先级合理分配:关键业务优先级0-10,普通业务50-100
  2. 避免过度匹配:减少不必要的条件匹配
  3. 使用路由缓存:启用路由缓存提升查询性能
# 启用路由缓存
from aliyunsdkvpc.request.v20160428 import ModifyRouteTableAttributeRequest

request = ModifyRouteTableAttributeRequest()
request.set_RouteTableId("rtb-2ze4567890abcdef")
request.set_RouteTableEntryCacheEnable(True)  # 启用缓存
client.do_action_with_exception(request)

8.3 安全最佳实践

路由安全原则:

  1. 最小权限原则:只允许必要的路由条目
  2. 路由审计:定期审查路由配置
  3. 变更管理:路由变更需经过审批

配置路由审计:

# 创建操作审计(ActionTrail)
aliyuncli actiontrail CreateTrail \
  --Name route-audit \
  --SlsProjectName "network-audit" \
  --SlsWriteRoleArn "acs:ram::1234567890123456:role/aliyunactiontraildefaultrole"

# 查询路由变更日志
aliyuncli actiontrail LookupEvents \
  --EventName "CreateRouteEntry" \
  --StartTime "2024-01-01T00:00:00Z" \
  --EndTime "2024-01-31T23:59:59Z"

九、总结

阿里云路由策略是网络架构的核心组件,通过合理的配置可以实现:

  • 流量智能调度:基于业务需求选择最优路径
  • 高可用架构:主备链路自动切换
  • 安全隔离:精细化的访问控制
  • 成本优化:根据带宽成本选择路径

关键要点回顾:

  1. 基础配置:掌握VPC路由表、路由条目的创建和管理
  2. 高级策略:理解自定义路由、优先级、条件匹配
  3. 场景应用:混合云、全球部署、游戏服务器等典型场景
  4. 监控运维:日志分析、故障排查、性能优化

下一步行动建议:

  1. 审查现有网络架构,识别路由优化点
  2. 制定路由策略规范,统一管理标准
  3. 配置监控告警,实现主动运维
  4. 定期演练故障转移,确保高可用性

通过本文的详细指导,您应该能够独立完成阿里云路由策略的配置和优化,解决复杂的网络流量调度问题。如有疑问,建议参考阿里云官方文档或联系技术支持获取进一步帮助。