关键在于构建“感知—决策—执行”闭环:容器网络需识别拓扑结构、评估链路质量并动态更新路由表,结合BGP/ECMP、可编程CNI插件与轻量策略引擎实现智能路由。
要在多拓扑网络环境中让容器实现智能路由条目选择,关键不是堆砌工具,而是建立“感知—决策—执行”闭环:让容器网络能识别当前拓扑结构、评估链路质量,并动态更新路由表。这需要结合底层网络能力(如bgp/ecmp)、容器网络插件的可编程性,以及轻量级策略引擎。
识别并标记拓扑上下文
容器本身不天然知道它处在星型、网状还是混合拓扑中,需通过外部注入或自动发现明确拓扑角色:
- 启动时通过环境变量标注位置,例如
TOPOLOGY_ROLE=hub或TOPOLOGY_ZONE=us-east-1a - 利用 Weave Net 的
--ipalloc-range配合子网划分,使不同拓扑区域使用互斥 CIDR(如 hub 区用10.32.1.0/24,spoke 区用10.32.2.0/24),再通过weave status routes反查所属段 - 在 Docker 启动命令中挂载拓扑元数据卷,例如将 JSON 格式的邻接关系(
{"neighbors": ["router-2", "router-4"]})写入容器内/etc/weave/topo.json
基于链路质量动态调整路由度量
静态路由无法应对抖动、延迟突增或节点离线,必须让路由 Metric 可响应变化:
- 在 Windows Server 容器宿主机上,用 PowerShell 脚本周期性执行
Test-NetConnection -ComputerName $peer -InformationLevel Detailed,提取RemoteAddressPingRTT,据此调用Set-NetIPInterface -InterfaceMetric动态设值 - 在 Linux 环境下,配合
pipework route+ 自定义探测脚本:每30秒 ping 关键下一跳,若丢包率 >5% 或 RTT >80ms,则执行pipework route $CONTAINER add 10.0.0.0/8 via 192.168.3.2 metric 200切换高 Metric 备用路径 - Weave Net 支持通过
weave expose发布健康端点,其他节点可订阅该状态并触发weave route add ... via ...更新本地路由表
分场景配置路由策略入口
不同拓扑结构适用不同策略锚点,避免“一套规则打天下”:
- 星型拓扑:所有 spoke 节点默认路由指向 hub;hub 上启用 BGP Route Reflector,spoke 节点作为 client 注册,由 hub 统一广播最优路径
- 对等单元拓扑:每个单元保留本地 ODR(On-Demand Router),通过 ISP 选路机制分流——访问电信资源走 WAN1,联通资源走 WAN2,避免跨 ISP 回环
-
混合云拓扑(如 AWS + VPS):启用 Weave Net 的
--aws-vpc-mode,使其直接读取 VPC 路由表,将容器流量导向对应 IGW/NAT Gateway,而非走 overlay 隧道
验证与反馈闭环
配置完成不等于生效,需持续验证路由选择是否符合预期:
- 进入容器执行
ip route get 10.32.5.100,确认返回的via地址和dev接口是否匹配当前策略 - 用
tcpdump -i any host 10.32.5.100抓包,比对实际出向接口与路由表是否一致 - 部署轻量 Prometheus Exporter,采集各容器
/proc/net/fib_trie中的路由项数量、最长匹配前缀长度、下一跳活跃状态,异常时触发告警



















