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

相关推荐
机器学习之心2 小时前
基于双向时序卷积网络与门控循环单元(BiTCN-GRU)混合模型的时间序列预测MATLAB代码
网络·matlab·gru·bitcn-gru
我也要当昏君2 小时前
4.2【2022统考真题】
网络·智能路由器
jenchoi4133 小时前
【2025-11-01】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全
一枚正在学习的小白4 小时前
k8s的包管理工具helm3--流程控制语句和变量(3)
linux·运维·服务器·云原生·kubernetes
Nimsolax4 小时前
Linux网络传输层协议UDP
linux·网络·udp
我也要当昏君4 小时前
4.2 【2018统考真题】
网络
七七七七075 小时前
【计算机网络】NAT技术深度解析:从原理到NAPT实现的工作机制
网络·网络协议·计算机网络·智能路由器·信息与通信
嵌入式小羊子5 小时前
TCP/IP是什么?OSI又是什么?
网络·tcp/ip
缘的猿6 小时前
kubectl 学习心得:从入门到实践的 K8s 命令行掌控之旅
云原生·容器·kubernetes