文章目录
- [Kubernetes Pod 网络与 Service 网络全解析](#Kubernetes Pod 网络与 Service 网络全解析)
Kubernetes Pod 网络与 Service 网络全解析
一、前言:
很久没有写博客了。过去这一段时间里,忙于工作和生活的各种琐事,写作这件事被我无意间搁置了。如今重新打开编辑器,熟悉的界面让我有些感慨。是时候重新开始记录、思考、分享了。
很多同学在使用 Kubernetes 时,常常会对网络机制产生疑惑:
为什么每个 Pod 都有独立 IP?不同节点的 Pod 是如何互通的?Service 又是如何实现流量转发与负载均衡的?今天这篇文章就来聊聊这部分"老生常谈但又绕不开"的内容------
Kubernetes 中 Pod 与 Service 的网络分配与配置原理,带你理清其中的逻辑与实现方式。
二、结构图

三、Pod 网络详解
如上图所示:集群网络配置了Cluster_CIDR: 10.244.0.0/18
,在集群中他是如何展开的呢?
首先了解所配置的网络可用 IP 数,如图:

可分配的子网数量
-
为什么是 (32-18)?
一个 IPv4 地址共有 32 位(二进制位),例如:
ini192.168.0.1 = 11000000.10101000.00000000.00000001
IP 地址通常用 "网络位 + 主机位" 来区分:
- 网络位(Network bits):用于标识子网。
- 主机位(Host bits):用于标识该子网中的具体主机(如 Pod、VM 等)。
-
/18 是什么意思?
ini10.244.0.0/18
这表示:
- 前 18 位用于「网络标识」。
- 剩下的 32 - 18 = 14 位用于「主机标识」。
也就是说,这个网段里可以分配的 IP 数量,取决于这 14 位能组合出多少种不同的主机地址。由此可见可以使用 16384
总地址数量。
可以支持的节点数量
算式:
ini
{2}^{(32-24)}=256 -> 每个子网的地址数量(每个节点可分配的 IP 数)
疑惑:其中的24
又是哪里来的?
解惑:整体概览中的 Kube-Controller-Manager
的参数:--node-cidr-mask-size init32
(群集中节点cidr的掩码大小。 IPv4的默认值为24,IPv6的默认值为64),所以使用的24
就是这么来的。每个节点上的 CNI(例如 Flannel、Calico 等)会为自己分配一个 小网段,例如:
ini
10.244.0.0/24
10.244.1.0/24
10.244.2.0/24
......
每个 /24 子网包含:
2^(32 - 24) = 2^8 = 256 个 IP
那么根据计算结果得出,该集群最大支持 64 个节点,换句话说就是:
- 整个集群的 Pod 地址池是 /18。
- 每个节点分配一个 /24 子网。
- 理论上最多可以容纳 64 (10.244.0.0/24--10.244.63.0/24)个节点(每节点最多 256 个 Pod IP)。
POD IP 如何分配
经过以上的分析已经知道么个节点可以在下列中分配一个网段:
ini
10.244.0.0/24
10.244.1.0/24
10.244.2.0/24
......
那么Node
节点上的Pod IP
为什么是10.244.xx.0/26
的?接下来咱们一起看下!
当POD CICD
已经分配的情况下,会通过Kube-Calico-Manager
接口负责为每个Pod
生成IP
,该组件的默认配置--CALICO_IPV4POOL_BLOCK_SIZE String
决定了默认的子网掩码(默认:26),所以生成的 Pod IPS
是10.244.xx.0/26
。
POD跨节点通信管理
如图展示,在每个 Node 节点分配了 10.244.(0-63).0/24的池子,又通过 Kube-Calico-Manager 生成了 POD IPS 的更小池子,当 POD 启动并且分配了 IP 时会在 Node 节点生成路由规则(通过BGP 广播
或IP-in-IP 隧道),例如:
ini
10.244.xx.xx/26 <下一跳node-ip-address> <出口设备> <路由协议> onlink
10.244.xx.xx/26 <下一跳node-ip-address> <出口设备> <路由协议> onlink
10.244.xx.xx/26 <下一跳node-ip-address> <出口设备> <路由协议> onlink
根据路由规则就实现了跨节点的 POD 通信。
四、总结
本文全面介绍了 Kubernetes
中 Pod
网络的生成、配置、分发与通信机制。
通过对网络位划分、Block 分配、节点 Pod 容量等细节的讲解,相信大家对 Pod 网络已经有了系统性的认知。
下一篇文章将重点解析 Service 网络的规则与实现原理,敬请关注。