引言:理解路由策略在云网络中的核心作用
在阿里云的云原生网络环境中,路由策略是实现网络流量智能调度的核心机制。无论是小型应用还是大型企业级架构,合理的路由配置都能显著提升网络性能、可靠性和安全性。路由策略本质上决定了数据包在网络中的传输路径,它像交通指挥系统一样,引导流量避开拥堵、选择最优路径,并在故障时自动切换。
阿里云的路由策略主要应用于专有网络(VPC)、云企业网(CEN)和VPN网关等场景。通过路由策略,您可以实现:
- 流量分流:将不同业务流量导向不同后端服务
- 故障转移:在链路异常时自动切换到备用路径
- 成本优化:根据带宽成本选择传输路径
- 安全隔离:通过路由控制实现网络分区
本文将从基础配置入手,逐步深入到高级应用场景,并通过完整的代码示例和配置步骤,帮助您全面掌握阿里云路由策略的设置方法。
一、基础配置:VPC路由表管理
1.1 路由表的基本概念
VPC(专有网络)是阿里云网络的基础单元,每个VPC都有一个默认路由表。路由表包含多条路由条目,每条路由条目由目标网段(Destination)、下一跳类型(NextHopType)和下一跳实例(NextHopId)组成。
路由条目示例:
- 目标网段:192.168.1.0/24
- 下一跳类型:ECS实例
- 下一跳实例:i-2ze4567890abcdef
1.2 创建自定义路由表
在阿里云控制台创建自定义路由表的步骤:
- 登录阿里云VPC控制台
- 在左侧导航栏选择路由表
- 点击创建路由表按钮
- 配置参数:
- 名称:自定义(如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 添加路由条目
路由条目是路由策略的核心。添加路由条目时需要明确目标网段和下一跳。
控制台操作:
- 进入目标路由表详情页
- 点击添加路由条目按钮
- 配置:
- 目标网段: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流量通过负载均衡器转发,数据库流量直接路由到数据库服务器。
配置步骤:
- 创建自定义路由策略
# 创建自定义路由策略
aliyuncli vpc CreateCustomRouteEntry \
--RouteTableId rtb-2ze4567890abcdef \
--DestinationCidrBlock 10.0.2.0/24 \
--RouteEntryName "web-traffic" \
--Description "Web流量路由"
- 添加策略条件
# 使用策略引擎添加条件
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段进行路由决策
- 协议类型: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。
控制台配置:
- 进入CEN实例详情页
- 选择路由信息标签
- 点击路由传播配置
- 选择要传播的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间实现低延迟通信。
优化策略:
- 使用云企业网加速:启用全球加速功能
- 配置智能路由:基于延迟选择最优路径
- 设置备份路径:主路径故障时自动切换
配置示例:
# 启用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)。
配置步骤:
- 创建VPN网关
# 创建VPN网关
aliyuncli vpc CreateVpnGateway \
--VpcId vpc-2ze4567890abcdef \
--VpnGatewayName "idc-gateway" \
--VpnType "Normal" \
--VpcSubnet "10.0.1.0/24" \
--Bandwidth 10
- 添加静态路由
# 添加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)
- 验证路由配置
# 查询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。
配置步骤:
- 创建专线网关
# 创建专线网关
aliyuncli vpc CreateDirectConnectGateway \
--VpcId vpc-2ze4567890abcdef \
--DirectConnectGatewayName "idc-专线网关" \
--Spec "Large" \
--Type "VPC"
- 添加静态路由
# 添加专线网关静态路由
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 专线网关路由冗余配置
场景:配置双专线实现高可用。
配置步骤:
- 创建两个专线网关(主备)
- 配置不同的权重
- 设置健康检查
# 配置主备路由(不同权重)
# 主路由(权重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:路由不生效
排查步骤:
- 检查路由条目状态
aliyuncli vpc DescribeRouteTables \
--RouteTableId rtb-2ze4567890abcdef
- 检查路由条目下一跳实例状态
aliyuncli ecs DescribeInstances \
--InstanceIds '["i-2ze4567890abcdef"]'
- 检查安全组规则
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 路由条目数量优化
最佳实践:
- 聚合路由:使用CIDR聚合减少路由条目
- 使用标签:为路由条目添加标签便于管理
- 定期清理:删除无效路由条目
路由聚合示例:
# 原始路由(分散)
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 路由策略性能优化
优化建议:
- 优先级合理分配:关键业务优先级0-10,普通业务50-100
- 避免过度匹配:减少不必要的条件匹配
- 使用路由缓存:启用路由缓存提升查询性能
# 启用路由缓存
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 安全最佳实践
路由安全原则:
- 最小权限原则:只允许必要的路由条目
- 路由审计:定期审查路由配置
- 变更管理:路由变更需经过审批
配置路由审计:
# 创建操作审计(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"
九、总结
阿里云路由策略是网络架构的核心组件,通过合理的配置可以实现:
- 流量智能调度:基于业务需求选择最优路径
- 高可用架构:主备链路自动切换
- 安全隔离:精细化的访问控制
- 成本优化:根据带宽成本选择路径
关键要点回顾:
- 基础配置:掌握VPC路由表、路由条目的创建和管理
- 高级策略:理解自定义路由、优先级、条件匹配
- 场景应用:混合云、全球部署、游戏服务器等典型场景
- 监控运维:日志分析、故障排查、性能优化
下一步行动建议:
- 审查现有网络架构,识别路由优化点
- 制定路由策略规范,统一管理标准
- 配置监控告警,实现主动运维
- 定期演练故障转移,确保高可用性
通过本文的详细指导,您应该能够独立完成阿里云路由策略的配置和优化,解决复杂的网络流量调度问题。如有疑问,建议参考阿里云官方文档或联系技术支持获取进一步帮助。
