• Kubernetes 网络排查方法


    1 pod 常见网络异常分类

    1.1 网络不可达

    主要现象为 ping 不通,其可能原因为:

    • 源端和目的端防火墙(iptables, selinux)限制
    • 网络路由配置不正确
    • 源端和目的端的系统负载过高,网络连接数满,网卡队列满
    • 网络链路故障

    1.2 端口不可达

    主要现象为可以 ping 通,但 telnet 端口不通,其可能原因为:

    • 源端和目的端防火墙限制
    • 源端和目的端的系统负载过高,网络连接数满,网卡队列满,端口耗尽
    • 目的端应用未正常监听导致(应用未启动,或监听为 127.0.0.1 等)

    1.3 DNS 解析异常

    主要现象为基础网络可以连通,访问域名报错无法解析,访问 IP 可以正常连通。其可能原因为

    • Pod 的 DNS 配置不正确
    • DNS 服务异常
    • pod 与 DNS 服务通讯异常

    1.4 大数据包丢包

    主要现象为基础网络和端口均可以连通,小数据包收发无异常,大数据包丢包。可能原因为:

    • 可使用 ping -s 指定数据包大小进行测试
    • 数据包的大小超过了 docker、CNI 插件、或者宿主机网卡的 MTU 值。

    1.5 CNI 异常

    主要现象为 Node 可以通,但 Pod 无法访问集群地址,可能原因有:

    • kube-proxy 服务异常,没有生成 iptables 策略或者 ipvs 规则导致无法访问
    • CIDR 耗尽,无法为 Node 注入 PodCIDR 导致 CNI 插件异常
    • 其他 CNI 插件问题

    2 网络排查工具

    2.1 tcpdump

    2.2 wireshark 追踪流

    2.3 nsenter

    2.4 paping

    2.5 mtr

    3 Pod 网络异常排查思路及流程模型

    4 CNI 网络异常排查步骤

    5 实践

    5.1 现象

    • 所有节点之间的 pod 通信正常
    • 任意节点和 Pod curl registry 的 Pod 的 IP:5000 均可以连通
    • 新扩容节点 10.153.204.15 curl registry 服务的 Cluster lP 10.233.0.100:5000
      不通,其他节点 curl 均可以连通

    5.2 分析思路

    • 根据现象 1 可以初步判断 CNI 插件无异常
    • 根据现象 2 可以判断 registry 的 Pod 无异常
    • 根据现象 3 可以判断 registry 的 service 异常的可能性不大,可能是新扩容节点访问 registry 的 service存在异常

    5.3 怀疑方向

    • 问题节点的 kube-proxy 存在异常
    • 问题节点的 iptables 规则存在异常
    • 问题节点到 service 的网络层面存在异常

    5.4 排查过程

    • 排查问题节点的 kube-proxy
    • 执行 kubectl get pod -owide -nkube-system l grep kube-proxy 查看
      kube-proxy Pod 的状态,问题节点上的 kube-proxy Pod 为 running 状态
    • 执行 kubecti logs -nkube-system 查看问题节点
      kube-proxy 的 Pod 日志,没有异常报错
    • 在问题节点操作系统上执行 iptables -S -t nat 查看 iptables 规则
  • 相关阅读:
    【精品】JavaScript中获取URL中参数值的方法汇总
    Vue2基础学习
    服务器三种虚拟化技术
    一键生成ios&android应用图标
    提升网站排名到首页的有效方法(学会百度SEO排名的优化知识)
    BR 备份与恢复场景示例
    在 .NET Core 中构建工作服务和调度运行
    服务发现原理分析与源码解读
    postgresql 格式化查询树为图片 —— pgNodeGraph 与 pg_node2graph
    CV预测:快速使用DenseNet神经网络
  • 原文地址:https://blog.csdn.net/u013916029/article/details/127943571