问题说明
使用 VyOS 镜像的 VPC 路由器在修改 VPC 防火墙规则、调整规则序号或重连 VPC 后,可能出现规则下发超时、平台规则与路由器实际规则不一致,以及业务网络不通。本文用于确认镜像类型、配置规模、管理节点任务、VyOS 执行日志和实际生效规则,再选择合适的处理路径。
适用环境
- 产品:ZStack Cloud。
- 组件:Cloud。
- 版本:5.4.x、5.5.x。
- 涉及对象:VPC 路由器、VyOS VPC 镜像、VPC 防火墙、EIP、端口转发、负载均衡和 iptables 下发路径。
- 部署形态:KVM 环境中的单 VPC 路由器或 VPC 高可用环境;子网、EIP、端口转发、负载均衡或防火墙规则较多时风险更高。
问题现象
- 修改防火墙规则、调整规则序号或重连 VPC 后,下发任务失败、超时或长时间不结束。
- 平台 UI 或 API 显示防火墙规则集和规则已保存,但 VPC 路由器中的 VyOS 配置或 iptables 规则缺失。
- 管理节点日志中出现防火墙同步、
/fw/apply/rule、/fw/apply/ruleSet/changes、fail to commit、return code -1或任务超时等记录。 - VPC 路由器的
zvr.log中出现业务网卡防火墙链配置失败,例如eth5.in相关错误;或者仅记录删除旧规则,未记录重建规则。 - 跨 VPC 子网、EIP、端口转发、负载均衡或经过 VPC 防火墙的流量中断。重连或规则下发期间也可能出现短时中断。
可能原因
- VyOS CLI 的执行时间会随现有配置规模增长而增加。在 ARM 或性能较低的 CPU 上,大量配置的 COMMIT 更容易超时。
- 单个 VPC 路由器挂载较多子网、EIP、端口转发、负载均衡和防火墙规则时,一次变更可能触发大量配置命令。
- 规则同步在删除旧规则后发生 COMMIT 异常或超时,导致新规则未能重建,实际规则与平台期望状态不一致。
- VyOS CLI 自身异常导致配置提交失败。
- VPC 高可用环境中主备路由器未同时刷新,切换后使用了规则不完整的节点。
- 路由、NAT、安全组、网卡、VLAN/VXLAN、公网网络或业务服务本身异常,也可能造成流量不通。
排查步骤
1. 确认镜像类型和配置规模
确认故障 VPC 使用的镜像类型、VPC 路由器状态、网络数量、防火墙规则集数量和规则总数。可在 VPC 路由器详情页检查,也可使用以下命令查询:
QueryVirtualRouterVm uuid=<VPC路由器UUID>
QueryFirewallRuleSet firewallUuid=<VPC防火墙UUID>
QueryFirewallRule ruleSetUuid=<防火墙规则集UUID>
确认 VPC 路由器处于 Running 或 Connected 状态。对于没有既有性能阈值的环境,挂载 20 个以上网络或包含数百至上千条规则时,应按高配置规模处理。
如果规则数量较少、镜像不是 VyOS,或配置规模不高,优先排查路由、NAT、安全组和其他网络故障原因。
2. 检查管理节点任务和日志
在故障时间窗口内检查管理节点日志:
grep -E 'ReconnectVirtualRouter|/fw/apply/rule|/fw/apply/ruleSet/changes|fail to commit|return code -1|OperationTimeout|TimeoutException' /var/log/zstack/manager.log
如果日志已经轮转,同时检查对应日期的归档日志,并记录 API 任务开始和结束时间、请求 ID、VPC 路由器 UUID 及防火墙 UUID。
防火墙同步任务正常时,不应出现 fail to commit、return code -1、超时或异常堆栈。如果异常发生在批量删除、COMMIT 或规则集变更阶段,继续检查路由器实际规则。
3. 对比 VyOS 配置、iptables 规则和执行日志
通过受支持的运维入口登录 VPC 路由器后,执行以下检查:
sudo grep -E 'eth[0-9]+\.(in|out|local)|<防火墙规则名称>|fail to commit|return code -1' /home/vyos/zvr/zvr.log
show firewall name <防火墙规则名称>
sudo iptables-save | grep -E 'eth[0-9]+\.(in|out|local)|<防火墙规则名称>'
VyOS CLI 下发模式应重点比较 show firewall 输出与平台期望规则;iptables 下发模式应重点比较 iptables-save 输出。检查规则链、规则动作、地址、端口和序号,不要仅按 UI 中的规则数量判断。
如果存在 eth*.in、eth*.out 或指定规则集配置失败,出现“仅删除未重建”的记录,或实际规则缺失,可继续按 VyOS 下发不一致或性能瓶颈方向处理。
4. 隔离问题范围
- VyOS 镜像、大配置规模、管理节点超时和路由器规则缺失同时出现时,进入下一节评估镜像替换或 iptables 下发路径。
- 平台和路由器规则一致但流量仍不通时,转入路由、NAT、安全组、公网网络、负载均衡后端或业务链路排查。不要反复重连 VPC,以免扩大中断窗口。
- VPC 高可用环境中仅主路由器规则正确时,检查备路由器,并按当前版本支持的方式刷新主备路由器。
- 仅单个规则集或网卡异常时,在业务变更窗口内执行受支持的防火墙刷新或 VPC 重连。执行前记录规则和流量状态。
处理方法
推荐方案:升级或替换为 Euler VPC 镜像
优先使用当前版本支持的最新 Euler VPC 镜像,以降低对 VyOS CLI 大规模 COMMIT 的依赖。在变更窗口内,使用当前版本支持的更换操作系统、镜像更换、升级、迁移或重建流程完成切换。切换后重连或启动 VPC,并逐项核对防火墙、EIP、端口转发、负载均衡和路由配置。
临时方案:对指定 VPC 启用 iptables 防火墙下发
无法更换镜像时,可在确认当前版本支持的前提下,对指定 VPC 路由器启用 iptables 下发:
UpdateResourceConfig category=vpc name="configure.firewall.with.iptables" resourceUuid=<VPC路由器UUID> value=true
ReconnectVirtualRouter vmInstanceUuid=<VPC路由器UUID>
VPC 高可用环境必须按当前版本的产品语义刷新主备路由器,并确认两端均完成规则同步。
不同版本中 category、资源绑定和 resourceUuid 的对象可能不同。执行前应使用 QueryResourceConfig 或当前版本 API 文档确认配置存在且参数适用。若 API 返回配置不存在或参数不合法,不要在生产环境试错。
验证方法
完成处理后,重复上述检查并验证:
- 平台规则数量与 VPC 路由器中的实际规则一致。
- 新增、删除和调整序号的规则均能正确生效。
- 管理节点日志中不再出现
fail to commit、return code -1或防火墙同步超时。 - 跨子网、EIP、端口转发、负载均衡及防火墙放行或拒绝流量符合预期。
- VPC 高可用环境的主备规则一致,切换后业务网络正常。
可再次检查日志:
grep -E '/fw/apply/rule|/fw/apply/ruleSet/changes|fail to commit|return code -1' /var/log/zstack/manager.log
sudo grep -E 'fail to commit|return code -1|<防火墙规则名称>' /home/vyos/zvr/zvr.log
风险与回滚
- 规则下发、VPC 重连、镜像更换或主备刷新可能造成网络短时中断,应在业务变更窗口执行。
- 大规模 VPC 配置下,重复重连可能延长中断时间或扩大影响范围。
- 启用 iptables 下发前记录原始 ResourceConfig 值。需要回滚时,将对应配置恢复为
false,再按当前版本支持的方式刷新 VPC 路由器并验证规则恢复。 - 镜像替换、升级、迁移或重建的回滚方案应遵循当前版本对应操作流程,确认备份、业务窗口和回退条件后执行。
需要收集的信息
处理后仍无法恢复时,收集以下信息:
- 覆盖故障前后完整时间窗口的管理节点日志、
zvr.log、iptables-save和show firewall输出。 - 规则变更、VPC 重连、故障开始、恢复和日志采集的准确时间。
- VPC 路由器 UUID、防火墙 UUID、规则集 UUID、受影响网卡或 IP、业务五元组、镜像类型和 Cloud 版本。
- VPC 子网、EIP、端口转发、负载均衡、防火墙规则集和规则数量。
- 是否已启用 iptables ResourceConfig,以及命令返回结果。
