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 位(二进制位),例如:

    ini 复制代码
    192.168.0.1 = 11000000.10101000.00000000.00000001

    IP 地址通常用 "网络位 + 主机位" 来区分:

    • 网络位(Network bits):用于标识子网。
    • 主机位(Host bits):用于标识该子网中的具体主机(如 Pod、VM 等)。
  • /18 是什么意思?

    ini 复制代码
    10.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 IPS10.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 通信。

四、总结

本文全面介绍了 KubernetesPod 网络的生成、配置、分发与通信机制。

通过对网络位划分、Block 分配、节点 Pod 容量等细节的讲解,相信大家对 Pod 网络已经有了系统性的认知。

下一篇文章将重点解析 Service 网络的规则与实现原理,敬请关注。

相关推荐
一只游鱼4 小时前
webSocket快速入门
网络·websocket·网络协议
AALoveTouch7 小时前
大麦网抢票:基于Wireshark协议分析
网络·测试工具·wireshark
dalianwawatou7 小时前
云原生-k8s
云原生·容器·kubernetes
荣光波比8 小时前
K8S(四)—— Kubectl从入门到精通:K8s资源管理与项目生命周期实战指南
云原生·容器·kubernetes
爱奥尼欧8 小时前
【Linux笔记】网络部分——socket 编程 TCP实现多台虚拟机使用指令访问云服务器
linux·服务器·网络
荣光波比8 小时前
K8S(五)—— K8s中YAML文件全方位解析:语法、案例、Port详解与快速编写技巧
云原生·容器·kubernetes
luopandeng8 小时前
amd npt技术 对比 intel ept 技术
java·linux·网络
迎風吹頭髮8 小时前
UNIX下C语言编程与实践60-UNIX TCP 套接字关闭:close 与 shutdown 函数的区别与使用场景
c语言·网络·unix
梁辰兴8 小时前
计算机操作系统:进程同步
网络·缓存·操作系统·进程·进程同步·计算机操作系统