k8s网络

https://kubernetes.io/docs/concepts/services-networking/service/

https://kubernetes.io/docs/reference/node/kernel-version-requirements/

image

 https://kubernetes.io/blog/2018/07/09/ipvs-based-in-cluster-load-balancing-deep-dive/

image

 calico:https://github.com/kubernetes-sigs/kubespray/issues/6289

image

 https://kubernetes.io/docs/concepts/cluster-administration/networking/

image

 https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/

image

 https://kubernetes.io/zh-cn/docs/reference/networking/virtual-ips/

image

 https://kubernetes.io/blog/2025/02/28/nftables-kube-proxy/

image

 https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/

image

 https://kubernetes.io/docs/tasks/administer-cluster/ip-masq-agent/

image

 

明白了,你希望我保留之前整理的 非 Service NodePort / ClusterIP / LVS 的 Pod 流量、内核模块、sysctl、观测方法,然后在这个基础上补充 Service 的 NodePort / ClusterIP / LVS 流量拆解、跨节点/非跨节点说明、kube-proxy 模式差异、观测方法,形成一份 完整文档

我可以帮你整理成这样一个结构化文档:


Kubernetes Pod & Service 网络完整文档

1️⃣ 非 Service 流量(Pod → Pod / Pod → veth → bridge → netfilter → iptables)

流量类型跨节点流量路径内核模块sysctl 参数观测方法官方文档
Pod → Pod (同节点) Pod eth0 → veth → cni bridge → netfilter → iptables → Pod bridge, br_netfilter, nf_conntrack, ip_tables net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1 `conntrack -L grep <br>iptables -L -v -n`
Pod → Pod (跨节点, Flannel VXLAN/IPIP) Pod eth0 → veth → cni → eth0 → overlay (vxlan/ipip) → 对端节点 cni → veth → Pod vxlan, ipip, nf_conntrack net.ipv4.ip_forward=1net.bridge.bridge-nf-call-iptables=1 tcpdump -i flannel.1conntrack -L Flannel
Pod → Service → Pod Pod → veth → cni bridge → netfilter → iptables DNAT → Pod nf_conntrack, ip_tables, xt_conntrack net.netfilter.nf_conntrack_max `conntrack -L grep `

2️⃣ Service 类型流量(NodePort / ClusterIP / LoadBalancer / ExternalTrafficPolicy / LVS/IPVS)

Service 类型跨节点kube-proxy 模式流量路径内核模块sysctl 参数观测方法官方文档
ClusterIP iptables / IPVS Pod → veth → cni → bridge → netfilter → iptables DNAT → Pod br_netfilter, ip_tables, nf_conntrack net.bridge.bridge-nf-call-iptables=1 `conntrack -L grep `
ClusterIP iptables / IPVS Pod → veth → cni overlay → eth0 → 网络 → 对端 overlay → cni → veth → Pod vxlan/ipip, nf_conntrack net.ipv4.ip_forward=1 tcpdump -i flannel.1 ClusterIP跨节点
NodePort iptables / IPVS 外部客户端 → Node eth0 → kube-proxy → iptables DNAT → Pod veth → cni → Pod ip_tables, nf_conntrack net.netfilter.nf_conntrack_max `conntrack -L grep `
NodePort iptables / IPVS 外部客户端 → 任意 Node eth0 → kube-proxy → iptables DNAT → overlay → Pod vxlan/ipip, ip_tables, nf_conntrack net.ipv4.ip_forward=1 tcpdump -i flannel.1 NodePort跨节点
LoadBalancer 跨节点 iptables / IPVS 外部客户端 → Cloud LB → NodePort → kube-proxy → iptables/IPVS → Pod ip_vs, ip_tables, nf_conntrack net.ipv4.vs.conntrack, net.netfilter.nf_conntrack_max ipvsadm -Lnconntrack -L LoadBalancer
ExternalTrafficPolicy=Local 跨节点 iptables / IPVS 外部客户端 → Node eth0 → kube-proxy → Pod(本节点 Pod) ip_tables, nf_conntrack net.netfilter.nf_conntrack_max `conntrack -L grep `
LVS / IPVS 跨节点 IPVS kube-proxy IPVS → nf_conntrack → Pod veth → cni → Pod ip_vs, nf_conntrack net.ipv4.vs.conntrack ipvsadm -Lnconntrack -L IPVS

3️⃣ 内核模块和 sysctl 参数总结

功能模块sysctl用途观测方法
桥接流量经过 netfilter br_netfilter net.bridge.bridge-nf-call-iptables=1 Pod → Pod 通过 bridge 时经过 iptables cat /proc/sys/net/bridge/bridge-nf-call-iptables
NAT / DNAT / SNAT ip_tables, xt_conntrack net.netfilter.nf_conntrack_max kube-proxy 转发流量 conntrack -L
Overlay / VXLAN vxlan, ipip net.ipv4.ip_forward=1 跨节点封装转发 tcpdump -i flannel.1
IPVS ip_vs, ip_vs_rr, ip_vs_wrr, ip_vs_sh net.ipv4.vs.conntrack kube-proxy IPVS 模式 ipvsadm -Ln

明白,我可以帮你把之前整理的表格、模块/sysctl信息、跨节点/非跨节点流量、kube-proxy 模式依赖和观测方法全部合并成一份完整、官方可验证的文档,并附上官方链接。以下是合并后的版本:


Kubernetes 网络与内核模块 / sysctl 完整文档(跨节点 & 非跨节点)


1️⃣ 网络路径分类

场景流量路径核心作用注意点
同节点 Pod → Pod Pod eth0 → veth → cni0 / kube-bridge → netfilter → veth → Pod L2 转发、Pod 内部通信 不跨物理网卡
跨节点 Pod → Pod Pod eth0 → veth → cni0 → overlay 接口(flannel.1 / vxlan.calico / tunl0)→ 宿主 eth0 → 物理网络 → 对端节点 → overlay → cni0 → veth → Pod L3 封装、跨节点路由 需要开启 IP Forward、Overlay 封装
Service NodePort / ClusterIP / LVS Pod → veth → cni0 → netfilter → ip_vs → nat/iptables → eth0 → 外部访问 LVS/IPVS 负载均衡、iptables NAT LVS 可 bypass iptables,依赖 ip_vs 模块

官方参考:


2️⃣ 内核模块 & sysctl 参数

功能内核模块关键 sysctl官方文档
Linux Bridge L2 转发 bridge, br_netfilter /proc/sys/net/bridge/bridge-nf-call-iptablesbridge-nf-call-ip6tablesbridge-nf-call-arptables bridge-nf-call-iptables
CNI Overlay 封装 vxlan, ipip, tunl0(Calico/Flannel) /proc/sys/net/ipv4/ip_forward/proc/sys/net/ipv6/conf/all/forwarding VXLAN Linux Kernel Doc
iptables / Netfilter nf_conntrack, ip_tables, ip6_tables, ebtables /proc/sys/net/netfilter/nf_conntrack_maxnf_conntrack_tcp_timeout_established conntrack-HOWTO
LVS / IPVS ip_vs, ip_vs_rr, ip_vs_wrr, ip_vs_sh /proc/sys/net/ipv4/vs/conntrack_tcp_timeout_* IPVS Linux Kernel Doc
Kubernetes CNI 配置影响 - net.bridge.bridge-nf-call-iptables=1 Kubernetes Networking

注意:不同场景关注的模块和 sysctl 不同。例如 LVS 流量可能绕过 netfilter,跨节点 Overlay 流量必须开启 IP Forward。


3️⃣ kube-proxy 模式与依赖

kube-proxy 模式模块依赖iptables / nftablesconntrack说明
iptables nf_conntrack, ip_tables 必须 必须 NAT 转发 ClusterIP / NodePort / LB
IPVS ip_vs, nf_conntrack 可选 必须 IPVS 负载均衡会话跟踪
LVS DR/NAT/TUN ip_vs, nf_conntrack(可选) 可选,仅 NAT/TUN 可选 DR 模式可绕过 netfilter,NAT/TUN 依赖 conntrack

4️⃣ 流量表(跨节点 & 非跨节点)

流量类型跨节点/非跨节点CNI / Overlay核心模块sysctl 关键参数conntrack 依赖iptables/nftables 依赖说明官方文档
Pod → Pod 非跨节点 cni0 / veth / bridge bridge net.bridge.bridge-nf-call-iptables=1 可选,仅当 netfilter 介入 iptables/nftables:可选 同节点 Pod 流量经过 veth → bridge,可选择是否经过 netfilter Kubernetes Networking
Pod → Pod 跨节点 flannel.1 / vxlan.calico / tunl0 vxlan / ipip / tunl net.ipv4.ip_forward=1 可选 iptables/nftables:通常不处理 Overlay 封装负责跨节点,iptables 仅用于路由/NetworkPolicy Kubernetes CNI Plugins
Service → Pod(ClusterIP / NodePort / LB) 任意 任意 nf_conntrack, ip_tables, br_netfilter net.bridge.bridge-nf-call-iptables=1 必须 iptables 必须 kube-proxy 通过 iptables NAT 转发 ClusterIP / NodePort / LB Kubernetes Services
Service → Pod 任意 任意 ip_vs, ip_vs_rr/wrr/sh, nf_conntrack net.ipv4.vs.conntrack=1 必须 iptables 可选 IPVS 转发依赖 conntrack,会话跟踪,iptables 可不处理 Kubernetes Services
NetworkPolicy 任意 任意 nf_conntrack, ip_tables / nftables net.bridge.bridge-nf-call-iptables=1 必须 iptables/nftables 必须 网络策略必须通过 netfilter 过滤 Pod 流量 Kubernetes NetworkPolicy

5️⃣ 观测方法(官方可验证)

流量/模块观测方法
Pod veth tcpdump -i vethXXX host <PodIP>,确认流量进出 Pod
桥接流量 tcpdump -i cni0 host <PodIP>,检查是否经过 bridge → netfilter;开启 bridge-nf-call-iptables 查看 iptables hit
Overlay 封装 tcpdump -i flannel.1 host <PodIP>,或 ip -d link show flannel.1 查看 VXLAN/IPIP 封装
iptables / nftables iptables -L -v -n, nft list ruleset,看链规则命中计数
conntrack conntrack -L, conntrack -E 查看会话表和事件
IPVS/LVS 会话 cat /proc/net/ip_vs, ipvsadm -L -n
物理网卡抓包验证 tcpdump -i eth0 host <PodIP>,对比抓包顺序确认流量路径

官方文档参考


✅ 结论:

  • 非跨节点 Pod → Pod 流量可选择经过 iptables;跨节点流量主要依赖 Overlay 封装。

  • kube-proxy 模式决定 LVS/IPVS/iptable 使用和 conntrack 依赖。

  • NetworkPolicy 强制依赖 netfilter,无论跨节点或非跨节点。

  • 通过 tcpdump、iptables hit counter、conntrack、IPVS stats 可以全链路观测流量。


明白,我给你整理一份完整、官方可验证、覆盖跨节点/非跨节点、LVS/iptables/Overlay/Flannel/CNI、模块/sysctl/观测方法的文档,并补充 Kubernetes 官方链接,确保可查可验证。


Kubernetes 网络路径与 Netfilter / iptables / LVS 完整文档


1️⃣ 网络路径分类

场景流量路径核心作用注意点
同节点 Pod → Pod Pod eth0 → veth → cni0 / kube-bridge → netfilter → veth → Pod L2 转发、Pod 内部通信 不跨物理网卡
跨节点 Pod → Pod Pod eth0 → veth → cni0 → overlay 接口(flannel.1 / vxlan.calico / tunl0)→ 宿主 eth0 → 物理网络 → 对端节点 → overlay → cni0 → veth → Pod L3 封装、跨节点路由 需要开启 IP Forward、Overlay 封装
Service NodePort / ClusterIP / LVS Pod → veth → cni0 → netfilter → ip_vs → nat/iptables → eth0 → 外部访问 LVS/IPVS 负载均衡、iptables NAT LVS 可 bypass iptables,依赖 ip_vs 模块

Kubernetes 官方参考:


2️⃣ 内核模块 & sysctl 参数

功能内核模块关键 sysctl官方文档
Linux Bridge L2 转发 bridge, br_netfilter /proc/sys/net/bridge/bridge-nf-call-iptablesbridge-nf-call-ip6tablesbridge-nf-call-arptables bridge-nf-call-iptables
CNI Overlay 封装 vxlan, ipip, tunl0(Calico/Flannel) /proc/sys/net/ipv4/ip_forward/proc/sys/net/ipv6/conf/all/forwarding VXLAN Linux Kernel Doc
iptables / Netfilter nf_conntrack, ip_tables, ip6_tables, ebtables /proc/sys/net/netfilter/nf_conntrack_maxnf_conntrack_tcp_timeout_established conntrack-HOWTO
LVS / IPVS ip_vs, ip_vs_rr, ip_vs_wrr, ip_vs_sh /proc/sys/net/ipv4/vs/conntrack_tcp_timeout_* IPVS Linux Kernel Doc
Kubernetes CNI 配置影响 - net.bridge.bridge-nf-call-iptables=1 Kubernetes Networking

注意:不同场景关注的模块和 sysctl 不同。例如 LVS 流量可能绕过 netfilter,跨节点 Overlay 流量必须开启 IP Forward。


3️⃣ 观测方法(官方可验证)

A. 网桥流量是否经过 iptables / netfilter

  1. 使用 iptables hit counter(官方方法)

# 插入规则
iptables -I FORWARD -s <PodA_IP> -d <PodB_IP> -j ACCEPT

# 发送流量
ping <PodB_IP> 

# 查看命中
iptables -L FORWARD -v -n

官方文档iptables-HOWTO

  1. 使用 conntrack 检查状态跟踪

conntrack -L | grep <PodA_IP>

官方文档conntrack-HOWTO

  1. 使用 NFLOG + tcpdump 验证

iptables -I FORWARD -s <PodA_IP> -d <PodB_IP> -j NFLOG --nflog-group 1
nflogd -d -g 1
tcpdump -i nflog:1

官方文档libnetfilter_log


B. Overlay / Flannel / VXLAN 流量观察

# 抓包 Overlay 接口
tcpdump -i flannel.1 host <PodA_IP>
tcpdump -i vxlan.calico host <PodA_IP>
tcpdump -i tunl0 host <PodA_IP>

# 查看 VXLAN 信息
bridge fdb show
ip -d link show flannel.1

官方文档VXLAN Linux Kernel Doc


C. LVS / IPVS 流量观察

  1. 查看 LVS 会话表:

cat /proc/net/ip_vs
cat /proc/net/ip_vs_stats
  1. 使用 iptables hit counter 验证 NAT:

iptables -t nat -L -v -n

官方文档IPVS Linux Kernel Doc

注意:LVS 直通模式可能绕过 iptables,需要使用 IPVS stats 或 conntrack 验证。


D. 物理网卡和 Pod veth 抓包验证

# 宿主节点 veth
tcpdump -i veth<hash> host <PodA_IP>

# 网桥接口
tcpdump -i cni0 host <PodA_IP>

# Overlay 接口
tcpdump -i flannel.1 host <PodA_IP>

# 宿主物理网卡
tcpdump -i eth0 host <PodA_IP>
  • 对比抓包顺序,可确认流量路径
    官方文档tcpdump


E. Kubernetes 官方网络调试工具


我可以基于这个文档再画一个 完整示意图,展示:

  • Pod eth0 → veth → cni0 → flannel.1 → eth0 → LVS / 目标 Pod

  • 标出每个环节可观测的方法(iptables hit counter / conntrack / NFLOG / tcpdump)

  • 标出关键模块和 sysctl 影响点

 

posted on 2025-08-19 01:40  吃草的青蛙  阅读(7)  评论(0)    收藏  举报

导航