You need to enable JavaScript to run this app. Kubernetes集群使用Calico CNI时工作节点无法访问本地CoreDNS Pod如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes集群使用Calico CNI时工作节点无法访问本地CoreDNS Pod如何解决

故障排查与修复指南

核心现象说明

跨节点访问节点IP上的CoreDNS 8080健康检查端口正常,节点本地访问自身IP的对应端口超时,该问题为Calico CNI部署场景下的典型网络策略/内核参数配置问题。

排查步骤

  • 检查CoreDNS端口暴露配置
    执行命令kubectl get pod -n kube-system -l k8s-app=kube-dns -o yaml,确认CoreDNS Pod是否通过hostPort绑定了8080端口,或对应Service是否通过NodePort暴露了8080端口。
  • 校验kube-proxy转发规则
    若kube-proxy为iptables模式,执行iptables -t nat -nvL KUBE-SERVICES | grep 8080,检查是否存在对应8080端口的DNAT转发规则,规则是否指向运行在本地的CoreDNS PodIP;若为ipvs模式,执行ipvsadm -Ln | grep 8080检查虚拟服务规则是否配置正确。
  • 检查rp_filter内核参数配置
    该场景90%以上的问题由该参数配置错误导致:Calico默认会将节点的反向路径过滤参数rp_filter设置为严格模式(值为1),本地访问本机节点IP的端口时,请求路径和回包路径不一致,会被rp_filter规则直接丢弃。
    执行命令sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.default.rp_filter,如果输出值为1即可确认根因。

修复方案

  • 方案1:调整Calico的rp_filter校验模式(最通用)
    执行以下命令修改Calico Felix配置,将反向路径校验改为宽松模式:
    kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"ipv4StrictReversePathForwarding": "Loose"}}'
    
    也可以直接修改节点内核参数永久生效:
    echo "net.ipv4.conf.all.rp_filter=2" >> /etc/sysctl.conf
    echo "net.ipv4.conf.default.rp_filter=2" >> /etc/sysctl.conf
    sysctl -p
    
  • 方案2:调整CoreDNS访问方式
    若不想修改全局网络配置,可以修改CoreDNS的健康检查监听地址为0.0.0.0,本地节点直接访问127.0.0.1:8080即可,无需走节点IP转发。
  • 方案3:修复kube-proxy hairpin配置(适用于ipvs模式)
    若kube-proxy使用ipvs模式,检查是否开启了hairpinMode:编辑kube-proxy ConfigMap,将hairpin-mode设置为hairpin-veth,重启kube-proxy Pod后生效。

内容的提问来源于stack exchange,提问作者JovialCoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 17:36:02