k8s +cilium+metallb 集群流量走向

🟢 第一步:客户端访问 VIP

  • 外部客户端(Client)通过某个 VIP:Port 发起请求。

  • MetalLB 的 Speaker Pod 会通过 ARP 广播或 BGP 告诉外部网络设备:"VIP 是我负责的",这一步相当于"声明主权"。

  • 网络设备(如交换机、路由器)将目标是该 VIP 的流量转发到某个 Kubernetes 节点(如 Node A)。


🟡 第二步:节点接收并进入网络栈

  • 数据包到达 Node A 的物理网卡。

  • 在内核网络栈的早期阶段,Cilium 安装的 eBPF 程序就会接管该数据包。

  • 它会检查该包的目标 VIP 和端口,并从内存中的 Service 映射表中进行查找。


🟠 第三步:匹配 Service 并选择后端 Pod

  • 如果成功匹配到某个 Kubernetes Service,Cilium 根据配置的负载均衡算法(如 random、maglev)选择一个健康的后端 Pod,称为 Pod B。

  • 然后执行 DNAT(目标地址转换):

    • 将目标 IP 从 VIP 替换为 Pod B 的 IP(PodIP_B);

    • 将目标端口从 Service 的 Port 替换为 Pod 的 TargetPort(如果有端口映射)。


🔵 第四步:判断 Pod B 所在位置

  • 如果 Pod B 位于当前节点(Node A)上:

    • 数据包会通过主机上的 veth pair(虚拟网卡对)直接转发到 Pod B 的网络命名空间中。
  • 如果 Pod B 在另一个节点(Node C)上:

    • Cilium 会将数据包封装成 VXLAN 或 Geneve 隧道包;

    • 然后通过底层网络将其发送到 Node C;

    • Node C 解封装后再通过本地 veth 接口将数据包投递给 Pod B。


🟣 第五步:Pod B 处理并响应请求

  • Pod B 接收到请求后进行处理,并发送响应包:

    • 源 IP 是 PodIP_B;

    • 目标 IP 是客户端 IP。


🔴 第六步:SNAT 处理并回送响应

  • 在响应包离开节点前,Cilium 的 eBPF 程序会根据 Service 的配置进行 SNAT(源地址转换),以确保客户端能够正确接收响应:

    • 如果 Service 配置为 externalTrafficPolicy: Cluster,响应包的源 IP 会改为 VIP;

    • 如果配置为 Local 且 Pod B 在本节点,源 IP 会被改为 Node A 的 IP;

    • 如果 Pod B 不在本地,可能不做 SNAT,保持 PodIP_B 直接作为源地址。

  • 最终,响应包被发送回客户端,完成整个请求过程。

补充

veth pair是什么

veth pair 是 Linux 中用于连接两个网络命名空间的虚拟网卡「隧道」,就像两头连通的水管,在 Pod 和主机之间传输数据。

  • 在 Pod 里,看到的网卡是 eth0(其实是 veth pair 的一端);

  • 在主机里,会看到一个类似 lxc7a4d966402c0@if71 的接口(veth pair 的另一端);

相关推荐
阿里云云原生1 小时前
HiRoute 新版本发布:结合自己的真实工作选择最佳模型
云原生
IT利刃出鞘2 小时前
Docker Compose--解决修改配置后不生效的问题
运维·docker·容器
java_logo2 小时前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
好用斋3 小时前
拾光坞安装网盘聚合LitePan:把Docker命令翻译成图形界面
运维·docker·容器
对象存储与RustFS4 小时前
Velero 接 RustFS 实操:K8s 集群备份落到自建对象存储
后端·docker·云原生
weirong7 小时前
图解 client-go Informer:手写一个 mini-Informer 才敢说懂
kubernetes
.冰块.7 小时前
流量大了自动加 Pod!K8s HPA 扩缩容与 ResourceQuota/LimitRange 资源管控实战
linux·云原生·容器·kubernetes·hpa·quota·limitrange
方便面不加香菜7 小时前
Docker Container -- 容器命令详解
运维·docker·容器
Z21-X9 小时前
云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析
运维·笔记·学习·云原生
qq_452396239 小时前
第三篇:《从 ZooKeeper 到 KRaft 的迁移实战:前置条件、三阶段流程与回滚策略》
分布式·zookeeper·云原生