跨节点私网通信核心是构建独立容器子网平面,通过cni插件(如flannel vxlan/host-gw)分配节点独占/24子网、同步路由并封装转发,全程隔离公网,配合clusterip与coredns实现内部服务发现。

在容器化集群中实现跨节点私网通信,核心是让不同物理节点上的容器能像在同一局域网内一样,用内部 IP 直接互通,同时与公网流量严格隔离。这不依赖宿主机端口映射或公网暴露,而是通过网络平面分层和 CNI 插件协同完成。
私网通信依赖独立的容器子网平面
容器跨节点通信必须脱离宿主机默认的 docker0 桥接网络(172.17.0.0/16 等),也不能复用宿主机公网网卡的 IP 地址段。典型做法是:
- 为整个集群分配一个统一的私有大网段,如 10.244.0.0/16 或 172.18.0.0/16,该网段不与任何公网、IDC 内网或办公网重叠
- 每个节点从中划出一个独占的 /24 子网,例如 node-1 使用 10.244.1.0/24,node-2 使用 10.244.2.0/24
- Flannel、Calico 等 CNI 插件自动完成子网分配、路由同步和数据封装,确保容器发出的目标 IP 属于其他节点子网时,能被正确转发
公网与私网流量必须物理或逻辑隔离
公网访问容器服务应走明确的入口层(如 Ingress Controller、LoadBalancer Service),而非让容器直接绑定公网 IP。私网通信则全程不经过公网路径:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 宿主机的公网网卡(如 eth0)仅用于节点管理、镜像拉取、集群控制面通信(如 kube-apiserver 访问),不参与容器数据平面
- 容器网络使用独立虚拟设备:Flannel 对应 flannel.1(VXLAN)或 cni0(host-gw),Calico 使用 cali* 接口;这些接口绑定在私网子网上,与公网网卡无路由关联
- 防火墙规则需显式禁止从公网网卡进入容器子网的流量,例如:
iptables -A INPUT -i eth0 -d 10.244.0.0/16 -j DROP
VXLAN 或 host-gw 是主流私网通信后端选择
Flannel 默认 VXLAN 模式适合大多数环境,它在 IP 层之上构建二层覆盖网络,天然隔离底层物理网络拓扑:
- VXLAN 封装增加 50 字节开销,因此建议将节点间链路 MTU 调整为 1450,实测可将丢包率从 3.2% 降至 0.8%
- 若集群部署在可控内网(如同一机房、BGP 直连),且追求极致性能,可选用 host-gw 模式:它不封装,直接在宿主机路由表中添加到对端节点容器子网的静态路由,延迟更低但要求二层可达
- UDP 后端已淘汰,不建议用于生产;IPIP 在部分云厂商受限,兼容性不如 VXLAN
服务发现与 DNS 解析走集群内部通道
跨节点容器通信不应依赖公网 DNS 或外部负载均衡,而应由 Kubernetes 原生机制保障:
- Service 的 ClusterIP(如 10.96.0.10)仅在集群私网内有效,所有节点上的 kube-proxy 或 eBPF 规则将请求透明转发至后端 Pod IP
- DNS 解析(如
myapp.default.svc.cluster.local)由 CoreDNS 提供,解析结果始终返回私网 Pod IP,不涉及公网域名系统 - 跨命名空间调用也基于相同机制,无需额外打通公网或配置 NAT










