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 网络的规则与实现原理,敬请关注。

相关推荐
发光小北17 分钟前
Modbus TCP 转 Profinet 主站网关如何应用?
网络·网络协议·tcp/ip
易连EDI—EasyLink3 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
@insist1234 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
SmartRadio4 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
_.Switch4 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
金色光环5 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
数智化精益手记局5 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
Nice_Fold6 小时前
Kubernetes DaemonSet、StatefulSet与Service(自用笔记)
笔记·容器·kubernetes
灰子学技术7 小时前
Envoy HTTP 过滤器处理技术文档
网络·网络协议·http
Olivia051405149 小时前
Voohu:音频变压器的屏蔽接地技术对50Hz工频噪声抑制的影响
网络·机器人·信息与通信