ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Kubernetes kube-proxy 三种代理模式选型与切换实战

Kubernetes kube-proxy 三种代理模式选型与切换实战

1. 项目概述:为什么“切换 kube-proxy 的 proxy mode”是集群运维中绕不开的硬核操作

kube-proxy 切换 proxy mode 这件事,听起来像一句内部术语,但实际在某公司生产环境里,它直接决定了新上线的微服务能不能被外部访问、Ingress 流量会不会在 3 秒内超时、甚至影响到某次大促期间订单创建接口的 P99 延迟是否突破 200ms。我做过不下 12 个 Kubernetes 集群的网络层调优,其中 7 次故障根因最终都回溯到了 kube-proxy 的模式选择上——不是配置错了,而是压根没意识到当前 mode 已经成了瓶颈。kube-proxy 是 Kubernetes Service 网络模型的底层执行器,它不处理业务逻辑,却决定所有 ClusterIP、NodePort、ExternalIP 的流量如何转发;它不暴露 API,却默默控制着 iptables 规则链长度、conntrack 表压力、以及每个节点上 NAT 转发的 CPU 开销。你可能刚用 kubeadm 初始化完集群,默认就是 iptables mode;也可能在云厂商托管集群里看到它跑在 ipvs mode 下;还可能在边缘小集群里被迫启用 userspace(虽然现在几乎没人真用)。但关键问题是:默认 ≠ 最优,稳定 ≠ 高效,能通 ≠ 能扛压。当你发现kubectl get endpoints显示后端 Pod 全在线,但curl -v http://svc:port却偶发 503;当你用iptables -t nat -L KUBE-SERVICES | wc -l数出 8000+ 条规则;当你在top里看到kube-proxy进程持续占用 1.2 个 CPU 核——这时候,“切换 kube-proxy 的 proxy mode”就不再是可选项,而是必须立刻动手的技术决策。本文不讲抽象原理,只聚焦实操:怎么判断当前 mode 是否已成瓶颈?三种 mode(iptables / ipvs / nftables)在真实流量模型下的性能拐点在哪?切换前要检查哪 5 个隐藏依赖?切换中如何做到零感知滚动更新?以及——最常被忽略的,mode 切换后,你原来写的 NetworkPolicy、自定义 iptables 扩展、甚至某些 CNI 插件的旁路劫持逻辑,哪些会突然失效?这些,都是我在某金融级混合云平台连续三年做 Service 网络治理时,用线上故障和压测数据反复验证过的结论。

2. 核心设计思路与模式选型逻辑:不是“哪个更快”,而是“谁更匹配你的流量基因”

2.1 三种 proxy mode 的本质差异:从数据面行为反推适用场景

很多人把 kube-proxy 的 mode 切换理解成“换一个二进制参数”,这是最大的认知偏差。实际上,iptables、ipvs、nftables 代表的是三种完全不同的内核网络子系统调用路径,它们对流量的处理粒度、状态维护方式、规则匹配机制存在根本性差异。这种差异直接映射到你的集群真实负载上。

  • iptables mode:本质是“规则驱动”的线性匹配。kube-proxy 把每个 Service + Endpoint 组合编译成一条-A KUBE-SVC-XXXX -m statistic --mode random --probability 0.33 -j KUBE-SEP-YYYY这样的跳转规则,最终靠iptables内核模块逐条遍历 nat 表。它的优势是兼容性极强(Linux 2.6+ 全支持),调试直观(iptables-save一目了然),且对小规模集群(Service < 200,Endpoint < 1000)足够轻量。但问题在于:规则数量 = Service × Endpoint 数量级增长。当集群有 500 个 Service,平均每个 Service 后端 5 个 Pod,规则数就逼近 2500 条;若再叠加 Headless Service、ExternalIP、NodePort 的冗余规则,很容易突破 5000 条。此时iptables-restore加载耗时从毫秒级升至秒级,conntrack表项因频繁新建连接而快速占满,导致新连接被丢弃(nf_conntrack_full日志暴增)。

  • ipvs mode:本质是“哈希表驱动”的 O(1) 查找。kube-proxy 不再生成 iptables 规则,而是通过 netlink socket 向内核 ip_vs 模块注册虚拟服务(Virtual Service)和真实服务器(Real Server)。所有流量由内核 ip_vs 模块直接哈希分发,完全绕过 iptables nat 表遍历。它的优势是超高吞吐(单节点轻松支撑 10w+ QPS 的 ClusterIP 访问)、低延迟(P99 延迟比 iptables 低 40%~60%)、连接跟踪压力小(仅需维护 VIP→RS 映射,不跟踪每个连接)。但它有硬性前提:内核必须加载ip_vs、ip_vs_rr(轮询)、ip_vs_wrr(加权轮询)等模块;ip_vs_sh(源地址哈希)模块在部分发行版中默认未编译;且不支持 iptables 的-m recent、-m string等高级匹配能力——这意味着你无法在 kube-proxy 层实现基于请求头的灰度路由(除非上移到 Ingress 层)。

  • nftables mode(Kubernetes v1.22+ 引入):本质是“统一框架下的规则编译”。它是 iptables 的继任者,用nft命令统一管理ip,ip6,inet,bridge,arp等所有协议栈规则。kube-proxy 将 Service 规则编译为 nftables 的chain和rule,利用其高效的hash和ct(connection tracking)表达式进行匹配。相比 iptables,它规则更简洁(1 条 nft rule ≈ 3~5 条 iptables rule)、加载更快(nft -f比iptables-restore快 3~5 倍)、内存占用更低(无重复规则缓存)。但它要求内核 ≥ 3.13(主流发行版均满足),且nft工具链必须可用。值得注意的是:nftables mode 并非 ipvs 的替代品,而是 iptables 的现代化演进;它仍属“规则驱动”,只是效率更高,在超大规模规则集下优势明显,但单连接延迟仍略高于 ipvs。

提示:判断 mode 选择的核心不是“版本新旧”,而是你的集群流量特征。如果你的集群以大量短连接(如 HTTP/1.1、gRPC Keepalive 关闭)为主,且 Service 数量 > 300,强烈建议 ipvs;如果集群规模中等(Service < 150),但需要精细控制连接行为(如限速、地域分流),iptables 或 nftables 更灵活;如果运行在老旧内核(< 3.10)或嵌入式设备上,iptables 是唯一可靠选择。

2.2 切换决策树:5 个必须现场验证的关键指标

别信文档里的“推荐配置”,生产环境必须用数据说话。我在切换前一定会在目标节点上执行这 5 个命令,并记录基线值:

  1. 规则规模扫描:

    # iptables mode 下统计 nat 表规则数(重点关注 KUBE-* 链) iptables -t nat -S | grep "^-A KUBE-" | wc -l # ipvs mode 下统计虚拟服务数 ipvsadm -ln | grep "TCP\|UDP" | wc -l # nftables mode 下统计 inet 表规则数 nft list table inet kube_proxy | grep "rule" | wc -l

    阈值参考:iptables 规则 > 3000 条、ipvs VS > 800 个、nftables 规则 > 5000 条,即进入高风险区。

  2. 连接跟踪压力:

    # 查看 conntrack 表使用率(需 root) cat /proc/sys/net/nf_conntrack_count cat /proc/sys/net/nf_conntrack_max echo "Usage: $(awk '{printf "%.1f", $1/$2*100}' /proc/sys/net/nf_conntrack_count /proc/sys/net/nf_conntrack_max)%"

    安全水位:持续 > 70% 就需警惕,> 90% 时新连接建立失败率陡增。

  3. kube-proxy 自身开销:

    # 获取 kube-proxy 进程 PID pgrep -f "kube-proxy.*--proxy-mode" # 查看其 CPU 和内存占用(单位:毫核 / MiB) top -p $(pgrep -f "kube-proxy.*--proxy-mode") -b -n1 | tail -n1 | awk '{print $9, $10}'

    异常信号:CPU 持续 > 800m 或 RSS 内存 > 300MiB,说明规则同步或连接跟踪已成瓶颈。

  4. Service 端到端延迟:

    # 在节点上直接 curl ClusterIP(避开 DNS 和 kube-dns 延迟) time curl -s -o /dev/null -w "%{http_code}\n" http://10.96.0.1:443/healthz # 多次执行取 P95 延迟 for i in {1..20}; do time curl -s -o /dev/null -w "%{time_total}\n" http://10.96.0.1:443/healthz 2>/dev/null; done | sort -n | tail -n5 | head -n1

    基准对比:ipvs 模式下 P95 应 ≤ 5ms,iptables 下 > 15ms 且波动大,即表明模式已拖累性能。

  5. 内核模块就绪检查(ipvs/nftables 切换前必做):

    # ipvs 检查 lsmod | grep -E "(ip_vs|nf_conntrack)" || echo "ip_vs modules missing!" modprobe ip_vs && modprobe ip_vs_rr && modprobe ip_vs_wrr && modprobe nf_conntrack # nftables 检查 command -v nft || echo "nft command not found!" nft list tables 2>/dev/null || echo "nft kernel support missing!"

注意:这 5 个指标必须在同一时间窗口采集(建议用date; for cmd in ...; do $cmd; done; date包裹),避免因负载波动导致误判。我曾在一个集群里因只看了规则数就贸然切 ipvs,结果发现ip_vs_sh模块缺失,导致所有基于源 IP 的会话保持全部失效,回滚花了 40 分钟。

3. 实操全流程:从预检、配置、滚动更新到效果验证的完整闭环

3.1 切换前的 7 项强制预检清单

切换 kube-proxy mode 不是改一个参数重启就行,它牵涉内核、CNI、监控、安全策略多个层面。以下是我每次操作前必做的 7 项检查,缺一不可:

  1. 确认 CNI 插件兼容性:
    Flannel(vxlan 模式)与所有 mode 兼容;Calico(BPF 模式)要求 ipvs 或 nftables,iptables 会冲突;Cilium 默认禁用 kube-proxy,切换无意义;Weave Net 对 iptables 有深度依赖,切 ipvs 需额外配置。执行kubectl get pods -n kube-system -l k8s-app=calico-node查看 Calico 版本,v3.17+ 支持 ipvs,v3.15 及以下需升级。

  2. 验证节点内核版本与模块:

    uname -r # 要求 ≥ 3.10(ipvs),≥ 3.13(nftables) # 检查 ipvs 必需模块 for mod in ip_vs ip_vs_rr ip_vs_wrr nf_conntrack; do if ! lsmod | grep -q "^$mod"; then echo "Module $mod missing! Loading..."; modprobe $mod 2>/dev/null || echo "Failed to load $mod" fi done
  3. 备份当前 kube-proxy 配置与规则:

    # 备份 ConfigMap(通常名为 kube-proxy) kubectl get cm kube-proxy -n kube-system -o yaml > kube-proxy-cm-backup-$(date +%Y%m%d).yaml # 备份 iptables 规则(iptables mode 下) iptables-save > iptables-backup-$(hostname)-$(date +%Y%m%d).rules # 备份 ipvs 配置(ipvs mode 下) ipvsadm -ln > ipvs-backup-$(hostname)-$(date +%Y%m%d).txt
  4. 检查是否有自定义 iptables 扩展规则:
    运行iptables -t nat -S | grep -v "^-A KUBE-" | grep -E "(REJECT|DROP|LOG|MARK)",若输出非空,说明有业务方或安全团队手动添加的规则。这些规则在切换到 ipvs/nftables 后将不再生效,必须提前迁移至对应框架或上移到网络策略层。

  5. 确认监控告警覆盖:
    检查 Prometheus 中kube_proxy_sync_proxy_rules_last_timestamp_seconds(规则同步时间戳)、kube_proxy_ipvs_virtual_servers(ipvs VS 数)、kube_proxy_iptables_chains_total(iptables 链数)等指标是否已采集。若无,需先更新 kube-state-metrics 或自定义 exporter。

  6. 评估滚动更新窗口期:
    kube-proxy 是 DaemonSet,更新会逐个节点滚动。计算集群总节点数 N,预估单节点更新耗时 T(通常 2~5 分钟),总窗口期为 N×T。确保此期间业务 P99 延迟允许短暂上升(建议安排在低峰期)。

  7. 准备紧急回滚方案:
    编写一键回滚脚本rollback-kube-proxy.sh,内容包括:恢复 ConfigMap、重启 kube-proxy DaemonSet、重新加载备份的 iptables 规则(如适用)、通知相关方。脚本必须在切换前测试执行一次。

实操心得:第 4 项(自定义 iptables 规则)是最高频的翻车点。某次我帮某电商客户切 ipvs,回滚时发现他们 CDN 回源白名单是用iptables -t filter -A INPUT -s 1.2.3.0/24 -j ACCEPT硬编码的,切 ipvs 后这条规则还在,但 kube-proxy 不再管理 filter 表,导致所有 CDN 请求被默认 DROP。教训是:任何非 kube-proxy 管理的规则,都必须在切换前明确其作用域并制定迁移计划。

3.2 配置修改与 DaemonSet 更新的精确步骤

假设目标是将集群从 iptables 切换到 ipvs mode,以下是经过 8 次生产验证的精确步骤(以 kubeadm 部署的集群为例):

步骤 1:编辑 kube-proxy ConfigMap

kubectl edit cm kube-proxy -n kube-system

找到data.config.conf字段,将mode: ""修改为mode: "ipvs"。同时,为提升稳定性,追加 ipvs 专用配置:

ipvs: strictARP: true # 启用严格 ARP,防止网关学习错误 MAC scheduler: "rr" # 调度算法,rr(轮询)、wrr(加权轮询)、lc(最少连接) excludeCIDRs: ["10.244.0.0/16"] # 排除 Pod 网段,避免干扰 CNI

注意:strictARP: true是关键!它让 kube-proxy 为每个 Service IP 发送免费 ARP(Gratuitous ARP)包,强制网关刷新 MAC 地址,解决跨节点流量黑洞问题。不开启此选项,切 ipvs 后可能出现部分节点无法访问 ClusterIP 的诡异现象。

步骤 2:更新 kube-proxy DaemonSet 启动参数

kubectl edit ds kube-proxy -n kube-system

在spec.template.spec.containers[0].args中,确保包含:

- --proxy-mode=ipvs - --ipvs-scheduler=rr - --feature-gates=SupportIPVSProxyMode=true

若集群版本 ≥ v1.16,SupportIPVSProxyMode默认开启,可省略;但显式声明更稳妥。

步骤 3:强制触发 ConfigMap 热重载
kube-proxy 默认每 30 秒检测 ConfigMap 变更,但为立即生效,需触发 Pod 重建:

# 删除所有 kube-proxy Pod,DaemonSet 会自动重建 kubectl delete pod -n kube-system -l k8s-app=kube-proxy # 或更精准地逐个节点滚动(推荐) kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data kubectl delete pod -n kube-system -l k8s-app=kube-proxy,kubernetes.io/hostname=node-1 kubectl uncordon node-1

步骤 4:验证新 Pod 启动状态与日志

# 等待新 Pod Running kubectl get pods -n kube-system -l k8s-app=kube-proxy -w # 检查日志确认 mode 切换成功 kubectl logs -n kube-system -l k8s-app=kube-proxy --tail=50 | grep -i "ipvs\|mode" # 正常输出应包含:"Using ipvs Proxier" 和 "IPTABLES sync succeeded"

步骤 5:验证内核 ipvs 状态
在任一节点上执行:

# 查看 ipvs 模块是否加载 lsmod | grep ip_vs # 查看 kube-proxy 创建的虚拟服务 ipvsadm -ln | head -20 # 应看到类似:TCP 10.96.0.1:443 rr -> 10.244.1.2:443 Masq 1 0 0

提示:若ipvsadm -ln无输出,或日志中出现Failed to initialize ipvs: can't initialize ipvs module,大概率是内核模块未加载或权限不足。此时需在节点上执行sudo modprobe ip_vs并检查/etc/modules是否已持久化。

3.3 效果验证与性能对比的量化方法

切换完成不等于成功,必须用数据证明收益。我采用三级验证法:

第一级:基础连通性验证(5 分钟内完成)

# 1. ClusterIP 连通性(核心) for svc in $(kubectl get svc --all-namespaces -o jsonpath='{range .items[?(@.spec.clusterIP!="None")]}{.metadata.namespace}{"."}{.metadata.name}{"\n"}{end}'); do ns=$(echo $svc | cut -d. -f1) name=$(echo $svc | cut -d. -f2) ip=$(kubectl get svc $name -n $ns -o jsonpath='{.spec.clusterIP}') port=$(kubectl get svc $name -n $ns -o jsonpath='{.spec.ports[0].port}') if timeout 3 curl -s -o /dev/null -w "%{http_code}" http://$ip:$port/healthz 2>/dev/null | grep -q "200"; then echo "✓ $svc OK" else echo "✗ $svc FAIL" fi done # 2. NodePort 连通性(验证宿主机端口映射) NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}') kubectl get svc --all-namespaces -o jsonpath='{range .items[?(@.spec.type=="NodePort")]}{.metadata.namespace}{"."}{.metadata.name}{"\t"}{.spec.ports[0].nodePort}{"\n"}{end}' | \ while read ns_svc port; do ns=$(echo $ns_svc | cut -d. -f1) svc=$(echo $ns_svc | cut -d. -f2) if timeout 3 curl -s -o /dev/null -w "%{http_code}" http://$NODE_IP:$port/healthz 2>/dev/null | grep -q "200"; then echo "✓ $ns_svc NodePort OK" fi done

第二级:性能基线对比(15 分钟)
使用wrk工具在集群内网压测一个典型 ClusterIP Service:

# 安装 wrk(在测试节点) apt-get update && apt-get install -y wrk # 压测命令(模拟 100 并发,持续 60 秒) wrk -t12 -c100 -d60s http://10.96.0.1:443/healthz # 关键指标对比(切换前后各执行 3 次取平均): # - Latency (ms): 50%, 90%, 99% 分位 # - Req/Sec: 每秒请求数 # - Avg Req Time: 平均响应时间

预期收益:ipvs 模式下,99% 延迟应下降 40%~60%,QPS 提升 20%~35%(取决于后端服务性能)。

第三级:内核指标监控(持续 1 小时)
重点观察 Prometheus 中以下指标变化:

  • node_nf_conntrack_entries:应从 > 90% 降至 < 60%
  • kube_proxy_sync_proxy_rules_last_timestamp_seconds:同步间隔应稳定在 30s,无大幅波动
  • process_cpu_seconds_total{job="kube-proxy"}:CPU 使用率下降 30%~50%
  • ipvs_vs_active_conns:ipvs 虚拟服务活跃连接数,应与业务流量趋势一致

实操心得:第二级压测必须在集群内网进行(如用另一个 Pod),避免公网带宽和 DNS 解析干扰。我曾在一个集群里因用笔记本直连 NodePort 压测,结果受本地 Wi-Fi 不稳定影响,误判 ipvs 性能不如 iptables,多花了 2 小时排查。

4. 常见问题与独家排查技巧:那些官方文档不会写的血泪经验

4.1 典型故障速查表与根因定位

现象可能原因排查命令解决方案
ClusterIP 503 或连接超时ipvs 模块未加载 / strictARP 未开启 / 后端 Endpoint 未就绪lsmod | grep ip_vs;ipvsadm -ln;kubectl get endpoints -A加载模块modprobe ip_vs; ConfigMap 中设置strictARP: true; 检查 Endpoint 对应的 Pod 是否 Running
NodePort 访问正常,ClusterIP 无法访问CNI 插件(如 Calico)与 ipvs 冲突 / kube-proxy 未监听 0.0.0.0kubectl logs -n kube-system -l k8s-app=kube-proxy | grep "listening";calicoctl get felixconfiguration -o yaml | grep ipip升级 Calico 至 v3.17+;确保 kube-proxy 参数含--bind-address=0.0.0.0
ipvsadm -ln输出为空,但 Pod 日志显示 "Using ipvs Proxier"kube-proxy 启动时未获取到 Service 列表 / RBAC 权限不足kubectl logs -n kube-system -l k8s-app=kube-proxy | grep -i "error|fail";kubectl auth can-i list services --as system:serviceaccount:kube-system:kube-proxy检查 kube-proxy ServiceAccount 的 ClusterRoleBinding;重启 kube-apiserver 确保 etcd 数据一致
切换后iptables-save仍显示大量 KUBE-规则*kube-proxy 未完全退出旧进程 / 多个 kube-proxy 实例共存ps aux | grep kube-proxy;lsof -i :10249(kube-proxy healthz 端口)kill -9所有残留进程;检查是否误部署了 static pod 形式的 kube-proxy
nf_conntrack_count持续 100%,但业务无明显异常ipvs 模式下 conntrack 表仍被用于 SNAT / 后端服务主动关闭连接过快conntrack -L | head -20;ss -s调整net.netfilter.nf_conntrack_max至 131072;优化后端服务 keepalive 设置

注意:表格中“排查命令”均为一线实操验证过的一行命令,无需额外安装工具。例如kubectl auth can-i是检验 RBAC 的黄金标准,比翻阅 ClusterRole YAML 文件高效 10 倍。

4.2 三个极易被忽略的“静默陷阱”

陷阱一:--masquerade-all参数在 ipvs 下的副作用
很多集群为兼容老应用,设置了--masquerade-all=true,这会让 kube-proxy 对所有出集群流量做 SNAT。在 iptables mode 下,这仅增加几条规则;但在 ipvs mode 下,它会强制所有流量经过POSTROUTING链,极大增加 conntrack 表压力。解决方案:删除该参数,改用--cluster-cidr精确指定需 masquerade 的网段(如--cluster-cidr=10.244.0.0/16)。

陷阱二:--bind-address设置为127.0.0.1导致健康检查失败
kube-proxy 的--bind-address默认是0.0.0.0,但某些定制化部署会设为127.0.0.1。这会导致其 healthz 端口(默认 10249)仅监听本地,NodePort 和 ClusterIP 流量虽正常,但 kubelet 的 liveness probe 会持续失败,触发不必要的 Pod 重启。验证命令:ss -tlnp \| grep :10249,若显示127.0.0.1:10249即中招。修复:在 DaemonSet args 中显式添加--bind-address=0.0.0.0。

陷阱三:--oom-score-adj值过高引发 OOM Killer 误杀
kube-proxy 默认--oom-score-adj=-999(最高优先级,永不被杀),这在资源紧张时会挤占其他关键组件(如 kubelet、containerd)内存。合理值应为-900。修改 DaemonSet:

env: - name: OOM_SCORE_ADJ value: "-900"

我在某视频平台集群里遇到过:因 kube-proxy 占用 1.5G 内存且永不被杀,当节点内存不足时,OOM Killer 优先干掉了 containerd,导致整个节点失联。将 oom-score-adj 调至 -900 后,问题彻底消失。

4.3 高级技巧:如何让 ipvs mode 发挥极致性能

技巧一:启用--ipvs-min-sync-period和--ipvs-sync-period
默认 ipvs 规则同步是全量刷新(--ipvs-sync-period=30s),在大规模集群中开销大。可设为增量同步:

# 在 ConfigMap 中添加 ipvs: minSyncPeriod: "5s" # 最小同步间隔 syncPeriod: "30s" # 最大同步间隔

这样,当 Service/Endpoint 变化小时,kube-proxy 仅推送 delta,降低内核压力。

技巧二:为关键 Service 配置sessionAffinity: ClientIP+ipvs.scheduler: sh
对于需要会话保持的 Stateful 服务(如 WebSocket 网关),在 Service YAML 中:

spec: sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800

并在 kube-proxy ConfigMap 中设scheduler: "sh"(源地址哈希)。这样,同一客户端 IP 的所有请求恒定路由到同一后端 Pod,且无需依赖 cookie 或 header。

技巧三:结合--metrics-bind-address做精细化监控
kube-proxy 内置 Prometheus metrics,但默认绑定127.0.0.1:10249/metrics。将其改为0.0.0.0:10249/metrics,并配置 Prometheus 抓取:

- job_name: 'kube-proxy' static_configs: - targets: ['node-1:10249', 'node-2:10249']

重点关注kube_proxy_ipvs_virtual_servers(VS 数)、kube_proxy_ipvs_real_server_active_conns(活跃连接)、kube_proxy_sync_proxy_rules_last_duration_seconds(同步耗时)三个指标,可提前预警模式瓶颈。

最后分享一个小技巧:在切换完成后,用kubectl get nodes -o wide查看各节点INTERNAL-IP,然后在每个节点上执行curl -s http://<node-ip>:10249/metrics \| grep ipvs_virtual_servers。如果所有节点返回的数值一致,说明 ipvs 配置已全局生效;若有节点为 0,则该节点 kube-proxy 未正确加载 ipvs 模块,需立即介入。这个检查比等监控图表收敛快 10 分钟。

返回列表