当前位置: 首页 > news >正文

k8s node 报IPVS no destination available

在 Kubernetes 集群中,IPVS no destination available 错误通常表示 kube-proxy(IPVS 模式)无法为 Service 找到可用的后端 Pod。这会导致流量无法正确转发,影响服务可用性。以下是详细的排查和解决方法:

一、错误原因分析

IPVS 是 kube-proxy 的一种模式,通过内核模块实现 Service 负载均衡。当出现 no destination available 时,可能的原因包括:

Pod 状态异常

  • Pod 未就绪(Readiness/Liveness Probe 失败)
  • Pod 处于 CrashLoopBackOff 或 Terminating 状态

Endpoint 对象异常

  • Endpoints 资源未正确生成或更新
  • Endpoints 中没有匹配的 IP 地址

IPVS 配置错误

  • kube-proxy 未正确同步 Service 和 Endpoints
  • IPVS 规则未正确创建或已过期

网络隔离问题

  • Node 与 Pod 之间网络不通
  • 防火墙或 NetworkPolicy 阻断流量

二、排查步骤

1. 检查 Service 和 Endpoints
# 查看 Service 配置
kubectl describe service <service-name># 查看对应的 Endpoints
kubectl get endpoints <service-name> -o yaml

关键验证点

  • Endpoints 是否包含健康的 Pod IP 和端口
  • Pod IP 是否与实际运行的 Pod 匹配
2. 检查 Pod 状态
# 查看 Pod 状态
kubectl get pods -l <selector>  # selector 为 Service 的标签选择器# 查看 Pod 详细信息
kubectl describe pod <pod-name>

常见问题

  • Pod 是否处于 Running 状态且 Ready 为 True
  • 是否有 Probe 失败导致 Pod 被标记为不健康
3. 检查 kube-proxy 状态
# 查看 kube-proxy 日志
kubectl logs -n kube-system <kube-proxy-pod-name># 检查 kube-proxy 是否使用 IPVS 模式
kubectl get configmap kube-proxy -n kube-system -o yaml | grep mode
4. 验证 IPVS 规则
# 在 Node 上安装 ipvsadm
yum install ipvsadm  # CentOS/RHEL
apt install ipvsadm  # Ubuntu/Debian# 查看 IPVS 规则
ipvsadm -L -n# 示例输出(应包含 Service 和后端 Pod):
# IP Virtual Server version 1.2.1 (size=4096)
# Prot LocalAddress:Port Scheduler Flags
#   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
# TCP  10.96.0.1:443 rr
#   -> 192.168.1.10:6443          Masq    1      0          0

三、解决方法

1. 重启 kube-proxy Pod
kubectl delete pods -n kube-system -l k8s-app=kube-proxy
# Kubernetes 会自动重建 kube-proxy Pod
2. 重建 IPVS 规则
# 在 Node 上执行(需 root 权限)
ipvsadm -C  # 清除所有 IPVS 规则
systemctl restart kube-proxy  # 重启 kube-proxy 重建规则
3. 检查 kube-proxy 配置

确保 kube-proxy 配置正确(configmap/kube-proxy):

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"  # 确保使用 IPVS 模式
ipvs:scheduler: "rr"  # 负载均衡算法strictARP: true  # 启用 strictARP 避免 ARP 冲突
4. 检查 Pod 健康状态
  • 确保 Pod 的 Readiness Probe 配置正确:
    readinessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 5periodSeconds: 10
    
5. 检查网络策略
# 查看是否有 NetworkPolicy 阻断流量
kubectl get networkpolicy --all-namespaces# 临时禁用 NetworkPolicy 测试(不推荐生产环境)
kubectl delete networkpolicy --all
6. 升级 kube-proxy 和内核版本
  • 升级到最新稳定版 kube-proxy(1.24+)
  • 确保内核版本支持 IPVS(3.10+)

四、预防措施

  1. 监控 Endpoints 变化
    使用 Prometheus 监控 kube_endpoint_address_available 指标,检测 Endpoints 异常。

  2. 配置合理的 Probe
    为所有 Pod 设置 Readiness 和 Liveness Probe,确保健康状态被正确检测。

  3. 启用 IPVS 健康检查

    ipvs:healthCheckTimeout: 5s  # 健康检查超时时间healthCheckInterval: 10s  # 检查间隔
    
  4. 定期清理异常 Pod
    使用 CronJob 或 Operator 自动清理长时间处于异常状态的 Pod。

五、验证修复效果

# 再次检查 IPVS 规则
ipvsadm -L -n# 测试 Service 连通性
kubectl run curl --image=radial/busyboxplus:curl -i --tty --rm
# 在容器内执行:
curl <service-ip>:<port>

通过以上步骤,可定位并解决 IPVS no destination available 问题,确保 Service 流量正常转发。

相关文章:

  • Vue3+ Vite + Element-Plus + TypeScript 从0到1搭建
  • 卡特兰数--
  • 25_05_02Linux架构篇、第1章_03安装部署nginx
  • 【爬虫】码上爬第6题-倚天剑
  • 静态库和动态库的区别
  • SQL Server执行安装python环境
  • 用OMS从MySQL迁移到OceanBase,字符集utf8与utf8mb4的差异
  • Python实例题:高德API+Python解决租房问题
  • 室内烟雾明火检测数据集VOC+YOLO格式2469张2类别
  • 驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域绘制
  • 【专家库】Kuntal Chowdhury
  • 【挖洞利器】GobyAwvs解放双手
  • 基站综合测试仪核心功能详解:从射频参数到5G协议测试实战指南
  • RabbitMQ-api开发
  • 天文探秘学习小结
  • Java 函数式编程
  • 基于GA遗传优化的不同规模城市TSP问题求解算法matlab仿真
  • 删除排序链表中的重复元素:三种解法详解
  • 【Python-Day 10】Python 循环控制流:while 循环详解与 for 循环对比
  • ETL交通行业案例丨某大型铁路运输集团ETL数据集成实践
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 外企聊营商|上海仲裁:化解跨国企业纠纷的“上海路径”
  • 人形机器人灵犀X2掌握新技能:有了“内心戏”,还会拳脚功夫
  • 腾讯一季度净利增14%:AI直接拉动广告收入增长,王者荣耀流水创新高
  • “三个集中”之后:图说浦东新区28次撤乡并镇
  • 宜昌谱写新叙事:长江大保护与高质量发展如何相互成就