You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单节点上Pods存活与就绪探测失败问题排查求助

Kubernetes单节点Pod探测失败/网络可达性异常排查方案

核心现象复盘

  • 单Worker节点调度Pod后,HTTP存活/就绪探测失败,无法从节点内部或集群其他节点访问Pod IP、Service IP,对应Service的Endpoint未被填充
  • 该节点上Calico、MetalLB Pod运行正常;Pod内部可正常访问外部网络,vxlan.calico接口存在双向流量;节点内核参数、加载模块与其他Worker节点一致

针对性排查步骤

一、Calico网络配置与Endpoint验证

  1. 检查节点Pod CIDR分配与Calico节点配置一致性

    kubectl get node <异常节点名> -o jsonpath='{.spec.podCIDR}'
    calicoctl get node <异常节点名> -o yaml | grep -A10 -B5 "spec"
    

    确认Pod CIDR无冲突,Calico节点的bgp/vxlan配置与正常节点完全匹配。

  2. 查看异常节点上的Calico Endpoint状态

    calicoctl get endpoint --node=<异常节点名> -o yaml
    

    对比正常节点的Endpoint,检查是否存在status异常、ipNetworks配置错误,此类问题会直接导致Service Endpoint无法填充。

  3. 验证Calico专用路由表规则
    在异常节点执行:

    ip route show table calico-vxlan
    ip route show table calico-ipip
    

    确认Pod CIDR路由正确指向vxlan.calico接口,下一跳配置与正常节点一致。

二、iptables转发规则与网络命名空间排查

  1. 检查Kubernetes核心iptables链完整性

    iptables-save | grep -E "KUBE-SERVICES|KUBE-NODEPORTS|KUBE-PODS"
    

    对比正常节点,确保KUBE-PODS链包含该节点Pod CIDR的转发规则,各链规则数量、内容无缺失。

  2. 进入Pod网络命名空间验证入站流量
    获取Pod的容器PID:

    kubectl get pod <异常Pod名> -o jsonpath='{.status.containerStatuses[0].containerID}' | cut -d'://' -f2
    nsenter -t <PID> -n
    

    在命名空间内执行tcpdump -i any port <探测端口>,同时从节点主机发起curl <Pod IP>:<探测端口>,观察是否有数据包进入命名空间:

    • 无数据包:节点到Pod的转发规则存在问题
    • 有数据包但无响应:检查Pod内服务监听配置

三、策略路由与子接口冲突排查

  1. 检查策略路由优先级与规则范围

    ip rule show
    ip route show table all
    

    确保Calico专用路由表(如calico-vxlan)优先级高于自定义策略路由,且自定义路由未拦截Pod CIDR、Kubernetes Service CIDR的流量。

  2. 验证子接口与VXLAN接口的邻居表

    ip neigh show dev <子接口名>
    ip neigh show dev vxlan.calico
    

    确认vxlan.calico接口的邻居条目正常,子接口ARP表无异常条目导致流量误转发。

四、Calico VXLAN隧道深层验证

  1. 检查VXLAN接口配置一致性

    ip link show vxlan.calico
    

    确认VNI值(默认4096)、接口状态与正常节点一致。

  2. 生成Calico节点诊断报告

    calicoctl node diags --node=<异常节点名>
    

    重点查看报告中VXLAN connectivity部分,确认与集群其他节点的隧道连接状态。

五、Kubelet与CRI-O网络配置检查

  1. 验证kubelet Pod CIDR配置

    cat /var/lib/kubelet/config.yaml | grep podCIDR
    

    确保kubelet使用的Pod CIDR与Calico分配的完全一致,无手动配置冲突。

  2. 检查CRI-O网络插件配置

    cat /etc/crio/crio.conf | grep -A10 -B5 "network"
    

    确认CRI-O使用Calico CNI插件,配置路径与正常节点一致,无自定义CNI配置干扰。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:35:34