Flannel后端为UDP模式下,分析数据包的发送方式(二)

发往 10.244.2.5 的数据包最终会经过物理网卡 enp0s3 ,尽管路由表直接指定通过 flannel.1 发出。以下以 Markdown 格式详细解释为什么会经过 enp0s3,结合 Kubernetes 和 Flannel UDP 模式的背景。


问题分析

在 Kubernetes 环境中,使用 Flannel 的 UDP 模式,数据包的目标 IP 10.244.2.5 根据路由表匹配到以下路由:

复制代码
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.244.2.0      10.244.2.0      255.255.255.0   UG    0      0        0 flannel.1

这表明数据包通过 flannel.1 网卡发出,网关为 10.244.2.0。但问题是,数据包是否最终会经过物理网卡 enp0s3?答案是肯定的,我们从 Flannel UDP 模式的工作机制来详细分析。


Flannel UDP 模式的数据包转发过程

在 Flannel 的 UDP 模式下,flannel.1 是一个 TUN 设备 ,工作在用户态,负责将数据包交给 Flannel 的用户态进程(flanneld)进行封装。以下是数据包从发出到最终传输的步骤:

  1. 路由匹配

    • 目标 IP 10.244.2.5 匹配路由 10.244.2.0/24,指定通过 flannel.1 接口,网关为 10.244.2.0
    • 数据包被发送到 flannel.1,这是一个虚拟 TUN 设备,数据包会从内核态传递到用户态的 flanneld 进程。
  2. Flanneld 的 UDP 封装

    • flanneld 进程接收到数据包后,查询 etcd 或 Kubernetes API 中的子网映射,确定 10.244.2.0/24 对应的目标节点。例如,目标节点的物理 IP 可能是 192.168.1.x(假设在 192.168.1.0/24 网络中)。
    • flanneld 将原始数据包(目标 IP 10.244.2.5)封装为 UDP 数据包,默认使用端口 8472。
    • 封装后的 UDP 数据包的目标 IP 是目标节点的物理 IP(例如 192.168.1.x),源 IP 是当前节点的物理 IP(例如 192.168.1.y)。
  3. 通过物理网卡发送

    • 封装后的 UDP 数据包需要通过节点的物理网络接口发送到目标节点。

    • 根据路由表,物理 IP 192.168.1.x 属于 192.168.1.0/24,匹配以下路由:

      复制代码
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
    • 因此,UDP 数据包通过 enp0s3 网卡发送到目标节点的物理 IP。

  4. 目标节点处理

    • 目标节点上的 flanneld 进程监听 UDP 端口 8472,接收到 UDP 数据包。
    • flanneld 解封装数据包,提取原始数据包(目标 IP 10.244.2.5)。
    • 数据包通过目标节点的 cni0 接口转发到本地 Pod 子网(10.244.2.0/24),最终到达目标 Pod。

为什么会经过 enp0s3?

  • flannel.1 的角色flannel.1 是 TUN 设备,负责将数据包从内核态传递到用户态的 flanneld 进程。它不直接与物理网络交互,而是依赖 flanneld 进行 UDP 封装。
  • UDP 封装后的传输 :封装后的 UDP 数据包需要通过物理网络发送到目标节点。当前节点的物理网络接口是 enp0s3,它负责处理 192.168.1.0/24 网络的通信(包括目标节点的物理 IP)。
  • 路由表的作用 :路由表中的 192.168.1.0/24 条目明确指定通过 enp0s3 发送物理网络的流量。因此,flanneld 生成的 UDP 数据包会通过 enp0s3 发出。

数据包路径总结

  1. 数据包(目标 IP 10.244.2.5)根据路由表通过 flannel.1 发出。
  2. flannel.1 将数据包交给 flanneldflanneld 封装为 UDP 数据包(目标 IP 为目标节点的物理 IP,例如 192.168.1.x)。
  3. UDP 数据包根据路由表(192.168.1.0/24)通过 enp0s3 发出。
  4. 目标节点接收 UDP 数据包,解封装后转发到目标 Pod。

最终答案

是的,发往 10.244.2.5 的数据包最终会经过物理网卡 enp0s3 ,因为 Flannel UDP 模式将数据包封装为 UDP 格式后,通过物理网络接口 enp0s3 发送到目标节点。

复制代码
 - UDP 模式下,数据包在 `enp0s3` 上是 UDP 封装的,源和目标 IP 分别是发送和接收节点的物理 IP,端口为 8472。
  • 验证方法
    • 使用更广的过滤条件抓包,例如:

      bash 复制代码
      tcpdump -i enp0s3 udp port 8472

      这会抓取 Flannel UDP 模式的所有流量(默认端口 8472)。

    • 检查是否有 UDP 数据包,源和目标 IP 是否为节点间的物理 IP(例如 192.168.1.y -> 192.168.1.x)。

    • 如果需要确认数据包内容,可以使用 -X 查看数据包的原始内容,检查是否包含内部的 Pod IP 10.244.2.5


相关推荐
小白银子5 小时前
零基础从头教学Linux(Day 42)
linux·运维·服务器·网络·nginx
火星MARK5 小时前
如何配置 Ingress 的 SSL/TLS 证书?
网络·网络协议·ssl
看好多桂花树5 小时前
Nginx SSL/TLS 配置
网络·nginx·ssl
程序猿费益洲6 小时前
Docker 网络详解:(一)Linux 网络虚拟化技术
linux·网络·docker·容器·云计算
shylyly_7 小时前
Linux-> UDP 编程3
linux·运维·网络协议·udp·bind·cs·聊天室程序
云宏信息7 小时前
赛迪顾问《2025中国虚拟化市场研究报告》解读丨虚拟化市场迈向“多元算力架构”,国产化与AI驱动成关键变量
网络·人工智能·ai·容器·性能优化·架构·云计算
歪歪1008 小时前
什么是TCP/UDP/HTTP?
开发语言·网络·网络协议·tcp/ip·http·udp
luckys.one8 小时前
第12篇|[特殊字符] Freqtrade 交易所接入全解:API、WebSocket、限频配置详解
网络·ide·python·websocket·网络协议·flask·流量运营
踏过山河,踏过海8 小时前
在SSL证书是有效的前提下,依旧显示“资源不安全
网络协议·安全·ssl
roman_日积跬步-终至千里8 小时前
【系统架构设计(36)】网络规划与设计
网络·系统架构