文档目录

问题说明

使用 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,以及命令返回结果。
VyOS VPC 防火墙规则变更或重连后下发不完整 | 故障排查 · KB | ZStack 资源中心