Alauda Service Mesh v2.2 已修复的问题

本节记录 Alauda Service Mesh 中已修复的问题。

外部防火墙重新加载后未恢复 Ambient 健康检查规则

在 Ambient 模式下,istio-cni-node 智能体会在主机网络命名空间中安装规则,通过将探针的源地址转换为 169.254.7.127,使 kubelet 健康检查探针免受 ztunnel 捕获:

-I POSTROUTING 1 -j ISTIO_POSTRT
-A ISTIO_POSTRT -m owner --socket-exists -p tcp -m set --match-set istio-inpod-probes-v4 dst -j SNAT --to-source 169.254.7.127

该智能体仅在启动时安装这些规则,此后从未再次检查。任何在智能体持续运行期间移除这些规则的操作(例如重新加载 firewalld,或操作系统持久化单元执行的 iptables-restore),因此都不会被发现。

在 STRICT PeerAuthentication 策略下,探针随后会使用节点地址而不是已豁免的地址到达 Pod,被重定向到 ztunnel,并遭到拒绝:

connection closed due to policy rejection: explicitly denied by: istio-system/istio_converted_static_strict

探针收到 TCP 重置,因此工作负载变为 NotReady,并从其服务的端点中移除。该节点不会自行恢复:只有重启 istio-cni-node DaemonSet 后,规则才会恢复。cni.ambient.reconcileIptablesOnStartup 选项没有帮助,因为它仅在启动时运行,而且只涵盖 Pod 内部的规则。

修复版本: Istio v1.30.4。现在,智能体会定期验证主机规则,并在规则不再匹配时重新安装这些规则。在 IstioCNI 资源中设置检查间隔,其中 "0" 会禁用检查:

kind: IstioCNI
spec:
  values:
    cni:
      ambient:
        reconcileHostRulesInterval: "30s"

nodeagent_host_rules_reconciles_total 指标统计修复次数,标签值为 result=repairedresult=failed